下面的表达式是组合 if-else if 语句的正确方法吗?
if [ $TO_MAJOR -eq 7 ] ; then
if [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ]; then
echo "AE port not supported"
elif [ $TO_MINOR -lt 3 ] ; then
echo "AE port not supported"
fi
fi
到
if [ [ $TO_MAJOR -eq 7 ] -a [ [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ] -o [ $TO_MINOR -lt 3 ] ] ]; then
echo "AE port not supported"
fi
答案1
第二个代码中的括号太多。 [
是 的同义词test
。所以有两种方法可以做你想做的事。一种是在单个测试语句中完成所有操作,在这种情况下只有一组括号:
if [ \( $TO_MAJOR -eq 7 -a $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 \) -o $TO_MINOR -lt 3 ]; then
另一种是使用shell的&&
and||
操作符连接多个测试命令
if [ $TO_MAJOR -eq 7 ] && ...
但是你所拥有的不起作用,因为 while[
与 , 是同义词test
,在声明[
中没有意义test
。