免交互:
也就是不需要进入到文件内部,可以在文件外对文件内容进行操作
sed 改 新增
awk 按行取列
here document 免交互
对文本内容进行操作:标准输入的替代品
语法格式:
命令 <<标记
内容
标记
命令:linux命令
注意事项:
1.标记可以使用任意合法字符。(字母和数字,一般不使用特殊符号,以字母为开头。EOF)
2.结尾的标记一定要顶格写,而且在结尾的标记前面不能有任何字符。(空格也不能有)
3.开头的标记可以加空格,但是会被自动省略(开头标记前,一般也没有空格)
免交互方式实现对行数的统计,将要统计的内容置于标记“EOF”之间,直接将内容传给 wc -l 来统计

通过 read 命令接收输入并打印,输入值是两个 EOF 标记之间的部分,作为变量 i 的值

免交互修改用户密码

免交互输出指定内容

免交互直接打印

在写入文件时会先将变量替换成实际值,再结合cat命令完成写入

整体赋值给变量

结果显示

关闭传参(加上引号)

结果显示
![]()
消除tab键打开的空格

结果显示

多行注释,没有任何结果

expect免交互
自动化控制和测试,解决shell脚本中交互的问题
expect建立在tcl语言基础上的工具
得先安装expect(yum -y install expect)
使用expect
得先声明:#!/usr/bin/expect
执行方式:sh bash
必须赋权执行
.sh
./test.sh
/opt/test.sh
常用的转义符:
\n:相当与换行,回车
\t:制表符,相当于tab键
\r:就是回车
\b:退格符
spawn
spawn后面一般都是linux的命令,表示开启会话或者进程跟踪后续的交互信息
例:spawn passwd root
expect
捕获
捕获命令的相关内容,字符串匹配
send
发送指令,模拟用户的输入
方法一:
expect “密码” {send”123456\r”}
写在一行必须要用花括号括起来
方法二:
expect “密码”
send “123456\r”
换行写不需要花括号
方法三:多分支匹配
expect
{
“密码1” {send “123456\r”}
“密码2” {send “123456\r”}
“密码3” {send “123456\r”}
}
结束符:
expect eof
表示交互结束,等待执行结束,退回到原来的用户
expect默认等待时间10s
(退回之前的终端)
Interact
执行完成之后保持状态,把控制权交给控制台,然后停留在目标终端,不会退回原终端
注意点:这两个结束符只能二选一
set
定义变量,设置参数
set 命令可以设置会话超时时间
例:set timeout 5
exp_continue
和expect捕获命令结合一起使用,附加在expect判断项之后,匹配到expect的捕获内容之后,还能够继续判断expect捕获语句当中的其它选项
例如:下例将判断交互输出中是否存在 yes/no 或 *password。如果匹配 yes/no 则输出 yes 并再次执行判断;如果匹配 *password 则输出 abc123 并结束该段 expect 语句。

expect免交互修改密码
vim passwd.sh

结果显示

expect免交互切换用户

嵌入执行,将expect免交互的过程和shell结合起来
ssh su 会涉及到终端切换,不建议使用嵌入式执行
创建用户并设置密码

expect免交互实现ssh登录


946

被折叠的 条评论
为什么被折叠?



