shell-expect

expect 用来实现自动和交互式任务进行通信,而无需人的干预
依赖tcl,离线安装expect前需要提前安装tcl

cat test_expect.sh 
#!/usr/bin/expect -f
#
set hostip "192.168.0.106"
set username "root"
set passwd "root1234"

spawn ssh $username@$hostip
expect {
"(yes/no)?" {send "yes\r";exp_continue}
}
expect "*assword:"

send "$passwd\r"

expect "~]$"
send "path=`pwd`\r"
expect "$"
send "echo \$path\r"
expect "$"
说明:
    1. 首行指定用来执行该脚本的命令程序
    1. 定义参数:
      a. set hostip "192.168.0.106" 定义常量
      b. 执行脚本时传递参数类似shell,如执行脚本时传入一个ip参数即为:set hostip [lindex $argv 0]
    1. spawn ssh hostip,spawn用来启动脚本和命令的会话,它用于启动一个进程,之后所有expect操作都在这个进程中进行。
    1. expect "*assword:",expect命令用于等候一个匹配输出,一旦匹配就执行后面的动作。
    1. send "path=pwd\r", send是expect中的动作命令,向进程发送输入内容,模拟用户输入。
    1. exp_continue:需处于expect的动作中,表示expect的匹配从头开始继续匹配。
    1. exit,close,wait:exit表示退出脚本,close表示立即关闭过程,而wait则是等待过程返回eof时关闭。
    1. interact:运行表示将控制权交给用户,与spawn生成的进程进行交互。由用户与spawn生成的进程进行交互,比如登录ftp服务器并下载的过程中,登录ftp服务器的过程可以由用户输入自己的用户名和密码,然后用户再输入q字符将控制权交给脚本,由脚本完成后面的交互动作。
    1. set timeout 30,设置超时时间,单位秒,不设置默认10秒,到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行
输出结果
shell-expect_第1张图片
输出结果

你可能感兴趣的:(shell-expect)