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 ]
- 选项:
- -c:从命令行执行expect脚本,默认expect是交互地执行的示例:expect -c "expect \n" {send "pressed enter\n"}
- -d:可以输出输出调试信息示例:expect -d ssh.exp
- expect中相关命令:
- spawn:启动新的进程
- send:用于向进程发送指令
- expect:从进程接收字符串
- interact:留在交互界面,允许用户交互
- 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
上一篇: shell脚本编程-变量初值处理、expect交互
下一篇: shell脚本--expect交互