老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

【Linux运维教程】使用cat和重定向生成多行文本知识干货!

老男孩IT教育

常见问题

2021年11月10日 17:31

Linux运维人员在写自动化脚本时,cat命令配合重定向符号是非常常用的实现将多文本写入到指定文件且不用交互的方法。

  Linux运维人员在写自动化脚本时,cat命令配合重定向符号是非常常用的实现将多文本写入到指定文件且不用交互的方法。

  cat 查看文本文件内容

  EOF 全拼"end of file",文件结束符

  >标准输出重定向

  <<追加输入重定向

Linux培训班

  1、追加多行文本到oldboy.txt

cat >/opt/oldboy.txt <<EOF
oldboy
oldgirl
EOF
cat /opt/oldboy.txt
注:
1.EOF要成对,EOF也可以是和增加内容不冲突的其他字符串。
2.结尾EOF要顶格,EOF后面也不能有任何字符(包括空格)否则会出错。

  输出结果

oldboy
oldgirl

  2、追加多行文本到oldboy.txt,文本中带特殊字符,例如:$

  方法1:传统方法,转义特殊字符

cat > /opt/oldboy.sh <<EOF
oldboy="I am oldboy."
echo \$oldboy
EOF
注:用反斜线对特殊字符$进行转义,写法为\$

  方法2:本文方法,无需对特殊字符转义(本文精髓)

  #起始EOF被加上双引号或者单引号,即可解决特殊字符转义问题。

cat > /opt/oldboy.sh <<'EOF'
oldboy="I am oldboy."
echo $oldboy
EOF
注:把首个EOF用单引号或双引号引起来。

  方法1和方法2输出结果同为:

oldboy="I am oldboy."
echo $oldboy
#可以看到$符号正常

  3、直接输出多行文本到屏幕(-的作用)

#正常输出,空格,tab都有效,前面加tab
cat <<'EOF'
  oldboy="I am oldboy."
  echo $oldboy
EOF
#输出结果(保留tab,所以看起来缩进了):
  oldboy="I am oldboy."
  echo $oldboy

#EOF前加-,会忽略TAB键[不能是空格]
cat <<-'EOF'
  oldboy="I am oldboy."
  echo $oldboy
  EOF
#注:
#1.结尾的EOF也可以不顶格了(加tab)。
#2.注意输出是否顶格。
#输出结果(忽略了tab):
oldboy="I am oldboy."
echo $oldboy

  4.综合演示脚本

[root@oldboy ~]# cat oldboy.sh 

#范例1:追加多行普通文本
echo ------范例1:--------------

cat >/opt/oldboy.txt <<EOF
oldboy
oldgirl
EOF
cat /opt/oldboy.txt
#注:
#1.EOF要成对,EOF也可以是和增加内容不冲突的其他字符串。
#2.结尾EOF要顶格,EOF后面也不能有任何字符(包括空格)否则会出错。
echo ------范例2:--------------

#范例2:追加带特殊字符的多行文本
#方法1:传统方法,转义特殊字符
cat >/opt/oldboy.sh <<EOF
oldboy="I am oldboy."
echo \$oldboy
EOF
#注:用反斜线对特殊字符$进行转义,写法为\$
cat /opt/oldboy.sh
echo ------范例3:--------------

#方法2:本文方法,无需对特殊字符转义
#起始EOF被加上双引号或者单引号,即可解决特殊字符转义问题。
cat > /opt/oldboy.sh <<'EOF'   
oldboy="I am oldboy."
echo $oldboy
EOF
#注:把首个EOF用单引号或双引号引起来。
cat /opt/oldboy.sh
echo ------范例4:--------------

#范例4:
#正常输出,空格,tab都有效
cat <<'EOF'
    oldboy="I am oldboy."
    echo $oldboy
EOF

#EOF前加-,会忽略TAB键[不能是空格]
cat <<-'EOF'
    oldboy="I am oldboy."
    echo $oldboy
    EOF
#注:
#1.结尾的EOF也可以不顶格了。
#2.注意输出是否顶格。

  执行结果

[root@oldboy ~]# sh oldboy.sh 
------范例1:--------------
oldboy
oldgirl
------范例2:--------------
oldboy="I am oldboy."
echo $oldboy
------范例3:--------------
oldboy="I am oldboy."
echo $oldboy
------范例4:--------------
    oldboy="I am oldboy."
    echo $oldboy
oldboy="I am oldboy."
echo $oldboy

  想要学习Linux,欢迎咨询老男孩教育在线客服,可免费申请领取试听视频及学习大纲,了解Linux技术的学习发展路线。

  推荐阅读:

  Linux中gpgcheck是什么意思?Linux云计算运维培训

  有哪些因素会影响Linux性能?Linux云计算培训班

  【总结】Linux中有哪些使用频率高的命令?Linux运维培训

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。