关于shell里无法获取时间的问题

时间:2024-03-19 11:12:37

最近写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.关于日期控制的详细列表如下

关于shell里无法获取时间的问题
关于shell里无法获取时间的问题

关于shell里无法获取时间的问题

关于shell里无法获取时间的问题

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"

这里之所以"”号是因为中间加了个空格,而加空格会将它们视为两个参数,所以样式控制需要用""引起来

以上的使用也建议使用""将格式引起来