Shell脚本linux变量转日期声明的日期问题,怎么解决

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号的日期再减):


  使用一个已经定义的linux变量转日期只要在linux变量转日期名前面加美元符号 linux变量转日期名外面的花括号是可选的,加不加都行加花括号是为了帮助解释器识别linux变量转日期的邊界,比如下面这种情况: 如果不给skilllinux变量转日期加花括号写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个linux变量转日期(其值为空)代码执行结果就不是峩们期望的样子了。 推荐给所有linux变量转日期加上花括号这是个好的编程习惯。 已定义的linux变量转日期可以被重新定义 

四、在shell脚本中的linux变量转日期种类

在 shell 中linux变量转日期分为环境级linux变量转日期、用户级linux变量转日期、系统级linux变量转日期这三种

环境级linux变量转日期只在当前 shell 中生效, shell 关閉linux变量转日期丢失 用户级linux变量转日期写在用户的骨文件(.bash_profile)中,只针对当前用户生效,切换用户后就不再生效 

五、字符的转译及linux变量转日期的声明

弱引用,批量转译“”中出现的字符
强引用批量转译‘’中出现的字符
两者的区别在于,“”不能转译“",“`”“!”,“$"


脚本后所跟嘚字符串的个数
脚本后跟的所有字符串模式为“1 2 3 ”
模式后跟的所有字符串,模式为“1”“2”“3”


我要回帖

更多关于 什么是时间变量 的文章

 

随机推荐