2017-11-02 3 views
1

シェルスクリプトでそのAMかPMかどうかをチェックします。シェルスクリプトでAMまたはPMの日付がチェックされ、それに応じて対処してください

if (`date "+%p"` -eq "AM"); then echo "Yes"; else "NO"; fi 

をしかし、それは示しています:
私はこれを試してみました

AM:コマンドが

はまた、=の代わりに-eqで試してみましたが見つかりません。

お願いします。ありがとうございました。あなたの現在の文の

+0

'if [[$(date +"%P ")==" am "]];それから... '注意:' man bash'と 'man date'はあなたの友達です。 –

答えて

2

2つの問題:GNU dateユーティリティで

1)書式指定子%pAMまたはPMのいずれかの小文字が含まれていてもよい - あなたの現在のlocaleによって異なります。小文字のプレゼンテーション

2)bashの、-eqに含まれているとして%P指定子を使用することをお勧めします - ではない文字列の比較

のために、整数比較演算子である正しい方法は次のようになります。

if [ `date +%P` = "am" ]; then echo 'Yes'; else echo 'No'; fi 

すべてのロケールを処理するには、現在の時の値(%Hで指定)と正午の時間を比較することができます12

if [ `date +%H` -lt 12 ]; then echo 'Yes'; else echo 'No'; fi 
+0

ありがとうございます。あなたの答えははっきりしており、小文字と大文字の区別もありません。だからこれを受け入れる。 –

+0

ロケールでは、before-noonとafter-noonを指定する任意の文字列を指定できます。 (例えば、 'fr_FR'は何も提供しません、' hu_HU'は 'de'と' du'を使用します)。 '%H'を使用し、値が12より小さいかどうかを確認する方が良いでしょう。 – chepner

+0

@chepner、私の更新は – RomanPerekhrest

1

ここ

# String comparision with = 
# [ ] instead if() 
if [ `date "+%p"` = "AM" ]; then 
     echo "Yes"; 
else 
     echo "NO"; # Missed echo here 
fi 
+0

この回答も正しいです。ありがとう。 –

2

ロケールは、言語を指定して、および/またはampmの代わりに使用する特定の文字列を国別することができます。たとえば:

h=$(date +%H) 
if ((h < 12)); then 
    echo YES # am 
else 
    echo NO # pm 
fi 

それとも、知られているロケール強制:

ampm=$(LC_TIME=C date +%P) 
if [[ $ampm = am ]]; then 
    ... 
else 
    ... 
fi 

$ LC_TIME=hu_HU date +%P 
de 
$ LC_TIME=fr_FR date +%P 

$ LC_TIME=en_EN date +%P 
pm 

は代わりに、%Pのための価値を提供するために使用される一日の半分を参照して時間を確認してください

+0

++統一アプローチです – RomanPerekhrest

関連する問題