Você está executando seu script com /bin/sh
, que simplesmente não tem suporte para matrizes. O bash
shell, por outro lado, possui.
Você também está usando algumas construções um pouco antiquadas, como expr
para fazer aritmética.
Aqui está uma versão do script escrito para bash
:
#!/bin/bash
read -p 'Enter n: ' n
while (( n > 0 ))
do
read -p 'Enter number: ' a
if (( a % 2 == 0 ))
then
even+=( "$a" )
else
odd+=( "$a" )
fi
n=$(( n - 1 ))
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
As principais mudanças incluem a correção da linha #!
para apontar para bash
, usando (( ... ))
para avaliação aritmética, $(( ... ))
para substituição aritmética, read -p
para fornecer ao usuário uma solicitação, +=(...)
para adicionar um elemento para uma matriz e remoção de variáveis desnecessárias.
Uma versão não interativa do script que recebe os números da linha de comando:
#!/bin/bash
for number do
if (( number % 2 == 0 )); then
even+=( "$number" )
else
odd+=( "$number" )
fi
done
printf 'The even numbers: %s\n' "${even[*]}"
printf 'The odd numbers: %s\n' "${odd[*]}"
Teste:
$ bash script.sh 1 2 3 4
The even numbers: 2 4
The odd numbers: 1 3