shell脚本之免交互

shell脚本之免交互

多行重定向

格式

语法格式
命令<<   标记

...(输入内容)

标记

#!/bin/bash
cat <<EOF >1.txt
1
2
3
4
4
5
EOF

shell脚本之免交互_第1张图片

注意事项

  • 标记可以使用任意的合法字符(通用的字符是EOF)
  • 结尾的标记一定要顶格写,前面不能有任何字符(包括空格)
  • 结尾的标记后面也不能有任何字符(包括空格)
  • 开头标记前后空格会被省略掉
  • 单引号 变量双引号 —

expect

定义

是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题

rpm -q expect
rpm -q tcl
yum install -y expect

格式和命令

格式
expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]

相关命令
spawn 启动新的进程(监控,捕捉)
expect 从进程接收字符串
send 用于向进程发送字符串
exp_continue 匹配多个字符串在执行动作后加此命令
interact 允许用户交互expect  eof

(1)脚本解释器

expect 脚本中首先引入文件,表明使用的事哪一种shell

#!/usr/bin/expect

(2)spawn

spawn 后面通常跟一个Linux执行命令,表示开启一个会话、进程,并跟踪后续交互信息

例: spawn passwd root

(3)expect

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉有swpan启动的进程输出;

用于接受命令执行后的输出,然后和期望的字符串匹配

(4)send

向进程发送字符串,用于模拟用户的输入:该命令不能自动回车换行,一般要加 \r (回车) 或者\ n

脚本

ssh远程登录
#!/bin/bash
hostname=$1
passwd=$2

/usr/bin/expect <<EOF

spawn ssh root@$hostname

expect {
        "(yes/no)"
        {send "yes\r";exp_continue} 
        #exp_continue 表示允许 expect 继续向下执行指令.
        "*password"
        {send "$password\r"}
}
expect "*]#"
send "exit\r"
expect eof#结束符
EOF

shell脚本之免交互_第2张图片

远程传输
#!/usr/bin/expect
spawn scp /etc/redhat-release 10.0.0.7:/data
expect {
        "yes/no" { send "yes\n";exp_continue }
        "passwd" { send  "magedu\n" }
}
expect eof

shell脚本之免交互_第3张图片

你可能感兴趣的:(交互)