最近写shell脚本遇到一个奇怪的问题,用`date`获取不到时间,
从网上找了好久没找到准确的说法,最后废了老大功夫才找到原因
在这里mark一下,防止自己再犯
一、下面描述我遇到的错误
我开始的写法是这样
PATH=/redis/test
DATE=`date +%F`
LOGFILE=$PATH/$DATE.log
结果是DATE=`date +%F`这行报错,错误时command not find
首先我的写法没有问题,然后我随便写了一个测试脚本
只写一句话
echo `date +%F`
结果正常
我把原来shell中的关于日期的调换到第一句
DATE=`date +%F`
PATH=/redis/test
LOGFILE=$PATH/$DATE.log
结果正常了,但是我不知道为什么正常了
我随便在DATE=`date +%F`之前随便加了一句
TEST="HELLO WORLD"
DATE=`date +%F`
结果也是正常的
然后我将PATH=/redis/test
放到第一句,又出错了
看来是PATH这句话导致的问题,由于接触shell的时间比较短,所以对这些东西不是很理解
从网上查到PATH代表的是环境变量
代表脚本执行的路径
我们随便打开一个terminal窗口,输入echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
以上是我们在当前terminal窗口输入命令时,命令会在上面这些路径下执行,
而我们常用的命令的脚本文件基本都在以上几个路径下
我错误的将PATH作为一个一般变量来使用,并将其赋值一个自定义的路径
这必将导致大部分的命令不可用
比如`date`在我自定义的PATH下是没有可执行文件的,所以会有command not find的错误
综上,PATH是系统环境变量的路径,不可随便更改,可以在后面添加自己的路径,
使用:拼接路径即可
date的有关环境变量的路径是/bin,PATH可以不设置,但不能乱设置
二、下记录下关于shell里日期显示的有关细节
1.在shell里date需要用``括起来,如`date`,表示引用才能正常显示日期,或者用$(date)这种形式也可以
DATE=`date`
DATE=$(date)
2.shell里有关日期格式的控制,同样要放在``里或$()里
如显示2018-01-01可以表示为如下形式
DATE=`date +%F`
DATE=$(date +%F)
DATE=`date +%Y-%m-%d`
DATE=$(date +%Y-%m-%d)
3.关于日期控制的详细列表如下
4.常用的格式控制如下
date +%F 2018-01-01
date +%T 12:00:00
若要显示2018-01-01 12:00:00,可以表示如下
date "+%F %T"
或者
date "+%Y-%m-%d %H:%M:%S"
这里之所以"”号是因为中间加了个空格,而加空格会将它们视为两个参数,所以样式控制需要用""引起来
以上的使用也建议使用""将格式引起来