免交互:不需要人为控制就可以完成的自动化操作。
云计算中的免交互主要为自动化运维。
shell脚本和免交互是一个概念,但是两种写法。
Here Document :使用i/o重定向的方式,将命令的列表提供给交互式的程序或者命令。(是一种标准输入,只能接受正确的指令或者命令)
语法格式:
命令 << 标记 (可以自定义标记,不过通常用EOF)
注意事项:
1,标记可以使用任意合法字符,通常用EOF作为标记。
2,结尾的标记一定要顶格写,而且前面不能有任何字符。
3,结尾的标记后面也不能有任何字符,包括空格。
4,如果开头的标记前有空格,这个空格会被自动省略。
cat结合免交互重定向输出到指定文件
cat <<EOF>> test.txt
Expect免交互:
tcl语言基础之上的一种工具,自动化测试和控制,在脚本中解决交互问题。
转义符:
\n:换行
\t:制表符,TAB
\r:回车
\b:删除键
基本命令格式:
#!/use/bin/expect
执行方式:
1,必须赋权执行 chmod777
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秒
set timeout 5
例题:免交胡实现修改密码
vim passwd.sh
#!/usr/bin/expect
set timeout 5
spawn passwd lisi
expect “新的密码”
send “abc123\r”
expect “重新输入新的密码”
send “abc123\r”
expect eof
chmod 777 passwd.sh
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
set user [lindex $argv 0]
set passwd [lindex $argv 1]
spawn su - $user
expect "密码"
send "$passwd\r"
expect "$"
send_user "普通用户"
expect "#"
send _user "管理员"
小作业,看能不能实现判断a
shell嵌入式执行系统密码
嵌入执行模式有一个问题:如果涉及到终端切换,最好就不要用嵌入模式了
设定一个脚本实行自动远程连接:
参的方式实现自动远程登录(如果连接被绝或者主机不存在):
作业:
用免交互的方式给硬盘分区,格式化,挂载