Str*_*rry 554 unix bash if-statement sh
我正在尝试进行简单的条件检查,但它似乎不起作用.
如果$#等于0或大于1那么打个招呼.
我尝试了以下语法但没有成功:
if [ "$#" == 0 -o "$#" > 1 ] ; then
echo "hello"
fi
if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
echo "hello"
fi
Run Code Online (Sandbox Code Playgroud)
Cod*_*ict 963
这应该工作:
#!/bin/bash
if [ "$#" -eq 0 ] || [ "$#" -gt 1 ] ; then
echo "hello"
fi
Run Code Online (Sandbox Code Playgroud)
我不确定这在其他shell中是否有所不同但是如果你想使用<,>,你需要将它们放在双括号内,如下所示:
if (("$#" > 1))
...
Run Code Online (Sandbox Code Playgroud)
小智 55
这段代码适合我:
#!/bin/sh
argc=$#
echo $argc
if [ $argc -eq 0 -o $argc -eq 1 ]; then
echo "foo"
else
echo "bar"
fi
Run Code Online (Sandbox Code Playgroud)
我不认为sh支持"==".使用"="比较字符串和-eq来比较int.
man test
Run Code Online (Sandbox Code Playgroud)
更多细节.
luc*_*a76 33
如果您使用bash退出代码状态$?作为变量,最好这样做:
if [ $? -eq 4 -o $? -eq 8 ] ; then
echo "..."
fi
Run Code Online (Sandbox Code Playgroud)
因为如果你这样做:
if [ $? -eq 4 ] || [ $? -eq 8 ] ; then
Run Code Online (Sandbox Code Playgroud)
OR的左边部分改变$?变量,所以OR的右边部分没有原始的$?值.
小智 26
有时您需要使用双括号,否则会出现类似于太多参数的错误
if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]]
then
fi
Run Code Online (Sandbox Code Playgroud)
小智 12
如果是bash脚本
If [[ $input -gt number || $input -lt number ]]
then
echo .........
else
echo .........
fi
exit
Run Code Online (Sandbox Code Playgroud)
你试过这样的事情:
if [ $# -eq 0 ] || [ $# -gt 1 ]
then
echo "$#"
fi
Run Code Online (Sandbox Code Playgroud)
#
($#) 扩展到十进制位置参数的数量。
因此,$#将始终为 0 或更大的整数。
因此,如果您想在$#0 或大于 1时执行某些操作,则只需检查$#is 或 is not 1:
[ $# -eq 1 ] && echo "1 positional param" || echo "0 or more than 1"
Run Code Online (Sandbox Code Playgroud)
这使用语法:
[ condition ] && {things if true} || {things if false}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
908369 次 |
| 最近记录: |