我有以下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
如果匹配的行不存在,脚本的目的是在配置文件中添加一行。
当我第二次运行脚本时,它仍会添加字符串。我做错了什么?
答案 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