Como avaliar uma expressão aritmética em uma instrução “if”?

5

Este é o meu script:

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

Ele continua dizendo bash: [: too many arguments .

    
por H-town 04.03.2013 / 00:29

2 respostas

4

A sintaxe correta é:

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

De man bash :

  

Expansão aritmética

     

Expansão aritmética permite a avaliação de uma expressão aritmética   e a substituição do resultado. O formato da aritmética   a expansão é: $((expression))

A expressão $num % 3 deve ser avaliada antes de poder ser comparada usando -eq .

    
por Eric Carvalho 04.03.2013 / 01:03
0

Para expandir a resposta de Eric, você pode renunciar aos colchetes se estiver simplesmente testando a igualdade em relação a 0. Você também pode omitir o "$" já que o dereferenciamento de parâmetro é opcional. Para a afirmação em seu exemplo,

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

é equivalente a

if ! ((num % 3))

certificando-se de adicionar o "!" operador.

    
por Dan Y 27.06.2017 / 16:13

Tags