小型自动化运维--expect脚本之传递函数
[[email protected] ~]# vim 3.expect
#!/usr/bin/expect
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "wtf"
set cm [lindex $argv 2]
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"
expect eof
对文件3.expect授予执行权限
# chmod +x 3.expect
执行3.expect
# ./3.expect root 192.168.8.103 “cd /tmp;ls”,截图如下:
# ./3.expect root 192.168.8.103 “w”,截图如下:
注:
(1)shell 中的变量是 $0 $1,而 expect 里面的变量是 $argv 0,$argv 1。expect 脚本中的参数比 shell 中的复杂一些,而且是从数字 0 开始,[lindex #argv 0] 表示第一个参数,[lindex $argv 1] 表示第二个参数。
(2)结束符有 expect eof 和 interact,二者取一即可。
扩展:
可以设置把 passwd 作为一个参数,这样就不存在被别人窃取密码的情况。
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd [lindex $argv 3]
set cm [lindex $argv 2]
# ./3.expect root 192.168.8.103 “cd /tmp;ls” wtf,截图如下: