3.2.1 EOF原理
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
场景需求
在运维岗位中,有非常多的场景需要我们在脚本中编写应用软件的配置文件。在这些应用软件的配置文件中,经常携带大量的格式,尤其是携带空格的层级格式,如果我们一个一个的编写好标准的配置文件,但是一旦涉及到场景信息的动态化调整,固定好的配置文件就不太适合了,所以我们需要一种方法能够实现整个动态的格式化需求。
解决方法
在shell编程中,"EOF”通常与"<<”结合使用,"<<EOF”表示后续的输入作为子命令或子shell的输入,直到遇到"EOF”,再次返回到主调用shell,可将其理解为分界符(delimiter)。
所谓的 EOF,就是End of file的缩写,它是一种自定义的文件内容终止符。
既然是分界符,那么形式自然不是固定的,这里可以将”EOF"可以进行自定义,但是前后的”EOF"必须成对出现且不能和shell命令冲突。其使用形式如下:
语法格式
交互式程序 << EOF
command1
command2
...
EOF
注意:
最后的"EOF"必须单独占一行,而且必须顶格写,如果不想受到如此限制的话,使用<<-符号
<<- 的作用是自动去除最后一个EOF前面的制表符\t【注意,对于空格无效】
前后两个EOF可以是任意一个字符,比如aaa,只要前后两个边界内容一致即可。
"EOF"中间的内容将以标准输入的形式输入到”交互式程序",当shell看到”<<"知道其后面输入的分界符,当shell再次看到分界符时,两个分界符中间的部分将作为标准输入。
简单实践
实践1 - EOF信息格式化输出
终端方式接收多行信息,然后交个一个命令
[root@localhost ~]# cat << EOF
> Dear Wang:
> jian dao ni hen gaoxing.
> danshi wo bu xihuan ni.
> zaijian.
> zhaoliu
> 2100-11-11
> EOF
Dear Wang:
jian dao ni hen gaoxing.
danshi wo bu xihuan ni.
zaijian.
zhaoliu
2100-11-11
实践2 - 脚本中实践EOF
编写请假条
[root@localhost ~]# cat qingjiatiao.sh
#!/bin/bash
# EOF演示请假条示例
cat << EOF
请假条
王老师:
我因患急性空腹病,现在需要到火锅理疗,不能到学校上课,
请准假一天。恳请批准!
请假人:李四
6月1日
EOF
执行脚本示例
[root@localhost ~]# /bin/bash qingjiatiao.sh
请假条
王老师:
我因患急性空腹病,现在需要到火锅理疗,不能到学校上课,
请准假一天。恳请批准!
请假人:李四
6月1日
实践3 - 末尾EOF前面有制表符
修改脚本
[root@localhost ~]# cat qingjiatiao.sh
...
# EOF前面有一个制表符,也就是 Tab键效果
EOF
执行脚本后效果
[root@localhost ~]# /bin/bash qingjiatiao.sh
qingjiatiao.sh:行11: 警告:立即文档在第 4 行被文件结束符分隔 (需要 `EOF')
...
修改脚本效果
[root@localhost ~]# cat qingjiatiao.sh
#!/bin/bash
# EOF演示请假条示例,将<< 替换为 <<-
cat <<- EOF
请假条
王老师:
我因患急性空腹病,现在需要到火锅理疗,不能到学校上课,
请准假一天。恳请批准!
请假人:李四
6月1日
EOF
脚本执行后的效果
[root@localhost ~]# /bin/bash qingjiatiao.sh
请假条
王老师:
我因患急性空腹病,现在需要到火锅理疗,不能到学校上课,
请准假一天。恳请批准!
请假人:李四
6月1日
小结