如何评估“if”语句中的算术表达式?

如何评估“if”语句中的算术表达式?

这是我的脚本:

#!/bin/bash 
num=1

while [ $num -lt 100 ]
do
if [ $num % 3 -eq "0" ] 

then      
echo "fizz"

elif [ $num % 5 -eq "0" ]
then
echo "buzz"

elif [ $num % 3 -eq "0" ] && [ $num % 5 -eq "0" ]
then          
echo "fizzbuzz" 

else
echo $num

fi

   ((num++))

done

它不断地说bash: [: too many arguments

答案1

正确的语法是:

if [ $(($num % 3)) -eq "0" ]

man bash

算术扩展

算术扩展允许计算算术表达式并替换结果。算术扩展的格式为:$((expression))

$num % 3在使用 进行比较之前,必须先对表达式进行求值-eq

答案2

为了扩展 Eric 的回答,如果您只是测试相对于 0 的相等性,您实际上可以放弃方括号。您还可以省略“$”,因为参数取消引用是可选的。对于他示例中的语句,

if [ $(($num % 3)) -eq "0" ]

相当于

if ! ((num % 3))

确保添加“!”运算符。

相关内容