Это мой сценарий:
#!/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
.
Чтобы расширить ответ Эрика, вы можете отказаться от квадратных скобок, если просто проверяете равенство по 0. Вы также можете опустить «$», поскольку разыменование параметров не является обязательным. Для утверждения в его примере,
if [ $(($num % 3)) -eq "0" ]
эквивалентно
if ! ((num % 3))
, добавляя «!» Оператор.
Правильный синтаксис:
if [ $(($num % 3)) -eq "0" ]
Из man bash
:
Арифметическое расширение
Арифметическое расширение позволяет оценить арифметического выражения и подстановки результата. Формат арифметического расширения:
blockquote>$((expression))
Выражение
$num % 3
должно быть оценено, прежде чем его можно будет сравнить с помощью-eq
.