编写expect脚本

0、前言

expect实现自动交互。如,scp,ssh,ftp、root等需要输入密码的交互需求;

例如ssh命令远程登录其他主机,会要求输入密码

 (ps:有时候有的机器登录也不需要密码)

#!/bin/sh
echo "start"
expect -c "
expect "hello"
send "world\n"
expect eof
"
echo "end"

 send "world\n"-------------->此处使用\n  或者 \r都是可以的。

1、expect的命令

命令含义
spawn调用要执行的命令
expect等待命令提示信息的出现(捕捉用户提示信息)
send发送需要交互的信息来替代手工输入
set设置变量的值
interact执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
expect eof与spawn对应,表示捕捉终端输出信息终止

说明:

1)interact 和expect eof   二者写一个就行,二者区别参考本文

2)写与不写interact 或expect eof 的区别:

  • 不写的话,假使从服务器192.168.1.1  通过ssh登录到 服务器192.168.1.2 ,登录密码自动输入后,立马又退回到1.1服务器;
  • 写上的话,登录密码自动输入后,就保持在1.2服务器终端上,可以正常在1.2服务器上操作了。

3)spawn 后面对应的是命令

4)expect  “password”        ------------------>注意字符串要加引号,引号中是包含的字符串就行,不用写全;

5)send  "mima\r"                ------------------->发送的字符串要加引号,并且一定要加 \r  ,表示回车,否则一直在等待send的内容。

 

6)等待时间设置

#!/usr/bin/expect    ----------->第一行告诉操作系统脚本里的代码使用那一个shell来执行

set timeout -1          ----------->设置expect永不超时

set timeout 10         ------------>设置expect10s超时,如果超过10s,没有expect内容出现,则会退出

expect 默认的时间是10s, 这个地方可以根据需求更改。

2、查看本机是否装了expect

命令:which  expect 

如果装了,会显示expect 的目录

没有装的话,看第二步。

3、expect的安装(需要能够上网)

系统为RHEL/CentOS:

sudo yum install expect

系统为Debian/Ubuntu:

sudo apt-get install expect

 装好目录在/usr/bin/expect

4、expect单独使用

#!/usr/bin/expect
set timeout 30
spawn ssh test@192.168.1.1
expect "password:"
send "pass\r"
expect eof

 单独使用expect 第一行写的是       #!/usr/bin/expect

expect "password:"   -------->判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5、expect在shell中的嵌套使用参考本文

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值