Isso não funcionará:
cal $day $month $year
cal
espera apenas argumentos de mês e ano. Experimente:
cal $month $year
Se você deseja imprimir uma mensagem se o mês e o ano forem inválidos, não há necessidade de um 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 declaração após ||
é executada apenas se a instrução anterior terminar com um código de retorno diferente de zero (indicando que ocorreu um erro).
Aparte
Estas linhas parecem não conseguir 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 farão nada. Se não forem números válidos, bc
emitirá um erro não detectado.