这里测试逻辑和条件的最短方法

时间:2014-02-04 22:44:41

标签: linux shell testing conditional-statements logical-operators

我有这个功能来检查是否存在文件模式

trackid=$1
tg=$2
srch=delta-revnue-$trackid
srch2=delta-full-$trackid
testpath() {
var=1
if test -n "$(find $tg -maxdepth 1 -iname "$srch*" -print -quit)"
then

export var=0

else


export var=1

fi

return $var

}

testpath $1 $2
echo "exit code is $?"

我想做像

这样的条件
 If testpath val1 path =!0  ||  testpath val2 path =1
    echo "some files are missing" 
    else
    stuff  here
    fi

我知道有N种方法可以做到这一点。但是有一种非常简短而又甜蜜的说法,这听起来就像是(条件||条件)。 How do you say这个最简洁的壳

答案应该是合乎逻辑的&&不是||。 ||将仅测试1个条件,如果为真,则不会查看另一个条件。

testpath var path && testpath var1 path 

1 个答案:

答案 0 :(得分:2)

你所要做的就是:

if testpath val1 path && testpath val2 path
then
  stuff  here
else
  echo "some files are missing"
fi

如果你真的想切换if / else中的内容顺序,你可以这样做:

testpath val1 path && testpath val2 path

if [ $? != 0 ]
then
  echo "some files are missing"
else
  stuff  here
fi

或者稍微不那么清楚(使用DeMorgans Theorem):

if ! testpath val1 path || ! testpath val2 path
then
  echo "some files are missing"
else
  stuff  here
fi

此外,您的testpath功能也可以大大缩短。你真正需要的就是这个(我根据你想在这里使用函数的方式使用了函数参数):

testpath() {
  test -n "$(find "$2" -maxdepth 1 -iname "*$1*" -print -quit)"
}