如何简化这个bash shell代码

时间:2012-02-17 02:43:22

标签: regex bash shell if-statement grep

这是我的代码

if  grep -q $lines scanHistory;then
    echo -n ''
else
    if grep -q $lines waiting;then
        echo -n ''
    else
        Download $lines
        echo "---$lines was download successfully"
    fi
fi

我的诅咒是,如果在scanHistory和等待中都找不到$ line,那么运行Download。

我尝试更简单地制作此代码,并将 if 写为

如果grep -qv $ lines scanHistory&& grep -qv $行等待;然后

....

但失败了....

4 个答案:

答案 0 :(得分:5)

尝试:

if ! grep -q $lines scanHistory && ! grep -q $lines waiting; then ...

使用grep -v的初始尝试失败,因为 如果输入的任何行与模式不匹配,则grep -v成功。

答案 1 :(得分:1)

也许你想要

  if ! ( grep -q $lines scanHistory || grep -q $lines waiting ) ; then

  ....

问题是-v无法按照您认为的方式运作

当你grep nonexistant file时,你得到1,但是找不到它,但是当你grep -v nonexistant file时,返回代码是0,因为file中的所有其他行都是DID否定匹配“不存在的。

我希望这会有所帮助。

答案 2 :(得分:0)

    grep -q -e "$lines" scanHistory -e "$lines" waiting
    if [ $? -ne 0 ] # Check if the above command is a success or not, if not run downlaod.
    then
        <run_Download>
    fi

答案 3 :(得分:0)

使用bash短路操作符&&||

grep -q $lines scanHistory || 
  grep -q $lines waiting || 
  Download $lines &&
  echo "---$lines was download successfully"

它可以放在一行,如下所示,但上面的内容更具可读性:

grep -q $lines scanHistory || grep -q $lines waiting || Download $lines && echo "---$lines was download successfully"