2016-07-27 20 views
0

日付から整数を減算しようとしています。基本的に私はそれが月の15日前であれば、その月から1を引くと言っています。だから、もし日が05-05-2016なら、私は月として04を使いたいです。シェル - 日付から整数を減算する

Month=`date +%m` 
Day=`date +%d` 

If [ $Day -lt 15 ] 
    then 
     Output_Month=$Month - 1 
fi 

私はそれらが2つの異なるフォーマット(日付と整数)であると仮定しているため、これは動作していないようです。月を減算するか、月を整数に変換するにはどうすればよいですか?

+0

あなたは[ShellCheck](http://shellcheck.net)が役に立つかもしれません。これは、 "i = $((i - 2))"などの算術演算には$((..))を使用し、スクリプトでは大文字と小文字が区別されます。 –

+0

[Unixシェルスクリプトでの日付演算]の重複の可能性があります(http://stackoverflow.com/questions/6467/date-arithmetic-in-unix-shell-scripts) – gattsbr

答えて

2

、あなただけ書くことができます。

if [ $Day -lt 15 ]; then 
    Output_Month=$(date -d "-1 month" +%m) 
fi 
+0

ありがとう!これは働いた – Buddy

0

letは、算術演算子の前後の空白について少し気にします。これは、あなたの答えを得るのを助ける必要があります。

#!/bin/ksh 

Month=`date +%m` 
Day=`date +%d` 

if [ $Day -lt 15 ] 
then 
    let Output_Month=$Month-1 
    echo $Output_Month 
else 
    let Output_Month=$Month+1 
    echo $Output_Month 
fi 

今日はので、私はelse節を移入するために持っていたすべての出力を得るために27日である15の目標期限を超える明らかであるので、私はテストのための制御ブロックを追加しました。

2

まず、入力したのはifIfではなく)です。 算術演算を行うには、$((..))構成を使用できます。だから、それはのように書くことができます。また

、私はMonthの計算に-を使用していることに注意してください。 date +%dの先頭に0と数字がついていて、先頭に数字があると、の8進数はです。したがって、Month08または09とするとエラーになります。 -を使用すると、先頭の0が抑制されます。 dateコマンドは非常にスマートである

0
if [ "$Day" -lt "15" ] # No harm double quoting $Day, note this is integer comparison 
    then 
     ((Output_Month = Month - 1)) #You may omit $ inside ((..)) construct 
fi