私のスクリプト名は 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
キャッチされないエラーが出力されます。