shell實戰(二):cat EOF 追加與覆蓋文件

一、前言

之前寫shell腳本的時候,有這樣一個需求:我需要創建一些文件,並將內容輸入到文件中。如果創建一個文件內容模板,然後通過$1,$2傳參的形式修改某些值,這樣做感覺太不方便。後來從網上找了到 cat EOF 的用法,完全符合我的使用場景。

二、舉例

# keepalived_conf
keepalived_conf=/etc/keepalived
host2=10.6.6.72
cat > ${keepalived_conf}/xmha/checkServer.sh << EOF
#!/bin/bash
status=\`cat ${keepalived_conf}/xmha/keepalived_status\`
if [ \$status == "master" ];then
ps -ef | grep ambari-server | grep -v grep >> /dev/null 2>&1
if [ \$? -ne 0 ];then
sh /etc/keepalived/xmha/checkFile.sh
echo "backup" > "${keepalived_conf}/xmha/keepalived_status"
# 停止keepalived服務,使VIP轉移
/bin/sudo -u root pkill keepalived
# 再次檢查keepalived進程,防止停止失敗
ps -ef | grep /opt/gvmysql/keepalived/sbin/keepalived | grep -v grep
if [ \$? -eq 0 ];then
# 如果keepalived服務未成功停止,則手動kill
ps -ef | grep /opt/gvmysql/keepalived/sbin/keepalived | grep -v grep | awk '{print \$2}' | xargs kill -9
fi
fi
elif [ \$status == "backup" ];then
ps -ef | grep ambari-server | grep -v grep >> /dev/null 2>&1
if [ \$? -eq 0 ];then
ps -ef | grep ambari-server | grep -v grep | awk '{print \$2}' | xargs kill -9
fi
fi
sh /etc/keepalived/xmha/check_brain_split.sh
EOF
# 遠程主機執行cat EOF命令
ssh root@${host2} "cat > ${keepalived_conf}/xmha/checkFile.sh" << EOF

# 代碼
EOF

說明

  • 如上述代碼所示,將內容批量輸入至checkServer.sh文件中。其中沒有加轉義符 \ 的變量會在腳本中被解釋為真實值;加轉義符 \ 的變量會將變量的寫法原樣地輸入至目標文本中。
  • 涉及到變量操作,如果需要保留該變量到文件中的話,需要轉義符\。否則,shell腳本將會解釋這些變量。
  • cat 追加內容用 >>,覆蓋內容用 > 。
  • 遠程主機執行 cat EOF 命令,需要使用引號將 cat至文件的部分 括起來,上面已給出示例。

三、小結

雖然文章比較短,但也提供了一種批量輸入內容至文件的方法,可以靈活的將變量賦予不同的真實值,挺實用的。使用 cat EOF的時候注意結合轉義符的使用。


--END--

碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力

友情提示:原文排版精美,可點擊分享鏈接查看。


分享到:


相關文章: