シェルスクリプトでそのAMかPMかどうかをチェックします。シェルスクリプトでAMまたはPMの日付がチェックされ、それに応じて対処してください
if (`date "+%p"` -eq "AM"); then echo "Yes"; else "NO"; fi
をしかし、それは示しています:
私はこれを試してみました
AM:コマンドが
はまた、=の代わりに-eqで試してみましたが見つかりません。
お願いします。ありがとうございました。あなたの現在の文の
シェルスクリプトでそのAMかPMかどうかをチェックします。シェルスクリプトでAMまたはPMの日付がチェックされ、それに応じて対処してください
if (`date "+%p"` -eq "AM"); then echo "Yes"; else "NO"; fi
をしかし、それは示しています:
私はこれを試してみました
AM:コマンドが
はまた、=の代わりに-eqで試してみましたが見つかりません。
お願いします。ありがとうございました。あなたの現在の文の
2つの問題:GNU date
ユーティリティで
1)書式指定子%p
はAM
または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
ありがとうございます。あなたの答えははっきりしており、小文字と大文字の区別もありません。だからこれを受け入れる。 –
ロケールでは、before-noonとafter-noonを指定する任意の文字列を指定できます。 (例えば、 'fr_FR'は何も提供しません、' hu_HU'は 'de'と' du'を使用します)。 '%H'を使用し、値が12より小さいかどうかを確認する方が良いでしょう。 – chepner
@chepner、私の更新は – RomanPerekhrest
ここ
# String comparision with =
# [ ] instead if()
if [ `date "+%p"` = "AM" ]; then
echo "Yes";
else
echo "NO"; # Missed echo here
fi
この回答も正しいです。ありがとう。 –
ロケールは、言語を指定して、および/またはam
とpm
の代わりに使用する特定の文字列を国別することができます。たとえば:
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
のための価値を提供するために使用される一日の半分を参照して時間を確認してください
++統一アプローチです – RomanPerekhrest
'if [[$(date +"%P ")==" am "]];それから... '注意:' man bash'と 'man date'はあなたの友達です。 –