入力を読み取るスクリプトを作成したい(たとえば、スクリプトの名前が「check」の場合、「check 9 4 1993」と入力すると、その入力はcalコマンドを実行し、カレンダーで入力されているかどうかを確認します。有効な日付かどうか)。
以下の私の考えは、calコマンドを通過する入力がエラーを出す場合、それは有効な日付ではないことを意味し、逆に、日付が有効であるよりもエラーがない場合はその逆であるということです。このドラフトにはひどい問題があることはわかっていますが(入力がcalコマンドを通過するようにする方法がわかりません)、いくつかの提案をいただければ幸いです。とにかくドラフトは次のとおりです。
#!/bin/bash
day=$1; month=$2; year=$3
day=$(echo "$day" | bc)
month=$(echo "$month" | bc)
year=$(echo "$year" | bc)
cal $day $ month $year 2> /dev/null
if [[$? -eq 0 ]]; then
echo "This is a valid date"
else
echo "This is an invalid date"
fi
私がチェックした一部のLinuxディストリビューション(Ubuntu 14.04など)では、パッケージ化されたcal
はBSDからのものであり、GNU Coreutilsではありません。BSDバージョンは受け入れないようです。パラメータとしての日数。月と年のみ。Ubuntuバージョンには-HYYYY-MM-DDオプションがありますが、それは役に立たないようです。
代わりに、date
ユーティリティを使用します。 LinuxでのGNU Coreutils)と仮定すると、スクリプトを次のように書き直すと思います。
#!/bin/bash
day=$((10#$1))
month=$((10#$2))
year=$((10#$3))
if date -d $year-$month-$day > /dev/null 2>&1; then
# cal $month $year
echo "This is a valid date"
else
echo "This is an invalid date"
fi
ノート:
あなたのドルの間にスペースがあります$
およびmonth
変数:
cal $day $ month $year 2> /dev/null
そのはず:
cal $day $month $year 2> /dev/null
[[
は実際にはコマンドであり、他のコマンドと同様に、引数を区切るために空白が必要です。
if [[ $? -eq 0 ]]; then
# ...^