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
cal
espera 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, bc
gerará um erro não detectado.