shell脚本中的expect&send(周末不加班神器)

前言

交互界面怎么跑脚本避免加班,全靠expect&send组合跑跑跑,嘿咻嘿咻( •̀ ω •́ )✧

教程贼多且繁杂,都在讲ssh,照猫画虎的总结一丢丢经验哈~

“expect {”换行后的分隔符必须为tab!!


expect介绍

expect是shell中的一种解释器,与bash一样同为脚本解释器,但expect允许执行需要交互命令的时候进行捕捉指定内容然后输入指定的内容。

安装

使用expect需要提前安装

yum install -y expect

关键词

set time out10     # 设置expect捕捉超时时间,单位为秒
/usr/bin/expect    # 使用expect,一般与重定向结合使用,以达到在bash解释器下也能执行捕捉
send                    # 发送输入内容
spawn                 # 建立输入命令的会话
exp_continue      # 继续捕捉,不断开会话
expect { “等待捕捉的内容”{send"需要输入的内容"}} #与spawn结合使用,使用exp_continue进行多次捕捉 

栗子

#usr/bin/bash
#定义ssh登录ip和passwd需要修改的密码
ip=10.20.151.44
password=123456
#设置expect会话捕捉超时时间
set timeout 10 
# 使用expect 解释器
/usr/bin/expect <<-EOF
 #建立ssh命令会话窗口
spawn ssh
# 使用expect进行捕捉,格式为 “捕捉字符串” {捕捉到需执行操作}
# 加上;exp_continue 表示还需要继续保持捕捉动作(会话)
expect {
    "connecting (yes/no)" {send "yes\r";exp_continue}
    "password" {send "$password\r"}
} 
expect eof
EOF

PS

简书的markdown代码段显示有点丑,待改进求指导

推荐阅读更多精彩内容