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

课时27:内容格式化_输入格式化_EOF原理_bash

脚本执行后的效果
[root@localhost ~]# /bin/bash qingjiatiao.sh
                        请假条
王老师:
    我因患急性空腹病,现在需要到火锅理疗,不能到学校上课,
请准假一天。恳请批准!
                                             请假人:李四
                                                 6月1日

小结