我想从日期中减去整数。基本上我想说如果是在本月15号之前,那么从月份中减去1。所以如果一天是05-05-2016,我想用04作为月份。外壳 - 从日期中减去整数
Month=`date +%m`
Day=`date +%d`
If [ $Day -lt 15 ]
then
Output_Month=$Month - 1
fi
这似乎没有工作,因为我认为它们有两种不同的格式(日期和整数)。我怎样才能减去一个月或将月份转换为整数?
我想从日期中减去整数。基本上我想说如果是在本月15号之前,那么从月份中减去1。所以如果一天是05-05-2016,我想用04作为月份。外壳 - 从日期中减去整数
Month=`date +%m`
Day=`date +%d`
If [ $Day -lt 15 ]
then
Output_Month=$Month - 1
fi
这似乎没有工作,因为我认为它们有两种不同的格式(日期和整数)。我怎样才能减去一个月或将月份转换为整数?
date命令是很聪明的,你可以这样写:
if [ $Day -lt 15 ]; then
Output_Month=$(date -d "-1 month" +%m)
fi
谢谢!这工作 – Buddy
让我们对算术运算符之前和之后的空格有点挑剔。这应该有助于你得到你的答案:
#!/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子句。
首先,你有错字:这是if
(小写),而不是If
。 做算术,你可以使用$((..))
构造。因此,它可以写成:
另外,请注意我在计算Month
使用的-
。这是因为date +%d
打印与领先0
和任何数字与领先是八进制号码。所以,如果您的Month
为08
或09
那么这将是一个错误。 使用-
可抑制领先的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
您可能会发现[ShellCheck(http://shellcheck.net)是有用的。它自动建议“使用$((...))进行算术运算,例如i = $((i - 2))”和“Scripts区分大小写,使用'if'而不是'If'。 –
[Unix shell脚本中的Date算术]的可能重复(http://stackoverflow.com/questions/6467/date-arithmetic-in-unix-shell-scripts) – gattsbr