使用if评估bash命令

时间:2014-08-19 22:34:46

标签: bash if-statement conditional-statements evaluate

我希望创建一个将被发送到数据库的删除查询。

我真的没有这样做的模型,所以我在中寻找关键词delete / bigcompany / scripts / dbscripts /目录,看看其他人是如何做到的。

当我使用它时,我得到了一大堆很好的例子,但它没有给我脚本的名称:

cat /bigcompany/scripts/dbscripts/* | grep delete

我想知道具有删除行查询的脚本的名称,因此我可以在脚本的上下文中看到该查询。

我试过了:

for i in $(ls /bigcompany/scripts/dbscripts/ )
do 
if [ cat /bigcompany/scripts/dbscripts/$i | grep delete ] 
   then
   echo $i
   fi 
done  

我在考虑是否" cat / bigcompany / scripts / dbscripts / | grep delete"评估成功后,脚本将回显包含该关键字的脚本名称。

但事实并非如此。

3 个答案:

答案 0 :(得分:2)

没有文件名的原因是因为你cat将它们全部放入一个文件中。如果您让grep单独搜索它们,它会显示各个文件名:

grep delete /bigcompany/scripts/dbscripts/*

答案 1 :(得分:2)

你想要一个包含匹配项的文件名列表,所以使用-l来做到这一点(一次性完成,这有额外的优点,可以避免文件名中的空格和其他古怪字符出现问题) :

grep -l delete /bigcompany/scripts/dbscripts/*

如果你正在处理SQL,除非有相反的强标准,你可能也想识别DELETE,所以添加-i(不区分大小写):

grep -l -i delete /bigcompany/scripts/dbscripts/*

答案 2 :(得分:1)

Grep有-H选项,可以打印每个匹配项的文件名。作为替代方案,您可以使用-l选项,该选项仅打印匹配的文件名而不是匹配的文本。