免交互:不需要人为控制就可以完成的自动化操作
自动化运维
shell脚本和免交互是一个概念,但是两种写法
shell:bash
here document :免交互 使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令 cat read 是一种标准输入,只能接受正确的指令或者命令
注意事项: 1、标记可以使用任意合法字符(通常用EOF)
2、结尾标记一定要顶格写,前面不能有任何字符
3、结尾的标记后面也不能有任何字符,包括空格
4、如果开头标记前有空格,这个空格会被自动省略
抑制tab空格
多行注释
Expect t'c'l语言基础之上的一种工具,自动化测试和控制,在脚本中解决交互的问题
转义符: \n:换行 \t:制表符,TAB \r:回车 \b:删除键
基本命令格式: #!/usr/bin/expect
执行方式: 1、必须赋权执行 chmod 777 2、bash sh不能用 只能用 ./
语法: spawn 后面通常跟一个linux的执行命令,表示开启一个进程,并且跟踪后续的交互信息 spawn passwd lisi expect:捕获,捕获上依次执行的命令中,是否包含指定的字符串,如果有立即返回,否则等待超时时间,自动退出;默认时间10秒 expect只能捕获由spawn启动的命令或者进程输出
send向进程发送字符串,用于模拟用户的输入,该命令不能自动回车,一般在后面加上一个回车键:\r或者\n
第一种写法: expect "密码" {send"abc123\r"} 第二种写法 expect"密码" send" abc123\r" 第三种写法 expect { "密码1"{send"abc123\r"} "密码2"{send"abc123\r"} "密码3"{send"abc123\r"}
} 只要匹配其中一个情况,执行相应的send语句,然后退出expect语句
结束符: expect eof 会切换回之前的终端 interact 留在当前终端不变 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 hostname [lindex $argv 0] $1
set password [lindex $argv 1] $2
嵌入执行模式
如果涉及到终端切换,最好不要用嵌入模式
ssh远程登陆