免交互
指不需要人为控制就可以完成的自动化操作。
shell脚本和免交互是一个概念,但是有两种写法。shell脚本基于bash。
here Document 免交互
它是一种标准输入,只能接收正确的命令,它主要是使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令。
命令格式
wc -l <<ky30 标记
123
234
345
ky30 标记
注:标记要一致
注意事项;
1、标记可以使用任意合法字符(通常用EOF)。
2、结尾的标记一定要顶格写,前面不能有任何字符。
3、结尾的标记后面也不能有任何字符,包括空格。。
4、如果开头的标记有空格,会自动省略
免交互进行重定向
cat <<EOF>>234.txt
Expect
它是基于tcl语言基础上的一种工具,可以自动化测试和控制,可以在脚本中解决交互的问题。
基本命令格式
#!/usr/bin/expect 使用时先声明
第一种
expect "密码"{send"123\r"}
第二种
expect "密码"
send"123\r"
第三种:多分支结构,只要匹配其中一个,就会执行相应的send语句,之后自动退出
expect {
""密码1" {send "123\r"}
""密码2" {send "123\r"}
}
转义符
\n:换行
\t:制表符(tab)
\r:回车
\b:删除
执行方式
1、必须赋权执行(chmod 777)
2、使用./进行执行
相关语法
spawn:后面通常会跟一个执行命令。表示开启一个命令,并跟踪后续的交互信息。(passwd lisi)
expect:捕获,捕获上一次执行的命令中是否包含指定的字符串,有就立即返回,否则等待超时时间,自动退出。只能捕获由spawn启动的进程。
send:向进程发送字符串,用于模拟用户输入。该命令不能自动回车,一般后面要加\r或\n。
结束符
会切换回之前的终端 expect eof
留在当前终端不变 interact
设置超时时间 set
5秒后自动退出 set timeout 5
永不超时 set timeout -1
exp_continue
可以在expect判断之后继续匹配捕获的其他内容,允许继续向下执行命令。结束语不能使用expect eof。
expect {
"(yes/no)"{send"yes\r",exp_continue}
"passwd"{send"123\r"}
}
send_user 回显信息
相当于echo "信息"
接收参数:相当于shell的位置变量
set hostname [lindex $argv 0] $1
set password [lindex $argv 1] $2
/usr/bin/expect <<-EOF
...(内容)
expect eof
EOF
ssh远程登录
如果涉及终端切换,不要用嵌入模式
set ip 要登陆的IP地址
set user root 指定用户
set password 123
set timeout 5
spawn ssh $user@$ip
expect {
"(yes/no)" {send "yex\r"}
"password" {send "$password\r"}
}
expect eof
例子
用免交互的方式给硬盘分区,格式化,挂载