欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚本expect预期交互

程序员文章站 2022-07-10 11:18:56
...

一、expect

expect 是基于TCL开发的,(例如:scp,ssh,telnet等)主要应用于自动化交互式操作的场景,借助Expect 处理交互的命令,可以将交互过程如:ssh登录,scp 等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。expect可以为交互式过程(比如FTP、SSH等登录过程)自动输送预先准备的文本或指令,而无需人工干预。触发的依据是预期会出现的特征提示文本。

二、安装、使用expect

  • yum -y install expect                 //安装expect
  • which expect                              //确认expect路径  /usr/bin/expect
  • expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
  • 选项:
  1. -c:从命令行执行expect脚本,默认expect是交互地执行的示例:expect -c "expect \n" {send "pressed enter\n"}
  2. -d:可以输出输出调试信息示例:expect -d ssh.exp
  • expect中相关命令:
  1. spawn:启动新的进程
  2. send:用于向进程发送指令
  3. expect:从进程接收字符串
  4. interact:留在交互界面,允许用户交互
  5. exp_continue:继续处理下一步命令
#!/bin/bash
for ip in `cat /data/tools/ip.txt`
do
echo -e "\033[32;1m-->-->-->->$ip<--<--<--<--\033[0m"
expect <<eof
spawn ssh -o StrictHostKeyChecking=no $ip
expect "password:" {send "1\r"}
expect "#" {send "mkdir -p /data/tools\r"}
expect "#" {send "touch a.txt\r"}
expect "#" {send "scp [email protected]:/data/tools/super_pi.tgz /data/tools\r"}
expect {
    "yes/no" {set timeout 300;send "yes\r";exp_continue}
    "password" {send "vayne\r"}
}
expect "#" {send "exit\r"}
eof
echo
done
#!/bin/bash
set - x
master_ip="10.186.248.10"
tmpJob=${JOB_NAME%%_CheckStyle}
job=${tmpJob##HiTouchCloud_}
if [ -f $WORKSPACE/${job}.xml ];then
        rm -f $WORKSPACE/${job}.xml
fi
expect <<EOF
spawn sftp -o GSSAPIAuthentication=no [email protected]$master_ip
expect {
        "*yes/no*" { send "yes\r"; exp_continue }
        "*password*" { send "jenkins\r" }
       }
sleep 2
expect "sftp>" {send "get $JENKINS_HOME/jobs/$JOB_NAME/lastSuccessful/build.xml  $WORKSPACE/$job.xml\r"}
expect "sftp>" {send "bye\r"}

spawn scp $WORKSPACE/$job.xml [email protected]:/home/jenkins_root/jenkins_workspace/workspace/Static/CheckStyleFile
expect {
        "*yes/no*" { send "yes\r"; exp_continue }
        "*password*" { send "imaxlb\r" }
       }
expect "#" {send "bye\r"}
EOF




 

相关标签: expect