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