shell 中如何获取前一天的日期字符串

shell 中如何获取前一天的日期字符串,第1张

#判断当前的年份是否为闰年

sleapyear()

{

r4=`expr $1 % 4`

r100=`expr $1 % 100`

r400=`expr $1 % 400`

if [ r4 -eq 0 and r100 -ne 0 ]; then

return 1

elif [ r400 -eq 0 ]

then

return 1

else

return 0

fi

}

#获取前一天的日期,在此函数中会调用判断闰年的函数

yesterday()

{

day=`echo "$3 - 1"|bc`

month=$2

year=$1

if [ $day -eq 0 ]; then

month=`echo "$2 - 1"|bc`

isleapyear $1

leap=$

case $month in

0|1|3|5|7|8|10|12 )

day=31;;

4|6|9|11 )

day=30;;

2 )

if [ $leap -eq 1 ]; then

day=29

else

day=28

fi;

esac

if [ $month -eq 0 ]; then

month=12

year=`echo "$1 - 1"|bc`

fi

fi

date=`printf "%s%02s%02s" $year $month $day`

}

#设置传入yesterday函数的参数

set `date +%C%y\ %m\ %d`; YEAR=$1; MONTH=$2; DAY=$3

#调用yesterday,传入三个参数,分别为当前年,当前月,当前日

yesterday $YEAR $MONTH $DAY

echo $date

通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹

代码如下:

ls_date=`date +%Y%m%d`

mkdir ${ls_date}

上面两句代码虽然简单

但是在应用中比较实用

获取日期注意事项:date +%Y%m%d 这个字符串是被英文状态下的ESC下面那个键

获取变量注意事项:必须有$与{变量名}组成

在shell中,可以通过命令行工具来获取系统的内存使用情况,比如使用free、top、ps等命令,但是这些是手动获取,不能实现定时调度。

定时调度需要使用定时任务工具,比如cron或者at等,这些工具可以在指定的时间点或者时间间隔内自动执行特定的命令或脚本。但是,这些定时任务工具只能帮助你在指定的时间点或间隔内执行命令或脚本,它本身并不能获取系统的内存使用情况。

如果需要实现定时获取系统的内存使用情况,可以编写一个脚本,定时执行这个脚本,然后将结果输出到一个文件中,再通过其他工具来处理这个文件,比如使用awk、sed等命令来提取需要的信息。

需要注意的是,在编写脚本时需要特别注意,因为获取系统的内存使用情况需要特权级别,普通用户无法直接获取,需要使用sudo或者root权限才能获取。同时,定时任务的执行时间需要合理,不能影响系统的正常运行。

  在linux Shell中并没有毫秒级的时间单位,只有秒和纳秒。所以在shell中可以获取秒级时间戳,但是不能获取毫秒级时间戳。

  有时候确实需要毫秒级时间戳,于是使用秒和纳秒的时间戳来组合一下。通常我们看到的都是如下写法:

这个方法你快速地反复去执行,大概五六次就会出现一次报错 value too great for base 。

   date '+%N' 获取纳秒时获取的是一个字符串,而不是数字,且为了保证九位数,前面会补0,例如 073526864 。遇到首字母为0的字符串,shell正常的除法不能自动将其转换为数字(是的,虽然你看不到有数据类型,但是他是分数字和字符串类型的,并且使用的时候一般都隐含了类型转换,lua也有这个问题,被坑过无数次)。

  使用 expr命令 。

需要注意的是乘法符号 需要写成 \ ,不然无法识别为乘法符号。

date命令在shell脚本中用处很大,比如要在脚本中标记一个日志或者针对某个文件做更改,就可以使用date给它做一些装饰,比如每天备份mysql,最终生成一个sql的文件,那么我们就可以针对这个文件加一个日期的标记,这样就可以很清晰的知道我们备份的这个文件是哪一天生成的或者周几生成的,等到下一个对应的周几,此时备份的sql文件就会自动地将上一个周同一天的备份文件覆盖掉,这样就不用删除文件

1、date

    # date      //显示系统当前日期和时间

    上面是date命令默认的输出格式,我们也可以将输出格式显示为英文

        # LANG=en     //将系统环境变量LANG设置为英文格式

        # date             //然后执行date命令,结果如下

2、年月日

    我们标记日期的方式一般的格式是:20180321  、 180321

    # date +%Y     //year,输出4位数年

    # date +%y     //输出2位数的年

    # date +%m   //m表示month,输出的结果是月份

    # date +%d   //d表示day,日

    # date +%D   //D表示特殊格式的日期表示方法,如下当前日期为2018年3月21日

我们还可以将上面的年月日组合在一起输出

    # date +%Y%m%d   //输出年月日

    # date +%F   //输出的年月日会用连字符隔开

3、时分秒

    # date +%H     //H表示hour小时

     # date +%M   //M表示minute分钟

    # date +%S    //S表示second秒

    # date +%s    //输出结果是一个时间戳,表示距离1970年1月1日0时0分过去多少秒

    # date +%T    //以下面格式输出时分秒

    # date +%H:%M:%S   //效果跟上条命令一样

4、星期

    # date +%w    //输出结果为星期几,比如下图表示当前系统时间是星期三

    # date +%W   //表示当前为今年的第几周,比如我这里为今年的第12周

5、日历

    # cal     //展示日历

6、从当前时间往前或往后推算

    使用场景:比如我们切割日志在今天的0时0分,那么被切割出去的日志应该以昨天的日期来标记,因此需要倒推一天

    # date -d "-1day"   //当前系统时间为3月21日,输出结果为3月20日

    # date -d "-1day" +%F  

    # date -d "-1 month" +%F  //上个月

    # date -d "-1 year" +%F   //表示去年,year后面也可以加上s,day和month后也可以加上s

    其他的时分秒也诸如此类

7、时间戳

    # date +%s          //获取时间戳

    # date -d @1521563928         //将时间戳换算成日期

    # date +%s -d "2017-03-21 00:38:48"     //将日期换算成时间戳

以上就是关于shell 中如何获取前一天的日期字符串全部的内容,包括:shell 中如何获取前一天的日期字符串、用shell命令取得文件生成时间、shell手动能获取使用内存大小,定时调度不行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存