14

パラメータの 1 つが dd/mm/yyyy 形式の日付になるシェル スクリプトを作成する必要があります。私の質問は、パラメーターとして渡された日付が実際にこの日付形式に従っているかどうかを確認するにはどうすればよいですか? 以下のようにgrepコマンドを使用しようとしました:

if echo "$1" | grep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]\{4\}$'

しかし、たとえば日が 33、34、(...) になる可能性があるため、正しい形式が得られませんでした。これは実際には正しい形式ではありません。渡された日付が本当に dd/mm/yyyy の形式に従っているかどうかを実際に確認できることを知っている人はいますか?

4

13 に答える 13

26

利用

date "+%d/%m/%Y" -d "09/99/2013" > /dev/null  2>&1
 is_valid=$?

日付文字列は「MM/DD/YYYY」形式である必要があります。

0 を取得しない場合、日付は無効な形式です。

于 2013-09-11T01:49:31.217 に答える
3

まず、正規表現を使用して入力の形式を確認します。次に、awk を使用して mm/dd/yyyy に切り替え、date を使用して検証します。ifステートメントでは次の式を使用できます。

echo "$1" | egrep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]{4}$' && date -d "$(echo "$1" | awk 'BEGIN{FS=OFS="/"}{print $2"/"$1"/"$3}')" >/dev/null 2>&1
于 2013-09-11T04:50:24.510 に答える
1

`X="2016-04-21" 次に、以下の値が 1 または 0 であることを確認します。

カルecho $x | cut -c 6-7 echo $x | cut -c 1-42>/dev/null | grep -cecho $x | cut -c 9-10

値が 1 の場合は有効で、それ以外の場合は無効です。

于 2016-04-21T15:50:14.297 に答える