如何用expect写一个自动登录脚本?
1.安装expect
需要先安装tcl:apt-get install tcl
apt-get install expect
2.expect
使用2.1一个简单的输入密码操作
#!/usr/bin/expect
set timeout 100
set password "123456"
spawn sudo rm -rf zzlogic
expect "root123456"
send "$password\n"
interact
说明:
第一行#!/usr/bin/expect表示使用expect的shell交互模式
set是对变量password赋值
set timeout 100:设置超时时间为100秒,如果要执行的shell命令很长可以设置超时时间长一些。expect超过超时时间没有监测到要找的字符串,则不执行,默认timeout为10秒
spawn在expect下执行shell脚本
expect对通过spawn执行的shell脚本的返回进行判断,是否包含“”中的字段
send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
interact:退出expect返回终端,可以继续输入,否则将一直在expect不能退出到终端
2.2expect的命令行参数
[lindex $argv n]获得index为n的参数(index从0开始计算)
$argc为命令行参数的个数
[lrange $argv 0 0]表示第一个参数
[lrange $argv 0 3]表示第1到第3个参数
例如
scp_service.sh
文件,可以./scp_service.sh
-rm来执行,这时是赋值了一个参数set option [lindex $argv 0](获得第一个参数存到变量option中,参数是的index是从0开始计算的)
2.3if...elif...else...
expect支持if语句,
if {条件1} {
条件1执行语句
} elif {条件2} {
条件2执行语句
} else {
其他情况执行语句
}
说明:
1.if
的条件用{}来包含条件2.if
和后面的{}必须有空格隔开3.两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace
3.使用{来衔接下一行,所以if的条件后需要加左花括号{
4.else
不能单独放一行,所以else要跟在}后面Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有