el nombre de mi script es 1. cuando escribo "1 2012 12 12". muestra el calendario de fechas actual y cuando ingreso una fecha no válida como "1 2323232", cal me da un error, entonces, ¿cómo podría poner eso en el bucle if? Si da un error, dice "la fecha no es válida".
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
cal $day $month $year
if [ $? -eq 0];
then
echo "Date is valid"
else
echo "Date in not valid"
fi
Respuesta1
Esto no funcionará:
cal $day $month $year
cal
sólo espera argumentos de mes y año. Intentar:
cal $month $year
Si desea imprimir un mensaje si el mes y el año no son válidos, no es necesario realizar un bucle. El siguiente código mostrará un calendario si el mes y el año son válidos o un mensaje de error si no lo son:
cal $day $month $year 2>/dev/null || echo "Date is not valid."
La siguiente declaración ||
solo se ejecuta si la declaración anterior finaliza con un código de retorno distinto de cero (lo que indica que ocurrió un error).
Aparte
Estas líneas no parecen lograr mucho:
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
Si las variables year
, month
y day
, son válidas, estas líneas no hacen nada. Si no son números válidos, bc
arrojará un error no detectado.