EOF用法及案例
在平时的运维工作中,我们经常会碰到这样一个场景: 执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了! 这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
基本用法
下面就对EOF的用法进行梳理:
EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF. EOF一般会配合cat能够多行文本输出. 其用法如下:
注:第一个终止符可以有缩进,第2个终止符不得有缩进
通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号:
< :输入重定向
> :输出重定向
>> :输出重定向,进行追加,不会覆盖之前内容
<< :标准输入来自命令行的一对分隔号的中间内容
1 向文件写入内容(覆盖/追加)
将一个文件的内容覆盖输出到另一个文件中:cat fileA > fileB
将一个文件的内容追加输出到另一个文件中:cat fileA >> fileB
那么,cat > fileA << EOF会发生什么呢
覆盖写入
追加写入
2 命令显示
先举一个简单的例子:
思考: 我们可以从cat命令的说明中知道,cat的操作对象是文件,但是例1中cat的操作对象不是文件,而是用户输入。
那么我们可以这样理解例子:先在文件file中输入“Hello”,再用cat file输出其中的内容。 也就是说我们可以用一个文件来替代"<< EOF EOF"。 反过来说,如果操作命令中的文件是输入对象,也可以用"<< EOF EOF"来替代的。
为什么cat、touch命令可以和EOF配合使用,而echo、print不行呢?
3 命令交互输入
假设有如下的磁盘分区脚本:
根据之前的思考,将"<< EOF"和"EOF"之间的内容保存到文件part中,然后将脚本修改为: sfdisk -uM /dev/sda < part 经测试,修改后的方式可以达到同样的分区结果。
综上所述,“<< EOF EOF”的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。
4 案例一
分享一个自动新建分区并挂载的脚本:
最后更新于