¿Cómo escribir este comando?

¿Cómo escribir este comando?

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

calsó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, monthy day, son válidas, estas líneas no hacen nada. Si no son números válidos, bcarrojará un error no detectado.

información relacionada