目录
前言
免交互就是实现一个功能时,不需要连续从键盘输入信息,通过脚本或命令自动完成一些动作。
一、Here Document 免交互
1.1 概述
- 使用 I/O 重定向的方式将命令列表提供给 交互式程序或命令,比如 ftp、cat 、fdisk 或 read 命令。
- 是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是 直接就地生产出一个"文件"并用作"命令"的标准输入。
- Here Document 也可以与非交互式程序和命令一起使用,如 cat、ls。
语法格式:
首尾标记内容一样
命令 <<标记 标记格式有: 'EOF'、 -EOF(脚本中忽略内容的退格符)
...
内容 #标记之间是传入内容
...
标记
注意事项:
- 标记可以使用任意合法字符(通常为EOF)
- 结尾的标记一定要顶格写,前面不能有任何字符
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后的空格会被省略掉
- 内容中默认支持读取变量的值,如 $var,如果标记加单引号
'EOF'
,就不支持变量 - 可以语句块放在 var1=$() 中,执行结果给变量var1
-EOF
是去掉每行之前的TAB字符
1.2 测试
非交互式命令:
把 内容 交给 wc -l ,统计行号
将内容写到一个文件中:
#tee 命令是将内容写到文件中
tee test1.txt <<EOF
con1
con2
EOF
或用
cat > test2.txt <<EOF
con1
con2
EOF
#cat <<EOF > test2.txt 这样写也行
交互式命令:
比如非交互读入 read
read i <<EOF
hello world
EOF
echo $i #hell world
read i <<EOF
hello
world
EOF
echo $i #结果输出:hello, 因为 read 识别换行符,所以只会读取第一行的值
使用非交互设置密码 passwd
useradd testuser1
passwd testuser1 <<EOF
123456
123456
EOF
支持变量替换
默认支持变量替换,如果标记加单引号 'EOF'
,就不支持变量。
如果想忽略内容中的退格符 /t
,在 EOF前加一个横杠 - 就行,-EOF
。
file="EOF.txt"
i=