Esto muy bien puede ser estupidez de mi parte. Me gustaría aceptar respuestas Sí / No, Verdadero / Falso dentro de mi script Bash:
test.sh
#!/bin/bash
ARGUMENT=$1
echo User passed in $ARGUMENT
OPTARG=${ARGUMENT:0:1}
if [[ "$OPTARG" -eq 0 ]] || [[ "${OPTARG^^}" == "N" ]]; then
echo Decline
elif [[ "$OPTARG" -eq 1 ]] || [[ "${OPTARG^^}" == "Y" ]]; then
echo Accept
else
echo Invalid argument
fi
Aquí hay algunos resultados de muestra:
./test.sh 0
User passed in 0
Decline
./test.sh 1
User passed in 1
Accept
./test.sh 2
User passed in 2
Invalid argument
./test.sh No
User passed in No
Decline
Ahora el stumper. ¿Por qué está [[ "${OPTARG^^}" == "N" ]]
volviendo verdadero para cualquier cadena?
./test.sh Sí
User passed in Yes
Decline
./test.sh ThisShouldNotMatch
User passed in ThisShouldNotMatch
Decline
Respuestas:
Esta:
Coincidirá con cualquier cadena, a menos que sean solo dígitos. Utilizar:
En lugar.
fuente
Aunque el problema en su código ha sido bien explicado por Ricitos de Oro , no puedo resistirme a decir que su código es innecesariamente largo. Podrías simplificarlo mucho.
Lo siguiente es equivalente a su código deseado:
Es posible que también desee consultar las Construcciones condicionales en el manual .
fuente
También puedes usar
case
fuente