目录
一.Here Document
1.1.定义
1.2.多行重定向
二.expect实现免交互
2.1.基础免交互改密码
2.2.expect定义
2.3.expect基本命令
2.4.expect实现免交互ssh主机
一.Here Document
1.1.定义
使用I/O重定向的方式将命令列表提供给交互式程序,是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用
1.2.多行重定向
格式:命令<< 开始标记符(通常为EOF)
输入内容
...
结束标记符(与开始标记符一样,前后不得有任何内容,包括空格)
例子: cat <<EOF >ll.txt
>123
>abc
>EOF
补充:命令tee等于多行重定向 : <<EOF
使用方法:tee [选项] 文件名
[选项]: -a 内容追加到给定的文件而非覆盖
举例:tee ll.txt
1 #输入内容1
1 #按回车会打印一次
2 #输入内容2
2 #按回车会打印一次
ctrl +c 结束
cat ll.txt
内容为:1
2
二.expect实现免交互
2.1.基础免交互改密码
(1)echo '1234abcd' |passwd --stdin lgd #将1234abcd通过标准输入传给passwd命令,改lgd用户密码
(2)passwd lgd <<EOF #passwd多行重定向输入密码给李狗蛋
1234abcd
1234abcd
EOF
2.2.expect定义
建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题,使用前需要安装(yum install -y expect)。
2.3.expect基本命令
①脚本解释器:expect 脚本中首先引入文件,表明使用的是哪一种shell。expect的为:/usr/bin/expect
②spawn命令:用于捕捉关键词,后面常跟一个linux执行命令。
③expect命令:用于判断上层捕捉输出的结果是否有指定字符,有则立即返回,没有则默认等待10s。
④exp_continue命令:expect多分支判断时使用。注意:使用exp_continue时,如果跟踪像passwd这样输入密码后就结束进程的命令,expect {}外不要加上expect eof 因为spawn进程结束后悔默认向expect 发送eof,会导致后面的expect eof执行报错。
⑤send命令:expect命令判断完成需要返回时,发送需要交互的指令,想要传递给电脑的文字或字符,该命令不能自动回车换行,\n和\r是回车。
⑥set命令:可用于设置变量、设置expect超时时间,默认是10s。
⑦set设置位置变量:set password [lindex $argv 0] ,设置时从0开始,执行脚本时在脚本后跟参数即可。
⑧结束符:(1) expect eof 结束并返回原来环境,原来主机。
(2) interact 结束但是不会返回原来的地方,保持当前状态,当前主机。
(3)expect eof 与 interact 只能二选一。
2.4.expect实现免交互ssh主机
#!/usr/bin/expect
spawn ssh 192.168.47.3 # ssh 远程登陆,使用spawn执行
expect {
"yes/no" { send "yes\n";exp_continue } # 捕捉yes/no,然后发送yes,\n起到回车的作用
"password" { send "123123\n" } # 继续捕捉password,然后发送magedu,\n起到回车的作用
}
interact # 结束符,结束后不返回原用户,停留在远程用户端上
注意:没有安装expect软件包无法使用expect脚本解释器
yum -y install expect