shell脚本之expect自动应答语言

1、什么是交互式语言?

在脚本中写入与系统交互时可能出现的询问语句,然后将要回答的答案也写入脚本中,实现自问自答,从而实现脚本的人机交互。

expect 是自动应答命令用于交互式命令的自动执行
spawn 是 expect 中的监控程序,其运行后会监控命令提出的交互问题
send发送问题答案给交互命令
"\r"表示回车
exp_continue 标示当问题不存在时继续回答下面的问题
expect eof 标示问题回答完毕退出 expect 环境
interact标示问题回答完毕留在交互界面
set NAME [ lindex $argv n ]定义变量

2、案例

在这里插入图片描述
第一步:安装该软件

yum install -y expect.x86_64

查看这个软件的编译器:
在这里插入图片描述
编写脚本登录:

#!/usr/bin/expect
set ip 192.168.13.134    //定义登录的主机IP
set pass westos       //定义登录密码
spawn ssh root@$ip     //开启一个程序,远程登录$IP
expect {        //里面放入登录过程系统的交互过程及回答答案
        "(yes/no)?" { send   "yes\r";exp_continue }    //exp_continue是因为有时候我们第二遍登录的时候没有这个询问是否的语句的时候,就要执行continue
        "password:" { send "$pass\r" }

}
interact      //进入交互界面

expect{}语句:
expect {
“登录过程中提示的字符”(注意这里有空格) {(注意这里有空格) send "要回答的答案 \r " (注意这里也有空格)}
在这里插入图片描述
在这里插入图片描述
需求1:A远程登录到server1并执行一些命令,然后自动退出。
脚本:

#!/usr/bin/expect
set ip 192.168.13.134
set pass westos
spawn ssh root@$ip
expect {
        "(yes/no)?" { send "yes\r";exp_continue }
        "password:" { send "$pass\r" }

}
#interact     //关闭交互式界面,因为这次是在脚本里面输入要执行的代码
expect {
 "#" { send "touch /mnt/666\r";    //看到"#",就执行接下来的命令 ,各命令之间用;隔开       
 		send "ll -d /mnt/  > /mnt/666\r";
        send "exit\r" }       //最后退出登录
}
expect eof     //关闭expect

执行结果:其实是将命令在本机命令行自动输入,然后自己回答。一下整个过程全是自动:

[root@server1 shells]# expect -f expect1.sh 
spawn ssh root@192.168.13.134
root@192.168.13.134's password: 
Last login: Wed Nov 11 13:16:05 2020 from 192.168.13.129
mount: /dev/sr0 is write-protected, mounting read-only
mount: /dev/sr0 is already mounted or /var/www/html/rhel7.5 busy
       /dev/sr0 is already mounted on /var/www/html/rhel7.5
[root@server2 ~]# touch /mnt/666
[root@server2 ~]# ll -d /mnt/  > /mnt/666
[root@server2 ~]# exit
logout
Connection to 192.168.13.134 closed.

我们去登录的目标主机下看看命令是否执行成功:

[root@server2 mnt]# ls |grep 666
666
[root@server2 mnt]# cat 666 
drwxr-xr-x. 10 root root 4096 1111 13:18 /mnt/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值