como escrever esse comando se?

0

o nome do meu script é 1. quando eu digito "1 2012 12 12". mostra calendário data atual e quando eu digito uma data invaild como "1 2323232" cal me dá um erro assim como eu poderia colocar isso em se loop que se dá erro echos "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
    
por user3504970 08.10.2014 / 01:01

1 resposta

1

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.

    
por 08.10.2014 / 01:54

Tags