Erro de sintaxe para um script que requer 3 variáveis de leitura específicas?

0

Eu tenho que escrever respostas para um script que já me foi dado. Os dois conjuntos de informações para os quais devo dar uma saída são se as variáveis que serão lidas forem 3 3 3 e 20 3 5.

Eu decidi testar o script primeiro, mas continuo tendo erros de sintaxe na linha 19, e não consigo descobrir qual é o problema. Eu testei várias variantes do espaçamento e parênteses, mas não consigo chegar lá. Qualquer ajuda seria apreciada.

#!/bin/sh
## Name of the program is challengelab3.2

## request information from the user
echo enter 3 numbers
read a b c

## check for proper range of numbers
if [ $a -gt 10 -o $b -gt 10 -o $c -gt 5 ]; then
    echo "numbers out of range"
    exit 1
fi

# process_data
x=$(($a + $b + $c))

while [ $x -gt 0 ]
do
     echo (( $x / 2%2 ))
     x=$((expr $x -1))
done

# end of program
    
por Mister123 29.11.2015 / 06:40

1 resposta

1

Tente isso:

#!/bin/sh
## Name of the program is challengelab3.2

## request information from the user
echo enter 3 numbers
read a b c

[ -z "$a" ] && echo a is missing, enter all 3 numbers && exit 1
[ -z "$b" ] && echo b is missing, enter all 3 numbers && exit 1
[ -z "$c" ] && echo c is missing, enter all 3 numbers && exit 1

if [ "$a" -gt 10 -o "$b" -gt 10 -o "$c" -gt 5 ]; then
    echo "numbers out of range"
    exit 1
fi

# process_data
x=$((a + b + c))

while [ "$x" -gt 0 ]
do
    echo $(( x / 2 % 2 ))
    x=$((x - 1))
done
  1. a aritmética do shell é feita com $(( ... ))

  2. Lembre-se de citar suas variáveis fora de $(()) e [[ ]] . Sem as aspas, se $ a ou $ b ou $ c estiverem indefinidos (por exemplo, o usuário insere apenas 1 ou 2 números), haverá um erro de sintaxe porque -gt requer dois operandos.

por 29.11.2015 / 06:52