如果文件尚未存在,则将字符串添加到文件底部

时间:2017-07-27 12:25:21

标签: bash grep

我有以下bash脚本

#!/bin/bash
FILE=sidekiq.yml
DIR=/home/<user>/*/current/config
DISCOVERY=$(find $DIR -name "$FILE"|cut -d/ -f4)

for i in $DISCOVERY

do grep -qF '^command[sidekiq_$i]' /usr/lib/nagios/plugins/config/sidekiq.conf || echo command[sidekiq_$i]=/usr/lib/nagios/plugins/check_procs -c 1:1 -a "'$i ['" | sudo tee -a /usr/lib/nagios/plugins/config/sidekiq.conf

done

如果匹配的行不存在,脚本的目的是在配置文件中添加一行。

当我第二次运行脚本时,它仍会添加字符串。我做错了什么?

1 个答案:

答案 0 :(得分:0)

最大的问题是你将参数单引用到grep:

  

grep -qF&#39; ^命令[sidekiq_ $ i]&#39; /usr/lib/nagios/plugins/config/sidekiq.conf

阻止$i的变量扩展。如果希望展开$i,则需要使用双引号。下一个问题是grep的-F标志迫使grep将搜索字符串视为固定模式,而不是正则表达式,因此插入符号成为插入符号而不是一个锚。

如果您需要锚点,请删除-F并转义方括号:

grep -q "^command\[sidekiq_$i\]" /usr/lib/nagios/plugins/config/sidekiq.conf

或者如果您不需要插入符号锚点,请保留-F并删除插入符号:

grep -qF "command[sidekiq_$i]" /usr/lib/nagios/plugins/config/sidekiq.conf