因为有个Bash脚本,想根据用户给的日期参数(yyyymmdd格式),得到这个日期的前一天的表示。首先想到的就是date命令,网上搜了一大把,其实多数都是互相抄的,date基本用法原本就会,不能用来解决我的问题。
先说不用date命令的方法:
不嫌麻烦就多用几个判断,解决每月开头、每年开头减去一天的问题,最麻烦的是倒推到上个月最后一天,这一天究竟是28、29还是30、31,还得写个函数。
再说date的基本用法:
date +%Y%m%d 这是格式化输出,其他语言多数叫做strftime()
date -d "2 days ago" +%s -d可以输入一个日期,不过大多是相对于现在时间,+%s是输出时间戳。
date -d "2010-12-06" +%F -d可以接受ISO格式yyyy-mm-ddTHH:MM:SSZ,也可以接受日期的一些英文格式(月份英文缩写) %F就是%Y%m%d
接着搜到的我不知道的格式用法,当然对我的问题没有帮助:
格式字符中加-可以去掉前面的0,加_把前面的0变成一个空格,举例:date +%-Y%-m%-d 是 2010-12-6 (6前面的0去掉了) date +%_Y%_m%_d 是 2010-12- 6 (6前面有一个空格)
最后是谜底,date可以接受的特殊-d参数:
date -d "1970-01-01 UTC 1291622912 seconds" +%s 在前面的日期上面加上这么多秒作为输入。在我的脚本中这么用的:
date=$1 #从脚本的第一个参数得到输入日期(格式yyyy-mm-dd或者yyyymmdd)
datets=`date -d "$1" +%s` #求出这个日期的时间戳,注意两边的是反引号,Tab键上面那个,下同
yesterts=`expr $datets - 86400` #往前推一天
yesterday=`date -d "1970-01-01 UTC $yesterts seconds" +%Y%m%d` #把它变做输出
我从那里知道的,既不是date的help命令,也不是man文档。而是一个网页 [网址找不着了]
分享到:
相关推荐
2. date命令:用于显示和设置系统的日期和时间。例如,“date '+%Y-%m-%d'”将输出格式化的日期。 3. reboot和poweroff命令:分别用于重启系统和关闭系统。这两个命令需要root权限才能执行。 4. wget命令:一个...
### Linux系统管理命令详解 #### adduser - **功能说明**:用于新增用户账户。 - **语法**:`adduser [选项] 用户名` - **补充说明**:在不同的Linux发行版中,`adduser`命令的具体实现方式有所不同。例如,在...
### Linux操作系统与应用技术教案-熟悉shell命令的使用方法 #### 知识点解析 **一、Shell概念与版本** 1. **Shell简介** - **定义与作用**:Shell是一种命令行解释器,它是用户与Linux操作系统之间的重要桥梁。...
安装步骤通常包括使用`rpm`命令,例如`sudo rpm -ivh jdk-8u271-linux-x64.rpm`。安装完成后,环境变量如JAVA_HOME、PATH等也需要进行相应的配置,以便系统能够正确识别和使用新安装的JDK。 总的来说,"jdk-8u271-...
在Linux环境下,安装JDK通常涉及解压文件到合适的位置(如`/usr/lib/jvm`),然后设置环境变量`JAVA_HOME`指向JDK的安装路径,并更新`PATH`以包含`bin`目录,以便在任何地方都能运行Java命令。 总之,`jdk-8u121-...
大多数公司都会维护测试数据库,并通过mysqldump与Linux的crontab定时任务相结合,定期进行数据库备份。然而,如果忽视了对备份成功的监控,可能会导致在需要时无法恢复数据,从而引发严重问题。 ### 实验步骤 1. ...
通过 Bash Shell 编程,用户可以自动化执行一系列命令或任务,极大地提高了工作效率。本文将详细介绍 Bash Shell 编程的基本概念和技术要点,帮助读者快速掌握这一实用技能。 #### 二、非常简单的脚本 ##### 2.1 ...
结合Linux的crontab定时任务,我们可以设定周期性地执行数据库备份。 在实际操作中,我们首先创建一个名为test的测试数据库,并在其中创建一个test表。这样可以为我们后续的监控提供一个实际的备份对象。创建数据库...