检查bash的变量等于0 [复制](Check if bash variable equals 0

2019-08-01 23:47发布

这个问题已经在这里有一个答案:

  • 在Bash中比较数字 7分的答案

我有一个bash可变深度,我想测试它是否等于0。如果是的,我想阻止脚本的执行。 到目前为止,我有:

zero=0;

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

不幸的是,这会导致:

 [: -eq: unary operator expected

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

拜托,我怎么能修改我的脚本得到它的工作?

Answer 1:

看起来你的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


Answer 2:

双括号(( ... ))用于算术运算。

双方括号[[ ... ]]可用于比较和检验数字(仅整数支持),具有以下运算符:

· 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


Answer 3:

尝试:

zero=0;

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


Answer 4:

还可以使用这种格式和使用比较运算符像“==”“<=”

  if (( $total == 0 )); then
      echo "No results for ${1}"
      return
  fi


Answer 5:

具体做法是: ((depth)) 作为例子,下面的打印1

declare -i x=0
((x)) && echo $x

x=1
((x)) && echo $x


Answer 6:

你可以试试这个:

: ${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它将打印错误消息,然后退出。



文章来源: Check if bash variable equals 0 [duplicate]
标签: bash equals zero