很多情况下,为了开发方便,会写一些小工具辅助。下面简单分享下linux 下执行shell脚本时遇到交互式场景时的解决办法。
场景:linux 下ssh 登入远程服务器,需要手动输入password。
expect 命令
Expect 是由 Don Libes 基于 Tcl 语言开发的,并被广泛应用于交互式操作和自动化测试的场景之中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度得提高系统管理人员的工作效率。
Send,expect 和 spwan 是 Expect 语言最基本的命令。其中,send 命令会发送字符串给指定进程(process); expect 命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作;而 spwan 命令可以发起一个进程的运行。
简单demo示例:
1、touch test.expect
2、vi text.expect
3、脚本代码
#!/usr/bin/expect
# 设置超时时间60s
set timeout 60
spawn ssh lilei -p 2222expect {
"*yes/no*" { send "yes\n"; exp_continue; }"*password:*" {
send "Welcome@2\r"; exp_continue; } } #这里使用了 interact 命令,使执行完程序后,用户可以在 $host 终端进行交互操作。 interact4、终端执行命令:expect test.expect
PS:linux 下 还有一种EOF语法,但不适用于这里。