shell脚本expect预期交互

一、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 root@192.168.1.254:/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 jenkins@$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 root@10.186.254.235:/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




 

#!/bin/bash
function scpHostA()
{
echo "set timeout 180
spawn scp root@192.168.100.11:/etc/passwd ./
expect \"*apassword:\" {send \"123456\"}
expect eof
">expect.sh
expect -f run.sh
}

function scpHostB()
{
echo "set timeout 180
spawn scp root@192.168.100.12:/etc/passwd ./
expect \"*apassword:\" {send \"123456\"}
expect eof
">expect.sh
expect -f run.sh
}

while true
do
echo -e "\033[1;32m1.DEV-A-192.168.100.11
2.DEV-B-192.168.100.12
3.退出\033[0m"

#tput setf 3
read -p "请选择主机:(选择数字即可)" Num
#tput setf 7
if [[ ! $Num =~ [1-9] ]];then
   echo -e "\033[1;31mYour choise is invalid,Pls select num in <1-9>,continue!"
   continue
fi

case $Num in
1)
    scpHostB
    echo -e "\033[1;32mScp success\033[0m"
    break
    ;;
2)
    scpHostA
    echo -e "\033[1;32mScp success\033[0m"
    break
    ;;
3)
    break
    ;;
*)
    echo -e "\033[1;32mGod Bless You\033[0m"
    ;;
esac
done

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值