EXPECT 脚本 批量 远程交互

5 篇文章 0 订阅
5 篇文章 0 订阅

在shell自动部署项目中对自动部署免去用户交互很痛苦

spawn 调用要执行的命令
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值

expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

设置expect永不超时。 set timeout -1

设置expect 10秒超时,如果超过10没有expect内容出现,退出。 set timeout 300

方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号。[cmd arg]

双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释 "some stuff"

大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释 {some stuff}

反斜线符号是用来引用特殊符号. 例如:n 代表换行. 反斜线符号也被用来关闭"$"符号, 引号,方括号和大括号的特殊含义

实例安装:

[root@localhost ~]# rpm -q expect
expect-5.45-14.el7_1.x86_64           (yum install -y expect)

实例应用

#!/bin/bash
#cmd.txt 需要终端运行命令
#ip.txt (ip password)
#190810
DOS=$(cat /root/cmd.txt)
set timeout 10
cat ip.txt |while read line;do
IP=$(echo $line |cut -d' ' -f1)
PASSWD=$(echo $line |cut -d' ' -f2)
/usr/bin/expect << EOF
spawn ssh root@$IP
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$PASSWD\r" }
}
expect "]#"
send "$DOS\r"
send "exit\r"
expect eof
EOF
done
[root@localhost ~]# cat cmd.txt ip.txt
df -Th
netstat -ntpl
192.168.50.60 redhat
192.168.50.61 redhat
192.168.50.62 redhat

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值