这是我的代码
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 $行等待;然后
....
但失败了....
答案 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"