免交互:
交互:计算机播放器,放视频,发出指令,计算机执行指令,做出对应的动作,播放视频。
linux系统中的交互,passwd
尤其在shell脚本中,我们的运行就是免交互,自动化运维。
两种here Document免交互
expect语法实现免交互
here Doucument
语法格式:
命令 << 标记
内容
以标记为结尾
1、标记名称可以自定义,但必须要是合法字符(字母开头,后面跟上数字,不要有特殊符号)
2、标记的结尾一定要顶格写,前面不能有任何字符,包括空格。
3、结尾的标记后面也不能有任何字符,包括空格。
4、开头标记前面如果有空格,会被省略。
expect:建立在tcl语言基础上的一个工具,用于自动化控制和测试,主要用来解决shell当中的交互问题。
转义字符:
1、\n表示换行符
2、\t表示制表符tab键
3、\r表示回车,可以和\n通用
4、\b表示退格符,相当于backspace
第一步:
#!/usr/bin/expect
第二步:
开启跟踪执行的命令:
spawn开启一个绘画和启动进程,并且跟踪后续的交互信息
spawn passwd dn
第三步:
捕获动作
expect捕获想要的内容,匹配输入字段,然后输入内容
第四步:
方式一:
发送指令
send向进程发送字符串,模拟用户输入的内容,send命令不能自动换行,一般后面要跟上\r或\n
expect“新的密码:"{send "abc123\r"}
写在一行必须要加花括号
方式二:
expect“密码”
send"abc123"
多分支:
expect
{
“密码1:”{send "abc123\r"}
“’密码2:”{send "abc123\r"}
}
第五步:定义结束符号
expect eof
交互结束之后,会退回到原用户。
su - dn
root
interact
执行结束之后,保持现有状态不变
结束符号只能二选一,不能同时存在
参数设置:
set设置命令
set timeout 5
设置脚本的超时时间5秒
默认是10秒
exp_continue
相当于在expect捕获判断之后,还能继续向下匹配。
类似于continue,表示允许expect继续向下执行指令。
expect { "(yes/no)" {send "yes\n";exp_continue}
"password" {send "abc123\n"} } expect eof
否则报错
打印功能:回显命令
send_user跟echoy一个作用,打印一个字符串。
接收参数:
可以接受从bash的命令传入的参数。类似于位置变量的格式
set hostname [ lindex $argv 0]
set passwd [ lindex $argv 1]
hostname=$1
passwd=$2
执行方式:
bash sh source都不能执行expect脚本,必须赋权之后用./或者绝对路径执行
嵌入执行模式:将expect的过程融入shell当中,一块执行
#!/usr/bin/expect
免交互:
/usr/bin/expect <<-EOF
EOF