我想从日期中减去一个整数。基本上我想说的是,如果它是在本月15日之前,那么从月中减去1。因此,如果这一天是05-05-2016我想用04作为月份。
Month=`date +%m`
Day=`date +%d`
If [ $Day -lt 15 ]
then
Output_Month=$Month - 1
fi
这似乎不起作用,因为我假设它们有两种不同的格式(日期和整数)。如何减去一个月或将月份转换为整数?
答案 0 :(得分:2)
首先,你有错字:它是if
(小写),而不是If
。
要进行算术运算,可以使用$((..))
构造。所以,它可以写成:
Month=`date +%-m`
Day=`date +%d`
if [ $Day -lt 15 ]
then
Output_Month=$((Month - 1))
fi
另请注意,我在计算-
时使用了Month
。这是因为date +%d
打印带有前导0
,带前导的任何数字都是八进制数字。因此,如果Month
为08
或09
,那么这将是一个错误。
使用-
会抑制前导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