[内容] Shell spawn 参数的用法 (脚本根据出现的输出自动执行命令)

注意:

在使用 spawn 参数之前,要先安装 expect

内容:

内容一:set 参数

1.1 set 参数的作用

设置 expect 参数等待执行的时间 (默认是 30 秒) 或者其它变量

1.2 set 参数的案例

#!/bin/bash

set timeout 30

或者:

#!/usr/bin/expect

set timeout 30

(补充:这里以设置 expect 参数的等待时间为 30 秒为例)

内容二:spawn 参数

2.1 spawn 参数的作用

脚本开始根据出现的输出自动执行命令

2.2 spawn 参数的使用案例

#!/bin/bash

expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">"         {send "\r"}
EOF

或者:

#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof

(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)

内容三:expect 参数

3.1 expect 参数的作用

后面接预期出现的内容。可以跟 send 参数配合,实现出现预期内容后执行什么命令,也可以不跟 send 参数配合只是出现什么内容后直接退出

3.2 expect 参数的使用案例

3.2.1 expect 参数和 send 参数配合的使用案例 (出现预期内容后自动执行命令)
#!/bin/bash

expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">"         {send "\r"}
EOF

或者:

#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof

(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的文本是 “password:” 时自动输入 “123” 并回车为例)

3.2.2 expect 参数不和 send 参数配合的使用案例 (出现什么内容后直接退出)
#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {
    \"Linux*\" { exit 200 }
    timeout { exit 100 }
    incorrect { exit 100 }
    eof { exit 100 }
}

return $?
interact

expect eof


补充:
1) 这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器
2) 同时当输出的最后的文本是以 “Linux” 开头时,返回值是 200,超市或其他的返回值是 100
3) 并最后将控制权还给用户为例

内容四:send 参数

4.1 send 参数的作用

后面接要执行的命令。当预期出现的内容出现后,执行这些命令

4.2 send 参数的使用案例

#!/bin/bash

expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">"         {send "\r"}
EOF

或者:

#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof

(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)

内容五:eof\EOF 参数

5.1 eof\EOF 参数的作用

代表结束所有,如果没有 EOF 的话最后的命令可能不会执行完

5.2 eof\EOF 参数的使用案例

#!/bin/bash

expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">"         {send "\r"}
EOF

或者:

#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof

(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)

内容六:interact 参数

6.1 interact 参数的作用

代表结束自动交互,就是把控制权交给用户

6.2 interact 参数的使用案例

#!/bin/bash

expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">"         {send "\r"}
EOF

或者:

#!/usr/bin/expect

spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof

(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)