一、Here Document免交互
(以标签的形式实现免交互,标签里面的字符可以自行定义)
(一)、Here Document概述
- 使用I/O重定向方式将命令列表提供给交互式程序
- 标准输入的一种替代品
- 语法格式
命令 <<标记(EOF)
… (标记之间是传入的内容)
…
标记(EOF)
(二)、Here Document使用注意事项
- 标记可以使用任意合法字符(大写字母)(EOF、FOE,前后要一致)
- 结尾的标记一定要顶格写,前面不能有任何字符
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后的空格会被省略掉
(三)、Here Document免交互示例
1、通过read命令接收输入并打印
[root@localhost ~]# read i <<EOF
> hello world
> my name is gcc
> EOF
[root@localhost ~]# echo $i
hello world
#######直接赋值,只能赋值一行
[root@localhost ~]# vim a.sh
#!/bin/bash
read i <<EOF
hello world
my name is gcc
EOF
echo $i
[root@localhost ~]# sh a.sh
hello world
2、通过passwd给用户设置密码
[root@localhost opt]# vim a.sh
#!/bin/bash
passwd lisi <<EOF
abc123 #这两行是输入的密码和确认的密码
abc123
EOF
[root@localhost opt]# sh a.sh
更改用户 lisi 的密码 。
新的 密码:无效的密码: 密码少于 7 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
(四)、Here Document变量设定
1、变量替换
在写入文件时会先将变量替换成实际值,再结合 cat 命令完成写入
[root@gcc zhengze1]#vim test.txt
my name is gcc
--------------------------------------------------
[root@gcc zhengze1]#vim test.sh
#!/bin/bash
filename="test.txt"
name="123"
cat > $filename <<EOF
the number is $name
EOF
---------------------------------------------------
[root@gcc zhengze1]#sh test.sh
[root@gcc zhengze1]#cat test.txt
the number is 123
2、变量设定
整体赋值给变量,然后通过 echo 命令将变量打印出来
[root@client opt]# num1=111
[root@client opt]# echo $num1
111
[root@client opt]# num2=$(cat <<EOF
> 222
> $num1
> EOF
> )
[root@client opt]# echo $num2
222 111
(五)、Here Document格式控制
1、关闭变量替换功能,按照字符原本的样子输出,不做任何修改或替换
单引号关闭变量替换,就把EOF中的变量当做字符串
[root@localhost opt]# num1=111
[root@localhost opt]#

本文介绍了Here Document和Expect两种实现免交互的方法。Here Document以标签形式免交互,可用于变量设定、格式控制和多行注释等,使用时需注意标记规范。Expect建立在tcl语言基础上,用于自动化控制和测试,文中介绍了其安装和基本命令,以及直接执行和嵌入执行的方式。
最低0.47元/天 解锁文章
6419





