这是我的脚本:
#!/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))
确保添加“!”运算符。