關於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"
這裡之所以"”號是因為中間加了個空格,而加空格會將它們視為兩個引數,所以樣式控制需要用""引起來
以上的使用也建議使用""將格式引起來