1.Here Document
定义:
使用I/O重定向的方式将命令列表提供给交互式程序
标准输入的一种替代品
Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用
语法格式:
命令 <<标记
。。。
。。。
标记
注
- 标记可以使用任意的合法字符(通用的字符是EOF)
- 结尾的标记一定要顶格写,前面不能有任何字符(包括空格)
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后空格会被省略掉
- 单引号 变量双引号
示例:
1.使用 wc -l 命令后面直接跟文件名就可以统计文件内有多少行内容,将要统计的内容置于标记“EOF” 之间,直接将内容传给 wc -l 来统计。
#!/bin/bash
wc -l <<EOF
line 1
line 2
EOF
2. expect
定义:是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题
yum install -y expect
格式:
expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
expect中相关命令
-
spawn 启动新的进程(监控,与捕捉)
-
expect 从进程接收字符串
-
send 用于向进程发送字符串
-
exp_continue 匹配多个字符串在执行动作后加此命令
-
interact 与expect eof
#免交互,传输文件 #!/usr/bin/expect spawn scp /etc/fstab 192.168.91.101:/mnt #spawn后面是匹配的命令 expect { "yes/no" { send "yes\n";exp_continue } #查看yes/no时自动输入yes\n,如果下面有命令时要加exp _continue "password" { send "123123\n" } #如果查到passwd 自动输入123123 \n是换行的意思,相当于自己按了回车 } expect eof #结束后要输入这个 #开启服务的方式 给这个免交互文件加权限 chmod +x 文件名 ./文件名 #启动文件
结束位:
expect off
-
表示交互结束,等待执行结束,退回到原用户,与spawn对应
-
比如切换到root用户,expect 脚本默认的等待时间是10s,当执行王命令后,默认停留10s后,自动切回原用户.
-
interact
-
执行完成后保持交互状态, 把控制权交给控制台,会停留在目标终端而不是退回到原终端,这时候就可以手工操作了,interact后命令不再起作用,比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。
-
使用interact会保持在终端而不会退回原终端,比如切换到root用户,会一直在root用户状态下;比如ssh到另一台服务器,会一直在目标服务器终端而不会切回原服务器。
-
需要注意的是,expect eof 与 interact 只能二选一。