bashで日付データを使用する際にハマったので記録として残しておきます。
エラー状況
以下のシェルスクリプトを例にします。
日付を取得してインクリメントする処理になります。
これを8日に実行するとエラーが発生してしまいます。
#!/bin/bash
DATE_DATA=`date +%d`
echo "$(( DATE_DATA + 1 ))"
08: value too great for base (error token is "08")
原因
取得した日付データを見ると先頭に「0」が付与されています。
#!/bin/bash
DATE_DATA=`date +%d`
echo $DATE_DATA
08
bashでは先頭に「0」が付与されている数値は8進数として扱われるようです。
そのため、8進数として「08」という値は存在しない値となりエラーが発生します。
日付データを扱う場合は「毎月8日」や「毎年8月」など8の日付の際に発生します。
対処方法
bashで日付データを取得する場合に「date +%d」を使用すると1桁の日付の場合は先頭に「0」が付与されます。
数値として扱う場合は十進数として扱いたいので、先頭から「0」を削除する「%-d」オプションを使用します。
#!/bin/bash
DATE_DATA=`date +%-d`
echo $DATE_DATA
8
この設定でシェルスクリプトを実行すると8日の場合でもエラー無く実行できます。
#!/bin/bash
DATE_DATA=`date +%-d`
echo "$(( DATE_DATA + 1 ))"
9