'echo $?' é uma maneira complicada de escrever $? . Não faça as coisas da maneira mais complicada quando houver uma maneira óbvia e mais simples.
Eu acho que você quer testar se $? é um dos valores 0, 1, 2, 3 ou 4. A sintaxe que você está usando não faz sentido. Você pode testar todos os cinco casos de igualdade:
if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …
Mas isso é excessivamente detalhado. Como você deseja permitir o intervalo de 0 a 4, teste se $? é maior que o valor mínimo e menor que o valor máximo.
if [[ $? -ge 0 && $? -le 4 ]]; then …
$? nunca é negativo, então o teste $? -ge 0 é supérfluo. Assim:
if [[ $? -le 4 ]]; then …
Isso também pode ser escrito usando uma expressão aritmética. Observe que o operador é diferente: construções condicionais em colchetes usam -eq , -ne , -le , -ge , -lt e -gt para comparar inteiros, enquanto expressões aritméticas têm uma sintaxe semelhante a C. / p>
if (($? <= 4)); then …