今後の支払い日までの残り日数を表示する必要があります(常に毎月10日であると仮定)。
Bashでこれを行うにはどうすればよいですか?
ベストアンサー1
bash
現在、日付書式設定機能はありますが、ksh93
日付解析や計算機能はzsh
ありません。 または、他のシェルや適切なプログラミング言語を使用する必要があります。perl
python
の場合、ksh93
文書化がほとんどないため、サポートされている日付形式を見つけるのが難しい部分です(常に確認できます)。テストデータ例を見てください)。
たとえば、crontabに似た時間仕様をサポートし、仕様と一致する次の時間を提供するので、次のことができます。
now=$(printf '%(%s)T')
next_10th=$(printf '%(%s)T' '* * 10 * *')
echo "Pay day is in $(((next_10th - now) / 86400)) days"
これで標準ユーティリティがあるので、実装するのはそれほど難しくありません。
eval "$(date '+day=%d month=%m year=%Y')"
day=${day#0} month=${month#0}
if [ "$day" -le 10 ]; then
delta=$((10 - day))
else
case $month in
[13578]|10|12) D=31;;
2) D=$((28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))));;
*) D=30;;
esac
delta=$((D - day + 10))
fi
echo "Pay day is in $delta days"