我在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
答案 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"
检查字符串等效。