Как оценить арифметическое выражение в & ldquo; if & rdquo; заявление?

Это мой сценарий:

#!/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.

6
задан 4 March 2013 в 17:27

2 ответа

Чтобы расширить ответ Эрика, вы можете отказаться от квадратных скобок, если просто проверяете равенство по 0. Вы также можете опустить «$», поскольку разыменование параметров не является обязательным. Для утверждения в его примере,

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

эквивалентно

if ! ((num % 3))

, добавляя «!» Оператор.

0
ответ дан 4 March 2013 в 17:27

Правильный синтаксис:

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

Из man bash:

Арифметическое расширение

Арифметическое расширение позволяет оценить арифметического выражения и подстановки результата. Формат арифметического расширения: $((expression))

Выражение $num % 3 должно быть оценено, прежде чем его можно будет сравнить с помощью -eq.

0
ответ дан 4 March 2013 в 17:27

Другие вопросы по тегам:

Похожие вопросы: