次のksh88コードは、月[m]と年[y]の値を取り、先月の年[p_m]と先月[p_m_y]を計算します。
m は元の date コマンドから出てくるので、現在の月が 10 より小さい場合は前に 0 が付きます。
m=02
y=2017
if [ $((m-1)) -gt 1 ]
then
p_m=$((m-1))
p_m_y=$((y))
else
p_m=12
p_m_y=$((y-1))
fi
この例では、p_mは12に設定され、p_m_yは2016なので、ifステートメントは失敗したように見え、mが1より大きい場合でも常に "else"コードを実行します。前にゼロを付けるのが問題かもしれないと思いますか? [[..]]を使っても同じことが起こります。
次のように変更すると機能します。
if [[ $((m-1)) != 01 ]]
おそらくこれは文字列比較です。算術比較は機能しません。大きな問題ではなく、まだ解決できます。
ただし、正しい算術を使用してこれを操作する方法が必要です。 Base10拡張を強制しようとすると、何の効果もありません。
if [[ $((10#$m-1)) -gt 1 ]]
ベストアンサー1
月が1 =>先月=> 12で年が減少したときに呼び出されるdc
電卓を使用します。macro
a
それ以外の場合は年を減らします。
m=01
y=2011
set X `echo "[sa 1- 12]sa $y $m d1- r1- r0 =af" | dc`; shift
p_m=$1 p_m_y=$2
echo "Current month:$m Current year: $y"
echo " Prev month:$p_m Prev month year: $p_m_y"