La razón por la que siempre va a la rama BAD
de la declaración if
es que la prueba
[[ "$1" != '1' || '2' ]]
primero prueba si $1
no es 1
, y si no lo es, se imprime BAD
. Si es así, 2
se evalúa como una prueba. Una cadena como 2
siempre es verdadera y se imprime BAD
.
En cambio:
if [ "$1" != '1' ] && [ "$1" != '2' ]; then
o, con pruebas aritméticas,
if [ "$1" -ne 1 ] && [ "$1" -ne 2 ]; then
o, usando evaluación aritmética,
if (( $1 != 1 )) && (( $1 != 2 )); then