一、免交互:
也就是不需要进入到文件内部,可以在文件外对文件内容进行操作
sed最强大的功能:改、新增
awk最强大的功能:按行取列
1、如何对文本内容进行免交互:
here document 免交互
对文本内容进行操作:
标准输入的替代品
语法格式:
命令(linux命令) <<标记1
内容
标记1(开头是什么结尾就是什么标记)
格式使用注意事项:
- 标记可以使用任意合法字符(字母和数字,一般不使用特殊符号。一般以字母为开头。一般用EOF作为标记)
- 结尾标记一定要顶格写,而且在结尾的标记前面不能有任何字符(空格也不能有)
- 开头的标记可以加空格,但是会被自动省略(开头标记前一般也没有空格)
tee 本身就具有标准输出的作用,可以直接把内容输入到文件中
免交互也能传参:
通过整体赋值给一个变量:
去掉每行之前的tab字符
expect免交互。
自动化控制和测试,解决shell脚本中的相关交互问题
expect是建立在tcl语言基础上的工具
必须要先声明:(whereis expect)
#!/usr/bin/expect
执行方式:必须赋权执行,chmod 777
./test.sh或者绝对路径执行
常用的转义字符:
\n:相当于换行,理解为打了一个回车键
\t:制表符,相当于打了一个tab键
\r:和\n差不多,都是换行,\r就是回车
\b:退格符 backspace
spawn:声明命令
spawn后面一般都是linux命令,表示开启会话或者进程,而且跟踪后续的交互信息。
如:spawn passwd root
expect:捕获spawn命令结果内容和字符串匹配,
send:发送指令,模拟用户的输入
方法一:
expect “密码” {send “123456\r”}
写在一行必须要用花括号括起来
方法二:
expect “密码”
send “123456\r”
换行写不需要花括号
方法三:多分支匹配模式
expect
{
“密码1” {send “123456\r”}
“密码2” {send “123456\r”}
“密码3” {send “123456\r”}
}
send用来模拟用户输入的
结束符:
expect eof:表示交互结束,等待执行结束,会退回原来的用户(expect默认等待时间10s)。退回之前的终端
interact:执行完成之后保持状态,把控制权交给控制台,停留在目标终端,不会退回原终端
注意:以上两个结束符只能二选一
set可以定义变量和设置参数
set timeout 5 设置等待时间5s
set hostname [lindex $argv 0] 相当于hostname=$1
set passwd [lindex $grgv 1] 相当于passwd=$2
exp_continue
和expect捕获命令结合一起使用,附加在expect判断项之后,匹配到expect的捕获内容之后,还能够继续判断expect捕获语句中的其他选项
格式:
expect {
“connecting (yes/no)?” {send “yes\r”;px
}
send_user:回显命令,跟echo一样,打印内容
嵌入执行模式:
将expect免交互和shell脚本相结合
ssh和su等涉及终端切换,不建议使用嵌入式执行
1、嵌套执行必须要声明:
#!/bin/bash
2、不需要交互的命令可以放在expect外面执行
3、密码环节我们开始执行免交互
4、开启执行的标志,仅限于嵌入式
/usr/bin/expect <<-EOF
工作中的免交互:
ssh自动登录:
传参的方式执行:(自定义用户密码)
练习:
使用免交互的方式实现硬盘分区 格式化 挂载(连挂载目录一并创建好)
免交互总结:
here document 主要是用在文本文件,免交互给文本文件输入内容
格式:
linux命令 <<EOF(可自定义标识)
输入的内容
EOF(以什么开头以什么结尾)
可以用
1、
cat <<EOF> test.txt
内容
EOF
2、
tee test.txt <<EOF
内容
EOF
expect:
开头要声明解释器:#!/usr/bin/expect
set 传参 设置参数
set timeout 5 超时时间5s
set hostname [lindex $argv 0] 相当于位置变量$1
spawn passwd test
#开启命令或者进程
expect
#捕获命令关键字
一律用引号引起来
“密码” send “123456\r(或者\n)”
结束符:
expect eof 返回上一次执行的终端
interact 停留在当前终端,interact后面的命令不会执行
嵌入式:expect和shell结合
主要作用:为了解决shell脚本中的交互问题
涉及终端切换,一般不使用嵌入式执行
shell当中执行不需要交互的命令,需要交互的执行交给expect
在shell脚本中开启免交互:
#!/bin/bash
/usr/bin/expect <<-EOF
注意:结束符写在EOF之前
interact
EOF