使用cat和重定向生成多行文本知识干货
说明:运维人员在写自动化脚本时,cat命令配合重定向符号是非常常用的实现将多文本写入到指定文件且不用交互的方法。
cat 查看文本文件内容 EOF 全拼"end of file",文件结束符 >标准输出重定向 <<追加输入重定向
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
本文来自博客园老男孩的博客,作者:老男孩老师,转载请务必注明原文链接:https://www.cnblogs.com/oldboy666/p/15167300.html