一、前言
之前写shell脚本的时候,有这样一个需求:我需要创建一些文件,并将内容输入到文件中。如果创建一个文件内容模板,然后通过$1
,$2
传参的形式修改某些值,这样做感觉太不方便。后来从网上找了到 cat EOF
的用法,完全符合我的使用场景。
二、举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| # 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
的时候注意结合转义符的使用。