Shell - 从日期中减去一个整数

时间:2016-07-27 16:34:21

标签: linux bash shell

我想从日期中减去一个整数。基本上我想说的是,如果它是在本月15日之前,那么从月中减去1。因此,如果这一天是05-05-2016我想用04作为月份。

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

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

这似乎不起作用,因为我假设它们有两种不同的格式(日期和整数)。如何减去一个月或将月份转换为整数?

4 个答案:

答案 0 :(得分:2)

首先,你有错字:它是if(小写),而不是If。 要进行算术运算,可以使用$((..))构造。所以,它可以写成:

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

if [ $Day -lt 15 ]
    then
        Output_Month=$((Month - 1))
fi

另请注意,我在计算-时使用了Month。这是因为date +%d打印带有前导0,带前导的任何数字都是八进制数字。因此,如果Month0809,那么这将是一个错误。 使用-会抑制前导0

答案 1 :(得分:2)

date命令很聪明,你可以写:

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

答案 2 :(得分:0)

让算术运算符前后的空格有点挑剔。这应该可以帮助您得到答案:

#!/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

我添加了用于测试的控制块,因为今天显然高于目标日期15.这是第27次所以要获得任何输出我必须填充else子句。

答案 3 :(得分: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