Имя моего скрипта - 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
выдаст неперехваченную ошибку.