Here Document 免交互
- 使用I/O重定向的方式将命令列表提供给交互式程序或命令
- 是标准输入的一种替代品
- 可以与非交互式程序和命令一起使用。
语法格式
命令 <<标记
...
内容
...
标记
Here Document使用中的一些注意事项:
- 标记可以使用任意合法字符(通常为EOF)
- 结尾的标记一定要顶格写,前面不能有任何字符
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后的空格会被省略掉
交互式命令 EOF
(1)免交互执行命令
交互式命令 <<EOF
指定传入内容
....
EOF
(2)免交互创建并编辑文件内容
cat > 文件 <<EOF
指定文件内容
....
EOF
注意:
默认情况下EOF中间的内容支持变量的替换;如果要关闭变量的替换,开头标记要用 '' 括起来,即 <<'EOF'
如果要抑制行首的制表符空白,开头标记前要加 - ,即 <<-EOF
如果要注释多行内容,可用 : <<EOF
expect 免交互
建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题。
使用 expect 需要安装 expect
yum install -y expect
编写expect免交互脚本步骤:
(1)先声明解释器
#!/usr/bin/expect
(2)接收位置参数传入
set 变量名 [lindex $argv 0]
0代表执行脚本时后面跟的第一个位置参数,第二个位置参数用 1 表示,依此类推
(3)使用 spawn 指定交互命令 开启会话跟踪
spawn fdisk /dev/sdb
(4)使用 expect 捕获匹配交互命名的提示信息
expect "命令(输入 m 获取帮助):"
(5)再使用 send 发送需要交互输入的字符串,结尾需要加上回车符
send "n\r"
....
(6)使用一个expect匹配多次
如果能匹配到情况1的提示信息则发送字符串1给交互进程,接着再用情况2匹配提示信息并发送字符串2给交互进程
如果匹配不到情况1的提示信息则继续再用情况2匹配提示信息发送并字符串2给交互进程
expect {
"情况1" {send "字符串1\r"; exp_continue;}
"情况2" {send "字符串2\r"}
}
(7)所有交互操作完成后,使用 expect eof 或 interact 结束交互会话
- expect eof(会返回原用户或者原终端界面)
- interact(会停留在切换的用户或者远程终端界面)
expect eof