como escrever este comando if?

como escrever este comando if?

meu nome de script é 1. quando digito "1 2012 12 12". ele mostra o calendário da data atual e quando eu insiro uma data inválida como "1 2323232" cal me dá um erro, então como eu poderia colocar isso no loop if que se der erro ecoa "data não 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

Responder1

Isso não funcionará:

cal $day $month $year

calespera apenas argumentos de mês e ano. Tentar:

cal $month $year

Se você quiser imprimir uma mensagem se o mês e o ano forem inválidos, não há necessidade de loop. O código a seguir exibirá um calendário se o mês e o ano forem válidos ou uma mensagem de erro se não forem:

cal $day $month $year 2>/dev/null || echo "Date is not valid."

A instrução a seguir ||só será executada se a instrução que a precede terminar com um código de retorno diferente de zero (indicando que ocorreu um erro).

Aparte

Essas linhas não parecem realizar muito:

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

Se as variáveis year​​, month, e day, forem válidas, essas linhas não fazem nada. Se não forem números válidos, bcgerará um erro não detectado.

informação relacionada