shell中的免交互编程
一、Here Document 免交互Here Document 是一个文件文字,是源代码文件的一部分。主要用于保留换行符和文本中其他空格的多行字符串文字形式。1.1Here Document 概述格式:命令 << 标记 (自定义)内容标记(表示结束)例:把内容保存到文件中1.2 Here Document 常用方法先发起,交代动作命令,然后免交互输入的值read命令接收输入并打印1.
目录
一、Here Document 免交互
Here Document 是一个文件文字,是源代码文件的一部分。主要用于保留换行符和文本中其他空格的多行字符串文字形式。
1.1Here Document 概述
格式:
命令 << 标记 (自定义)
内容
标记(表示结束)
例:
把内容保存到文件中
1.2 Here Document 常用方法
先发起,交代动作命令,然后免交互输入的值
read命令接收输入并打印
1.2.1 变量设定
在写入文件时会先将变量替换成实际值,在去用cat命令写入
关闭变量的替换
1.2.2 注释内容
bash中的默认注释是# 只能注释一行的内容,而在Here Document中“:”可以去注释中间所有的内容。
格式:
:<< EOF
内容
EOF
例:
输出的结果只会是最后echo的shanghai,here document中内容不会被显示出
二、Expect
2.1概述
建立在基础语言工具之上的工具
用于进行自动化控制和测试
解决shell脚本中交互的相关问题
2.2 基本命令
①spawn
spawn 后通常跟一个Linux的命令,用来开启一个会话或者启动个进程
②expect
判断上次输出的结果是否包含指定的字符串,如果有立即返回,否则就等待超时后返回
③send
向进程发送字符串,用于模拟用户的输入命令一般后面要加上\r来表示回车
④结束符:
expect eof
表示交互结束,等待执行结束,退回到原用户,与spawn对应。
interact
执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,这个时
候就可以手工操作了,interact后的命令不起作用,比如interact后添加exit,并不会退出root用户。
而如果没有interact则登录完成后会退出,而不是留在远程终端上。
⑤set
通过set命令可以设置会话的超时时间,若不限制超时时间则应设置为-1
set timeout 30
⑥exp_continue
exp_ continue附加于某个expect 判断项之后,可以使该项被匹配后,还能继续匹配该expect 判断
语句内的其他项。exp_ continue类似于控制语句中的continue 语句。表示允许expect 继续向下执
行指令。
比如:
expect {
" (yes/no)" {send "yes\r"; exp_ continue;}
"*password" {set timeout 300; send "abc123\r";}
}
如果匹配到yes/no则输出yes,如果匹配到password 则输出abc123并结束语句
⑦send_user
表示回显命令,相当于echo
2.3 Expect语法
2.3.1 单分支语法
expect “password:” {send “123456\r”}
2.3.2多分支语法
expect{
“www” {send “WWW\r”}
"qq"{send "QQ\r"}
}
只要匹配到其中的任何一个就会去执行后面send语句
2.4 用Expect去编写脚本
2.4.1 脚本编写
①无交互登录到远程服务器
②在对方机器上操作
expect eof意味着结束expect
2.4.2 定义引用变量
示例:创建用户并设置密码(在shell中调用expect)
总结
1.here document的概述和用法
2.epext 语法
exp_continue 表示循环匹配,匹配时关键字符时会去循环匹配如果不加则会直接退出
expect eof 匹配的结尾
在编辑expect时要以/usr/bin/expect 开头
更多推荐
所有评论(0)