cómo seleccionar salida múltiple

cómo seleccionar salida múltiple

Soy nuevo en las secuencias de comandos bash y no entiendo qué hay de malo en esta parte específica de mi secuencia de comandos. Estoy intentando seleccionar todas las salidas que tengo en mi script. y tratando de poner en condiciones de que si no se cumplen todas esas condiciones, entonces no es válido y, de lo contrario, es válido.

if [[ `echo $?` -ne {0..4} ]]
then
         echo "Its a Valid Date."
 else
         echo " Not valid date."
fi

Cuando lo ejecuto, obtengo:

kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument `(' to conditional binary operator
./cal2: line 40: syntax error near `(0'
./cal2: line 40: `if [[ `echo $?` -ne (0..4) ]]'

Respuesta1

`echo $?`Es una forma complicada de escribir $?. No hagas las cosas de forma complicada cuando hay una forma obvia y más sencilla.

Creo que quieres probar si $?uno de los valores es 0, 1, 2, 3 o 4. La sintaxis que estás usando no tiene sentido. Puede probar los cinco casos de igualdad:

if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …

Pero eso es demasiado detallado. Como desea permitir el rango 0–4, pruebe que $?sea mayor que el valor mínimo y menor que el valor máximo.

if [[ $? -ge 0 && $? -le 4 ]]; then …

$?nunca es negativo, por lo que la prueba $? -ge 0es superflua. De este modo:

if [[ $? -le 4 ]]; then …

Esto también se puede escribir usando una expresión aritmética. Tenga en cuenta que el operador es diferente: las construcciones condicionales entre paréntesis usan -eq, -ne, -le, -gey para comparar números enteros, mientras que las expresiones aritméticas tienen una sintaxis similar a -ltla -gtde C.

if (($? <= 4)); then …

información relacionada