![将一位数月份更改为两位数月份](https://linux22.com/image/1336057/%E5%B0%86%E4%B8%80%E4%BD%8D%E6%95%B0%E6%9C%88%E4%BB%BD%E6%9B%B4%E6%94%B9%E4%B8%BA%E4%B8%A4%E4%BD%8D%E6%95%B0%E6%9C%88%E4%BB%BD.png)
我有这个脚本:
day=`date +%d`
month=`date +%m`
year=`date +%Y`
lmonth=`expr $month - 1`
if test "$lmonth" = "0"
then lmonth=12
year=`expr $year - 1`
fi
我调用时的结果$lmonth/$year
是9/2012
如何让它输出09/2012
?
当月份为 10、11 或 12 时,我不希望它分别是 010、011 或 012。
当我调用带有句点的表或文件时,我想放入 $year 和 $lmonth。例如,table_extra201209。
如何为 1(一月)至 9(九月)的月份添加额外的零?
我尝试了这里的所有答案,但是嗯...我忘了提一些事情...当我调用带有句点的表或文件时,我想放入 $year 和 $lmonth,例如 table_extra201209,如何将其放在带有“0”的“9”之前...?再次感谢 :)
答案1
$ month=5; year=2012
$ perl -e 'printf"%02d/%04d\n",@ARGV' $month $year
05/2012
我不记得 Bash 是否有 printf 或 sprintf 函数,它可能具有同等有用的东西。
是的,bash 可以
$ month=5
$ year=2012
$ printf "%02d/%04d\n" $month $year
05/2012
或者,如果您需要变量中的结果,请使用-v
$ printf -v expiry "%02d/%04d" $month $year
$ echo $expiry
05/2012
此外,你不需要调用date
那么多次
$ d=$(date '+%Y %m %d %H %M %S')
$ a=( $d )
$ echo ${a[0]}
2012
$ echo ${a[1]}
10
$ echo ${a[2]}
30
$ echo ${a[3]}
09
$ echo ${a[4]}
59
$ echo ${a[5]}
31
最后,date
它本身往往能给你你想要的东西
$ minsec=$(date "+%M/%S")
$ echo $minsec
03/27
您可能知道这一点,但如果您减少月份,则必须允许 1 - 1 = 12,并减少年份并检查日期数是否在范围内(不是 2 月 31 日,不是 2 月 29 日,除非是闰年,允许在不同地区不同日期更改日历)。通常,最好使用具有良好日期处理模块的脚本语言。
答案2
您可以测试数字是否小于 10,并且只有当数字小于 10 时才0
在数字前面添加一个。因此,尝试将以下内容附加到您的脚本中:
[ $lmonth -lt 10 ] && lmonth=0$lmonth