免交互:不需要人为控制就可以完成的自动操作
自动化运维
shell脚本和免交互是一个概念,但是是两种写法
bash
here Document 免交互
使用IO重定向的方式将命令的列表提供给交互式的命令
例如:cat ,read
是一种标准的输入,只能接受正确的
注意事项:
1、标记可以使用任意合法字符(通常使用EOF作为标记)
2、结尾的标记一定要定格写,前面不能有任何字符
3、结尾的标记后面也不能有任何字符,包括空格
4、如果开头的标记前有空格,这个空格会被自动省略
多行注释 :<<EOF
内容
内容
EOF
面试和工作要用
Expect (tcl语音基础之上的一种工具,自动化测试和控制,在脚本中解决交互问题)
转义符:
\n:换行
\t:制表符,TAB键
\r:回车
\b:删除键
基本命令格式:
#!/usr/bin/expect
执行方式:
1.必须赋权执行(chmod 777)
2.不能用bash,sh也不能用,只能用./来执行
语法:
spawn 后面通常跟一个Linux的执行命令。表示开启一个会话,启动一个进程,并且跟踪后续的交互信息
spawn passwd list
expect :捕获,捕获上一次执行的命令中,是否包含指定的字符串,如果有立即返回,否则等待超时时间,自动退出,默认超时十秒
expect只能捕获由spawn启动的进程输出
send向进程发送字符串,用于模拟用户的输入,该命令不能回车,一般要在后面加一个回车键:\r或者\n
第一种写法:
expect "密码" {send “abc123\r”}
第二种写法:
expect “密码”
send “abc123\r”
第三种:多分支结构
expect 只要满足一个,就能输出
{
“密码1” {send “abc\r”}
“密码2”{send“abc\r”}
“密码3”(send“abc\r”)
}
只要匹配了其中一个情况,执行相应的send语句,然后退出expect语句
结束符:
expect eof 和interacr
1.会切换之前的终端
2.留在当前终端不变
set设置超时等待时间,默认是10秒,不限制超时时间-1
set timeout 5(设置格式)
exp_continue,可以在expect判断之后,继续匹配expect捕获的其他内容,类似于脚本中的continue,表示允许继续向下执行指令 exp_continue 结束语句不能直接expect eof,否则会报错
expect{
“(yes/no)” {send “yes\r”;exp_continue}
“password” {send “123\r”}
}
send_user 回显信息,相当于echo跟上用户想要输出的内如
send_user ok
接受参数:类似鱼shell当中的位置变量 $1 $2
set hosthome [lindex $argv0] $1
set password [lindex $argv1] $2
ssh远程登录
工作中会用一个免交互的脚本,来实现自动登录