expect 命令

expect 命令

1,centos7 没有需要下载

```
yum install -y expect
```

2,语法,

#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass\r"
interact

#!/usr/bin/expect //解释器
set timeout 30 // 超时时间 timeout -1 为永不超时 (秒)
spawn ssh -l username 192.168.1.1 // spawn是进入expect环境后才可以执行的expect内部命令 它主要的功能是给ssh运行进程加个壳,用来传递交互指令 ,(可以理解为子进程)
expect “password:” // 从进程接收字符串,这里的expect是expect的一个内部命令,expect的shell命令和内部命令是一样的,但不是一个功能。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒;
send “ispass\r” // send接收一个字符串参数,并将该参数发送到进程。这里就是执行交互动作,与手工输入密码的动作等效。 命令字符串结尾别忘记加上“\r”,表示“回车键”。
interact // 允许用户交互;执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
$argv 参数数组 expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个…参数

 set  自定义变量名”
 列子:
 2)增加变量
#!/usr/bin/expect
set ip 192.168.100.11
set user root
set password 123456
set timeout 5
spawn ssh $user@$ip
expect {
        "password:" { send "$password\r" };
}
interact

列子:3)接收位置参数

#!/usr/bin/expect
set ip [lindex $argv 0]
set user root
set password 123456
set timeout 5
spawn ssh $user@$ip
expect {
        "password:" { send "$password\r" };
}
interact

你可能感兴趣的:(shell)