好的,所以我需要从一个不错的linux&翻译脚本。 bsh配置为hp-ux中的ksh。每个命令都需要不同的语法,我想要自杀。但是,让我们跳过咆哮。
这是我脚本的一部分
anterior=`date +"%Y%0m" -d '1 month ago'`
我基本上需要以201002的格式获取过去的日期。不用担心,在新环境中,%0m表示“没有零”,而实际上在另一个中它意味着“是的,请把它放在零上”我的字符串“。它甚至不接受“1个月前”。我已经阅读了HP-UX的人员日期,看起来你不能用它进行日期算术。
我一直在寻找一段时间,但我找到的都是冗长的解决方案。我不太明白,像添加日期这样的典型管理任务需要大惊小怪。难道没有办法将我的单行转换为,我不知道,另一个?来吧,我已经看到了使用bc的建议解决方案,在脚本上有三十多行和魔术数字。最简单的解决方案似乎使用perl ...但我不知道如何修改它们,因为它们非常神秘。
谢谢!
答案 0 :(得分:1)
因为你的年份和月份很简单,你总是可以制作自己的日期数组。例如
year=`date +%Y`
month=`date +%m`
anterior=`awk -vm="$month" -vyr="$year" 'BEGIN{
mth["01"]="12"; mth["02"]="01"
mth["03"]="02"; mth["04"]="03"
mth["05"]="04"; mth["06"]="05"
mth["07"]="06"; mth["08"]="07"
mth["09"]="08"; mth["10"]="09"
mth["11"]="10"; mth["12"]="11"
if ( m=="01") { yr-- }
print yr mth[m]
}' `
echo $anterior
但请注意,它只是简单而且仅用于生产前1个月。 您也可以尝试使用ksh脚本here
答案 1 :(得分:1)
我知道这是一个老话题,但我有同样的问题,这就是解决方案
创建一个shell脚本,例如last_month.sh
year=`date +%Y`
month=`date +%m`
month=`expr $month - 1`
if [ $month -eq 0 ]; then
month=12
year=`expr $year - 1`
fi
if [ $month -lt 10 ] then
month="0$month"
fi
echo $year$month
exit 0
然后你可以调用脚本并分配给变量
./last_month.sh | read anterior
echo $anterior
此处返回上个月,但您可以轻松更改为接受参数
答案 2 :(得分:0)
这是我遇到的解决方案(警告:我在客户端使用严格的安全措施,所以我甚至没有办法测试它,我需要将我的脚本发送到系统管理员来测试它们并通过他调试。)
typeset -Z2 lastmonth
month=`date +%m`
year=`date +%Y`
lastmonth=$((month-1))
if (( month == 1));then
lastmonth=12
year=$((year-1))
fi
无论如何,我觉得没有更简单的方法可以做到这一点。