1. 程式人生 > >關於shell裡無法獲取時間的問題

關於shell裡無法獲取時間的問題

最近寫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"

這裡之所以"”號是因為中間加了個空格,而加空格會將它們視為兩個引數,所以樣式控制需要用""引起來

以上的使用也建議使用""將格式引起來