shell中的日期问题要彻底弄清楚。寫一个测试脚本test.sh
首先是单引号 双引号的问题
单引号将linux变量转日期和特殊字符括起来将失去原有的意义,而只作为普通字符解释双引号括起来后特殊字符将保持原有的意义,其余的作为普通字符解释
测试结果为 两天后:2017年 10月 12日 星期四 10:43:22 CST (如果不加+%Y%m%d,则会显示两天后此时此刻嘚全部日期信息包括时分秒)
(这里说明day是特殊字符,用双引号括起来也保持其特殊意义)
测试结果为 两天前: (这里说明ago是特殊字符囿特殊意义,用双引号括起来也保持其特殊意义)
始终都要保持外面有个单引号 这样啊 混蛋!
普及完基础知识,来电高端点的
如果现在的時间是那 1 day ago这种写法还行得通吗?
正确的做法应该是在脚本一开始就取得当前的时间戳, 然后, 在整个脚本中, 始终使用这个时间戳来做为当前時间, 这才能保证, 在整个脚本的运行期间, 你得到的结果,都是你想要的, 而不管你是在午夜,还是大早上的运行你的脚本. 关于时间的计算, 最好是以"秒"为最小单位, 这样, 不仅可以保证你得到精确的时间, 还能保证你躲过什么1号, 或者年底, 或者闰年,
之类的麻烦.我今天实测的
在大部分情况下这个命令运行正确但是有些情况下这个命令会出现问题,比如当前日期是3月30、3月31、5月31等的时候上面的命令得到的结果还是当月,而不是我們期望的上月
这个问题是怎么产生的呢?比如当当前日期是5月31时-1 month它只是将月份-1,就得到4月31但是实际上4月只有30天,所以4月31就被转为5月1號导致得到的结果还是当前月份。
为了解决这个问题可以这么写(先转到当月1号的日期再减):