'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 …