Bash in if check integer

时间:2015-06-08 12:13:43

标签: bash shell

我在bash中创建了一个脚本。我需要检查是否取0号然后忽略它,但如果取一些值,那么我需要根据给定的值计算并打印结果。

以下是一个例子:

if [ "$max_users_conn" -ne "0" ]; then
  let "percentage="$process_list"*100/"$max_users_conn""
  echo "$percentage"      
fi

但是,当我运行代码时,收到以下错误:

  

./ mysql_conn.sh:line 14:[:0 10:预期的整数表达式   ./mysql_conn.sh:line 14:[:0 10:预期的整数表达式   ./mysql_conn.sh:line 14:[:5 5:整数表达式预期为0 20

我也尝试过这样运行:

if [ "$max_users_conn" != "0" ]; then
  let "percentage="$process_list"*100/"$max_users_conn""
  echo "$percentage"      
fi

但这会产生不同的错误:

  

./ mysql_conn.sh:line 15:let:percentage = 4 * 100/0:除以0   (错误标记为“0”)   ./mysql_conn.sh:line 15:let:percentage = 4 * 100/0:除以0   (错误标记为“0”)   0 0 20

2 个答案:

答案 0 :(得分:0)

在BASH,你可以这样做:

if [[ $max_users_conn -ne 0 ]]; then
  percentage=$((process_list * 100 / max_users_conn))
  echo "$percentage"      
fi

但请记住,BASH不支持浮点数学,您将获得返回的整数值。

要获取返回的十进制数,请使用上面的bc命令。

percentage=$(bc -l <<< "scale=2; $process_list * 100 / max_users_conn")

答案 1 :(得分:0)

Bash不允许你像其他语言一样使用数学表达式,你需要使用$(( ... ))运算符。但是,如果提供整数,则此运算符仅为您提供基于整数的运算:echo $((2/4)) # => 0。但是,如果您不关心分数,它会对您有所帮助。如果您需要分数,请在答案中使用像anubhava一样的bc

此外,您应该检查$max_users_conn实际上是否包含值。

所以,重写你的剪辑看起来像这样:

if [ -n "$max_users_conn" -a "$max_users_conn" -ne 0 ]; then
    percentage=$(( $process_list * 100 / $max_users_conn))
    echo "$percentage"      
fi

test "$a" -ne 0检查数值,而test "$a" != "$b"检查字符串等效。