如何在Shell脚本中执行逻辑或操作
我试图做一个简单的条件检查,但它似乎并没有工作。
如果$#
等于0
或者大于1
那就打个招呼吧。
我尝试过以下语法,但没有成功:
if [ "$#" == 0 -o "$#" > 1 ] ; then echo "hello" fi if [ "$#" == 0 ] || [ "$#" > 1 ] ; then echo "hello" fi
这应该可以。
if [ "$#" == 0 ] || [ "$#" -gt 1 ] ; then echo "hello" fi
我不确定这是否与其他shell不同,但是如果你想使用<,>,你需要把它们放在双括号里面,像这样:
if (("$#" > 1)) ...
这段代码适用于我:
#!/bin/sh argc=$# echo $argc if [ $argc -eq 0 -o $argc -eq 1 ]; then echo "foo" else echo "bar" fi
我不认为sh支持“==”。 使用“=”来比较string和-eq来比较整数。
man test
更多细节。
如果你正在使用bash退出码状态$? 作为variables,最好这样做:
if [ $? -eq 4 -o $? -eq 8 ] ; then echo "..." fi
因为如果你这样做:
if [ $? -eq 4 ] || [ $? -eq 8 ] ; then
OR的左边部分改变$? variables,所以OR的右边部分没有原来的$? 值。
有时你需要使用双括号,否则你会得到一个错误,如太多的参数
if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]] then fi
你有没有尝试过这样的事情:
if [ $# -eq 0 ] || [ $# -gt 1 ] then echo "$#" fi
从Bash参考手册→3.4.2特殊参数
#
($#)扩展为十进制位置参数的数量。
因此, $#
将始终是0或更大的整数。
所以如果你想在$#
是0或者大于1时做某事,你只需要检查$#
是否为1
:
[ $# -eq 1 ] && echo "1 positional param" || echo "0 or more than 1"
这使用语法:
[ condition ] && {things if true} || {things if false}