1. 程式人生 > 其它 >使用cat和重定向生成多行文字知識乾貨

使用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