今日が毎月15日であることを確認するbashスクリプトが欲しいです。
if [ $dayOfMonth == 15 ]
then
echo "15th day of month
fi
答え1
このコマンドは、フォーマット文字列を使用してコマンドをdate +%d
呼び出してその月の日付を取得するために使用できます。フォーマット文字列はマニュアルに記載されていますが、確かにC関数のマニュアルに記載されています。月の日付を2桁の数字で指定します(ゼロパディング可能)。date
%d
date
strftime()
テストに使用できます。
day=$( date +%d )
if [ "$day" = "15" ]; then
echo 'the 15th'
fi
ここで使用されている参照と文字列の間の同一性テストは単一のテストで実行されることに注意して=
ください[ ... ]
。
実際に使用していると思われる最新バージョンのシェル(4.2+)では、以下をbash
使用してその月の日付を取得することもできます。
printf -v day '%(%d)T' -1
これは外部コマンドに依存せず、変数をday
今月の日付に設定しますdate
。-1
現在の日時を示します。ドキュメントの説明を参照してください。
答え2
$ date --help
Usage: date [OPTION]... [+FORMAT]
…
%d day of month (e.g., 01)
…
したがって、文字列の同一性を使用します(たとえば、9までの数字には0が必要です= "09"
)。
if [ "$(date +%d)" = "15" ]; then …
または、数値同等性を使用します(前にゼロは必要ありません。たとえば-eq 9
)。
if [ "$(date +%d)" -eq 9 ]; then …
Bashでは、単一の括弧の代わりに二重括弧として使用する[[ $(date +%d) -eq 9 ]]
と、先行ゼロは数字が8進数であることを示すものとして扱われるため、これは機能しません。-eq
同様に、算術式を使用すると、すべてのシェルは前のゼロを8進数を表すものとして扱うため、このようなことは(($(date +%d) == 9))
機能しません。 ((($(date +%d) == 15))
動作しますが、毎月8日と9日にエラーメッセージが表示されます。)dayOfMonth=$(date +%d); dayOfMonth=${dayOfMonth#0}; ((d == 9))
日付の場合、前にゼロが1つしかないので動作します。