入力内容を読み取るスクリプトを作成したいと思います。たとえば、スクリプト名が "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
答え1
私が確認したいくつかのLinuxディストリビューション(Ubuntu 14.04など)では、パッケージングはcal
GNU CoreutilsではなくBSDで提供されています。 BSD版は日付を月と年だけで受け入れないようです。 Ubuntuバージョンには-H YYYY-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
メモ:
答え2
[[
これは実際にはコマンドであり、他のコマンドと同様に引数を区切るにはスペースが必要です。
if [[ $? -eq 0 ]]; then
# ...^
答え3
$
ドルと変数の間にスペースがありますmonth
。
cal $day $ month $year 2> /dev/null
それが必要です:
cal $day $month $year 2> /dev/null
答え4
「%Y-%m-%d」または「%m/%d/&Y」の形式で日付を入力した場合 (例: 2020-11-29 または 11/29/2020)、gnu を使用して次のことができますあります。次のように日付有効日付(gdate)を確認してください。
gdate -d "$1" +'%Y-%m-%d' > /dev/null 2>&1 # don't display any output
status=$(echo $?) # get error code
if [[ $status = 1 ]] # if date is invalid
then
{ echo "This date doesn't exist. Enter valid date!"; exit 1; }
else
...
私の質問が正確で、これが誰かに役立つことを願っています。もちろんそれは私に効果的です:)