紧接着上篇脚本进行拆分,分析里面的每个单词以及参数,解开交互的面纱,下面看脚本


#!/bin/expect
spawn ssh root@192.168.222.131
expect {
      "yes/no"     {send "yes\r";exp_continue}  ##匹配到yes/no就自动输入yes,继续往下匹配
      "*password"    {send "root\r"}        ##匹配到password,则自动输入root
}
expect eof


拆头:

#!/bin/expect

这个大概一眼就看明白了吧,指定脚本解释器,和Shell脚本是一样的


拆胸:

spawn ssh root@192.168.222.131

spawn    这是个命令执行前缀,如果你要切入一个命令就要用它开始,比如mysql_secure_installation时才会产生交互信息,那么你需要用spawn引入


拆腹:

expect {
      "yes/no"     {send "yes\r";exp_continue}  ##匹配到yes/no就自动输入yes,继续往下匹配
      "*password"    {send "root\r"}       ##匹配到password,则自动输入root
}


expect     ##作用是对spawn产生信息进行一个过滤,或者说spawn产生的交互信息进行处理

"yes/no"   ##这个是对产生的交互信息进行过滤,发现yes/no的交互信息进行启用对应的策略进行处理,注意用“”标记

send "yes\r"    ##对上述匹配到的yes/no进行响应“yes”其中\r(发送)\n(换行)\t(Tab键)  send表示发送

exp_continue   ##表示继续进行下一项exp脚本匹配,当属于最后一项匹配则不需要exp_continue结束

*password    ##表示以password结尾的交互


拆脚:

expect eof

expect eof  ##结束脚本