如何在SHELL获取当天时间的月份和上个月的月份还有下个月的月份

如何在SHELL获取当天时间的月份和上个月的月份还有下个月的月份,第1张

上个月比较好写,减去当前日期,再减1天

# date -d "-1 days" -d "-`date +%d` days" +%m

09

------------------------------------------------------------

下个月就不好写咯

date里的1 month有问题

比如今天是10月31日

# date -d "1 month" +%m

12

变成12月了

# date +%m

10

获取当前月份

那么下个月只好写代码了:

now_month=`date +%m`

if [ $now_month -ne 12 ];then

echo nextmonth is `expr $now_month + 1`

else

echo nextmonth is 01

fi

24小时,就是相差一天,所以变化的只有天数。

我这里提供一个笨方法:

用date获取当前日期和时间,格式化成你的文件命名格式,用下面的字符串截取方法获得天数:

${varible:n1:n2}:截取变量varible从n1到n2之间的字符串

天数减1后,重新组织成新的字符串。

用循环比较 ls 出来的文件名与这个字符串。

代码试过后再放上来。

1、date +%w

%w day of week (06); 0 is Sunday

2、如果星期2-6,上一个工作日肯定就是

t1=`date -d yesterday`

或者

t2=`date -d -1day`

3、如果星期天,上一个工作日肯定就是

t3=`date -d -2day`

4、如果星期1,上一个工作日肯定就是

t4=`date -d -3day`

5、法定节假日根据实际情况算吧

6、实例

#!/bin/sh

week=`date +%w`

case "$week" in

0)

last_work_day=`date -d -2day`

;;

1)

last_work_day=`date -d -3day`

;;

)

last_work_day=`date -d -1day`

;;

esac

echo $last_work_day

shell 获取上月最后一天,参考代码如下:

#!/bin/sh

function get_last_day(){

year=`expr substr $1 1 4`

month=`expr substr $1 5 2`

if [ $month = '01' ] || [ $month = '03' ] || [ $month = '05' ] || [ $month = '07' ] || [ $month = '08' ] || [ $month = '10' ] || [ $month = '12' ] ;then

echo $year''$month''31

elif [ $month = '02' ] ; then

if [ `expr $year % 400` = 0 ] ; then

echo $year''$month''29

elif [ `expr $year % 4` = 0 ] && [ `expr $year % 100` != 0 ] ; then

echo $year''$month''29

else

echo $year''$month''28

fi

else

echo $year''$month''30

fi

}

注意几点:

1) if语句的[]里的写法是所有单词和符号之间都留空格,if[a=1]是错的,应该是if [ a = 1 ]

2) shell中if里面如果要多条件判断,if [ a = 1 || a = 2]这样写是错的,应该是if [ a = 1 ] || [ a = 2 ]

3) echo $year''$month''29 这里''不能省略,不然只会输出年字段。

shell编程:

如果你为每个文件按日期命名的格式都一致的话,那么”ls -l“命令列出的文件列表就是默认按文件名称(日期先后)排序的。那么最后一个就是最新的,文件名可以用以下方式获取。

filename=‘ls -l | tail -n 1 | awk '{print $9}'’

转移文件用 mv 命令即可

逐条解释:

ls -lt /dirname/

列出此目录下的所有文件并按照时间先后排序

grep filename

过滤出包含关键字的文件

head -n 1

查看排名第一的文件

awk '{print $9}'

打印出第九字段,此处为文件名

#获取7天前日期

v_acct_month='20170603'

newdata=`date -d "$v_acct_month 7 day ago" +"%Y%m%d"`

echo $newdata

以上就是关于如何在SHELL获取当天时间的月份和上个月的月份还有下个月的月份全部的内容,包括:如何在SHELL获取当天时间的月份和上个月的月份还有下个月的月份、LINUX shell 如何获取当前时间之前24小时的所有文件,文件都是以时间命名的!、linux 下 shell 脚本取上一工作日日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9604607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存