Bash Shell判断搜索是否成功

Bash Shell判断搜索是否成功,你想要知道某个文件是否包含指定的字符串,而且只关心“有”还是“没有”。

解决方案

使用 grep 的 -q(quiet)选项。或者,考虑到最大的可移植性,简单将输出重定向到 /dev/null 丢弃。不管用哪种方法,你想知道的答案就在 bash 的返回状态变量 $? 中,因此可以像下面这样将其用于 if 语句:

$ if grep -q findme bigdata.file ; then echo yes ; else echo nope ; fi
nope
$

讨论

在 shell 脚本中,通常并不需要输出搜索结果;你只是想知道有没有找到匹配,以便脚本选择相应的分支。

和大多数 Unix/Linux 命令一样,返回值 0 表示命令成功执行完毕。在这个例子中,成功的意思就是在指定文件(这里只搜索了一个文件)至少找到了一处匹配。返回值保存在 shell 变量 $? 中,随后可以在 if 语句中用到。

如果我们在 grep -q 之后列出多个文件名,那么 grep 会在找到第一处匹配后就停止搜索。它并不会搜索所有文件,因为你只是想知道有没有找到匹配。要是真想搜遍所有文件,(为什么这么做?)那就别用 -q 选项了。

$ if grep findme bigdata.file > /dev/null ; then echo yes ; else echo nope ; fi
nope
$

/dev/null 是一个特殊设备(位桶),重定向到此处的输出全都会被丢弃。

如果你希望自己编写的脚本能够适用于 Unix/Linux 系统上的各种 grep 版本,即便某些版本不支持 -q 选项,/dev/null 同样能够发挥作用。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!