我有这个功能来检查是否存在文件模式
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
答案 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)"
}