как написать эту команду if?

как написать эту команду if?

Имя моего скрипта - 1. Когда я ввожу "1 2012 12 12". он показывает текущую дату в календаре, а когда я ввожу недопустимую дату, например "1 2323232", cal выдает мне ошибку, так как мне вставить это в цикл if, чтобы при возникновении ошибки он выдавал "дата недопустима"?

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

решение1

Это не сработает:

cal $day $month $year

calожидает только аргументы месяца и года. Попробуйте:

cal $month $year

Если вы хотите вывести сообщение, если месяц и год недействительны, нет необходимости в цикле. Следующий код отобразит календарь, если месяц и год действительны, или сообщение об ошибке, если нет:

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

Следующий оператор ||выполняется только в том случае, если предшествующий ему оператор завершается ненулевым кодом возврата (что указывает на то, что произошла ошибка).

В стороне

Эти строки, похоже, не приносят особого результата:

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

Если переменные year, month, и day, являются допустимыми, эти строки ничего не делают. Если они не являются допустимыми числами, bcвыдаст неперехваченную ошибку.

Связанный контент