cat和EOF的组合妙用

有时候,我们可能会使用脚本去生成一个临时文件,然后把该文件作为最终文件放入目录中。这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判断生成不同的最终文件等等。

1. cat和EOF简介

cat:该文本输出命令用于显示文本的全部内容,并全部打印输出

EOF:文本结束符,即“end of file”,表示文件内容的结束

在shell脚本中将cat与EOF组合使用可避免使用多行echo 'xxx'打印命令方式,并实现多行文本输出的结果常见的使用方式有以下几种:

  • cat >FileName <新建文件并多行导入文件内容,结尾以EOF输入字符为标准输入结束;“<”是重定向,会将你输入的内容输入到目标文本中。
  • cat <FileName,文件追加,实现多行文本的输出,cat的多行内容有$等特殊字符时,须利用转义字符\,其结尾以EOF作为输入结束,可以对已有文件内容进行编辑修改;
  • cat >FileName :可以对 file 文件内容进行编辑,一旦 file 文件存在,则 file 原来的数据被新输入数据覆盖,并且在输入的时候,光标前方没有 > 提示符(cat > file << EOF 是有的),最后,标记输入文件完成的方式也只有使用 Ctrl + C 或者 Ctrl + D

2. 说明

  • 新建文件,并导入多行文件(新建文件或覆盖文件内容)

这里写一个A.sh脚本如下:

#!/bin/bash

cat > kube.txt <

执行#sh A.sh脚本,再cat一下看执行结果:

OPTS="--logtostderr=false --v=4"

这里,我们修改一下脚本内容,将里边的参数--logtostderr=false,--v=0,再试一下呢:

#!/bin/bash

cat > kube.txt <

再cat一下查看下执行结果:

OPTS="--logtostderr=true --v=0"

 这里,可以看到我们cat > FileName <

当然,不通过脚本,我们在终端去手动敲:

# cat > kube-scheduler << EOF
> #文本内容
> EOF

如果使用echo打印输出,则繁琐,必须这样去写:echo -e   "#!/bin/sh \n #文本内容" > kube-scgeduler。-e表示escape。


  • 追加文件方式

cat << EOF > kube.js,内容和上边的雷同

[root@master01 scripts]# cat << EOF > kube.js    
> OPTS="--logtostderr=false\
> --v=4 \"
> EOF

查看一下:

[root@master01 scripts]# cat kube.js 
OPTS="--logtostderr=false--v=4 \"

这时已存在kube.js文件了,我们重新再输入不同内容试一下:

[root@master01 scripts]# cat << EOF > kube.js    
> OPTS="--logtostderr=true\
> --v=0 \"
> EOF

查看一下:

[root@master01 scripts]# cat kube.js 
OPTS="--logtostderr=true --v=0 \"

可以看到,我们以文件追加方式,实现多行文本的输出,cat的多行内容有$等特殊字符时,须利用转义字符\,其结尾以EOF作为输入结束,可以对已有文件内容进行编辑修改。

此时,再思考 cat > file 和 << EOF组合或者 cta << EOF >file组合在一起的行为就不是那么难了。其中 cat > file 负责创建 file 文件,并提示用户输入文件内容,<< EOF 负责显示提示符 >,并且以 EOF 判定文件内容输入结束。


愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

 

你可能感兴趣的:(Linux)