bash脚本 – 检查bashvariables是否等于0

我有一个bashvariables深度,我想testing它是否等于0.如果是,我想停止执行脚本。 到目前为止我有:

zero=0; if [ $depth -eq $zero ]; then echo "false"; exit; fi 

不幸的是,这导致:

  [: -eq: unary operator expected 

(由于翻译可能有点不准确)

请问,我如何修改我的脚本来使其工作?

看起来你的depthvariables是未设置的。 这意味着expression式[ $depth -eq $zero ] [ -eq 0 ]在bash中将variables的值代入expression式之后变成[ -eq 0 ] 。 这里的问题是-eq运算符被错误地用作只有一个参数(零)的运算符,但是它需要两个参数。 这就是为什么你会得到一元操作符的错误信息。

编辑:作为Doktor J在他的评论中提到这个答案,一个安全的方法来避免检查中的未设置variables的问题是将variables括在"" 。 请参阅他的解释说明。

 if [ "$depth" -eq "0" ]; then echo "false"; exit; fi 

[命令一起使用的未设置variables对bash显示为空。 你可以使用下面的testing来validation这一切,因为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?"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后。

在这里,如果发现variablesdepthnull ,它将打印错误消息,然后退出。

具体来说: ((depth)) 。 例如,以下打印1

 declare -ix=0 ((x)) && echo $x x=1 ((x)) && echo $x 
Interesting Posts