这个问题已经在这里有一个答案:
- 在Bash中比较数字 7分的答案
我有一个bash可变深度,我想测试它是否等于0。如果是的,我想阻止脚本的执行。 到目前为止,我有:
zero=0;
if [ $depth -eq $zero ]; then
echo "false";
exit;
fi
不幸的是,这会导致:
[: -eq: unary operator expected
(可能有点不准确由于翻译)
拜托,我怎么能修改我的脚本得到它的工作?
这个问题已经在这里有一个答案:
我有一个bash可变深度,我想测试它是否等于0。如果是的,我想阻止脚本的执行。 到目前为止,我有:
zero=0;
if [ $depth -eq $zero ]; then
echo "false";
exit;
fi
不幸的是,这会导致:
[: -eq: unary operator expected
(可能有点不准确由于翻译)
拜托,我怎么能修改我的脚本得到它的工作?
看起来你的depth
变量没有设置。 这意味着表达[ $depth -eq $zero ]
变为[ -eq 0 ]
的bash代入变量的值代入表达式之后。 这里的问题是, -eq
运算符的使用不正确的,只有一个参数(零)的运营商,但它需要两个参数。 这就是为什么你单目运算符的错误消息。
编辑:由于DOKTOR法官在他的这个答案评论提到的,安全的方式,以避免检查与尚未设定的变量问题是括在变量""
。 看到他的解释意见。
if [ "$depth" -eq "0" ]; then
echo "false";
exit;
fi
与所使用的未固化的变量[
命令出现空抨击。 您可以通过下面的测试中,所有评估来验证这个true
,因为xyz
为空或取消设置:
if [ -z ] ; then echo "true"; else echo "false"; fi
xyz=""; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
unset xyz; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
双括号(( ... ))
用于算术运算。
双方括号[[ ... ]]
可用于比较和检验数字(仅整数支持),具有以下运算符:
· NUM1 -eq NUM2 returns true if NUM1 and NUM2 are numerically equal.
· NUM1 -ne NUM2 returns true if NUM1 and NUM2 are not numerically equal.
· NUM1 -gt NUM2 returns true if NUM1 is greater than NUM2.
· NUM1 -ge NUM2 returns true if NUM1 is greater than or equal to NUM2.
· NUM1 -lt NUM2 returns true if NUM1 is less than NUM2.
· NUM1 -le NUM2 returns true if NUM1 is less than or equal to NUM2.
例如
if [[ $age > 21 ]] # bad, > is a string comparison operator
if [ $age > 21 ] # bad, > is a redirection operator
if [[ $age -gt 21 ]] # okay, but fails if $age is not numeric
if (( $age > 21 )) # best, $ on age is optional
尝试:
zero=0;
if [[ $depth -eq $zero ]]; then
echo "false";
exit;
fi
还可以使用这种格式和使用比较运算符像“==”“<=”
if (( $total == 0 )); then
echo "No results for ${1}"
return
fi
具体做法是: ((depth))
作为例子,下面的打印1
。
declare -i x=0
((x)) && echo $x
x=1
((x)) && echo $x
你可以试试这个:
: ${depth?"Error Message"} ## when your depth variable is not even declared or is unset.
注:这只是?
经过depth
。
要么
: ${depth:?"Error Message"} ## when your depth variable is declared but is null like: "depth=".
注:这是:?
经过depth
。
在这里,如果可变depth
发现null
它将打印错误消息,然后退出。