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 0
es 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
, -ge
y para comparar números enteros, mientras que las expresiones aritméticas tienen una sintaxis similar a -lt
la -gt
de C.
if (($? <= 4)); then …