
次の形式の日付があります。date -d $datum +"%Y-%m-%d"
Linuxではうまく機能しますが、FreeBSDでは次のように表示されます。
ERROR wrong format
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
これに対する答え:
date -d $datum +"%Y-%m-%d" >/dev/null 2>&1 || echo "ERROR wrong format"
ただし、エラーを印刷して、正しいように見えるコードを実行し続けます。エラーを出力せず、エラーがある場合にプログラムが終了しないようにするにはどうすればよいですか?
答え1
テストするbsdボックスはありませんが、次のようなものを使用する必要があるようです:
date -f "some format" "$datum" "+%Y-%m-%d"
そして、解析を可能にするために着信データをフォーマットする必要があります。
答え2
LinuxでおなじみのGNUバージョンは、他のほとんどのUnixバリアントバージョンよりもdate
多くの日付形式をサポートしています。date
また、他のUnixバリアントでは見られない多くのオプションがあります。ただ基準の使用法は、パラメータdate
で指定された形式+…
(システム管理者がシステム日付を設定する方法でもあります)に従って現在の日付を表示し、ローカルタイム-u
ゾーンの代わりにUTCを指定するオプションです。
存在するFreeBSD、このdate
ユーティリティを使用すると、オプションを使用して日付形式間を変換できます-f
。たとえば、date -f %s "$datum" +%Y-%m-%d
エポックで秒単位で表される日付を人間が読める形式に変換できます。
素晴らしい日付を解析したい場合は、coreutils
GNU日付を含むこのパッケージをインストールできます。またはあなたは使用することができますDate::Parse
Perlのモジュールまたはdateutil
Pythonで。
ほとんどのエラーでシェルスクリプトを停止するには、次を追加します。set -e
#!
その線のすぐ下にあります。
エラーを明示的に表示するには、エラー状態でスクリプトを終了する必要があります。 stdoutの代わりにstderrにエラーを出力します。
date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1 || {
echo "ERROR wrong format" >&2
exit 1
}
または
if ! date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1; then
echo "ERROR wrong format" >&2
exit 1
fi