『壹』 shell腳本實現校驗時間格式
#!/bin/bash
read -p "please enter the date: " date
if [[ $date =~ "[0-9]{2}/[0-9]{2}/[0-9]{4}" ]]
then
echo "畢凳today is:${date:0:2} month is:${date:3:2} year is:${date:6:4}"
else
echo "wrong date"
fi
我沒有對日期范手拍旅圍做校驗,你可以自賀團己加一下。
『貳』 求助大神:編寫一個shell 腳本 ,移動某個文件夾下的文件到各自的日期組成的目錄下
1、主要是從文件名截取出日期,如果固定了位數
2、可以先缺則按_分割取第二段
echo $file|awk -F\_ '{print $2}'
3、然後再取第4位後面攔扮仿的8位
4、簡纖例如:vi a.sh
#!/bin/sh
for file in `ls *.jpg`;do
echo $file
datedir=$(echo $file|awk -F\_ '{print $2}'|awk '{print substr($1,4,8)}')
mkdir $datedir
/bin/mv $file $datedir
done
『叄』 編寫shell腳本顯示當前日期和時間,path環境變數的值,當前用戶名稱和當前所在的路徑
1、用date 和echo就可以了。
2、實例:
#!/bin/sh
echo The date is:
date +%F
echo The time is:
date +%T
echo The PATH is:
echo $PATH
echo who r U:
whoami;
#echo $USER
echo the pwd:
echo $PWD
『肆』 shell腳本兩個日期值比較
這種標准格式的時期源搭應該是無法比較昌裂判的,你應該給這個時間轉化為耐改linux的絕對時間然後比較大小,給你share一個我之前寫的一個計算一個命令執行時間的的腳本,你一看就明白了。
#########################
BEGIN=`date +"%Y-%m-%d %H:%M:%S"`
bkup_system|tee -a bkup_time.log
END=`date +"%Y-%m-%d %H:%M:%S"`
print $BEGIN begin back up|tee -a bkup_time.log
print $END end buck up|tee -a bkup_time.log
#時間轉化
Sys_data_begin=`date -d "$BEGIN" +%s`
Sys_data_end=`date -d "$END" +%s`
#計算間隔,可以根據間隔的正負來比較你時間的大小
INTER=`expr $Sys_data_end - $Sys_data_begin`
echo Total time do back up is $INTER s|tee -a bkup_time.log
########################
『伍』 關於SHELL腳本中日期大小的比較
1、既然按照當前日期,創建的,那麼應該可以根據系統給的時間戳晌巧為屬性,緩謹遲完成操作即可。
2、根據你的說法山掉7天譴的文件夾,那麼應該是7天前建立的擾李文件夾進行刪掉所以用ctime。
find ./ -ctime +7 -exec rm -rf {} \;
『陸』 Shell之date命令用法
date命令在shell腳本中用處很大,比如要在腳本中標記一個日誌或者針對某個文件做更改,就可以使用date給它做一些裝飾,比如每天備份mysql,最終生成一個.sql的文件,那麼我們就可以針對這個文件加一個日期的標記,這樣就可以很清晰的知道我們備份的這個文件是哪一天生成的或者周幾生成的,等到下一個對應的周幾,此時備份的sql文件就會自動地將上一個周同一天的備份文件覆蓋掉,這樣就不用刪除文件
1、date
# date //顯示系統當前日期和時間
上面是date命令默認的輸出格式,我們也可以將輸出格式顯示為英文
# LANG=en 姿山 //將系統環境變數LANG設置為英文格式
# date //然後執行date命令,結果如下
2、年月日
我們標記日期的方式一般的格式是:20180321 、 180321
# date +%Y //year,輸出4位數年
# date +%y //輸出2位數的年
# date +%m //m表示month,輸出的結果是月份
# date +%d //d表示day,日
# date +%D //D表示特殊格式的日期表示方法,如下當前日期為2018年3月21日
我們還可以將上面的年月日組合在一起輸出
# date +%Y%m%d //輸出年月日
# date +%F //輸出的年月日會用連字元隔開
3、時分秒
# date +%H //H表示hour小時
# date +%M //M表示minute分鍾
# date +%S //S表示second秒
# date +%s //輸出結果是一個時間戳,表示距離1970年1月1日0時0分過橘正去多少秒
# date +%T //以下面格式輸出時分秒
# date +%H:%M:%S //效果跟上條命令一樣
4、星期
# date +%w 圓冊悔 //輸出結果為星期幾,比如下圖表示當前系統時間是星期三
# date +%W //表示當前為今年的第幾周,比如我這里為今年的第12周
5、日歷
# cal //展示日歷
6、從當前時間往前或往後推算
使用場景:比如我們切割日誌在今天的0時0分,那麼被切割出去的日誌應該以昨天的日期來標記,因此需要倒推一天
# date -d "-1day" //當前系統時間為3月21日,輸出結果為3月20日
# date -d "-1day" +%F
# date -d "-1 month" +%F //上個月
# date -d "-1 year" +%F //表示去年,year後面也可以加上s,day和month後也可以加上s
其他的時分秒也諸如此類
7、時間戳
# date +%s //獲取時間戳
# date -d @1521563928 //將時間戳換算成日期
# date +%s -d "2017-03-21 00:38:48" //將日期換算成時間戳
『柒』 shell腳本指定日期減去一天如何寫
如果只減去一天的話,直接寫就可以了。塌做帶
#date-d"yesterday20150401"+%Y%m%d
如果要減去幾天,還可以這樣寫,胡基如果用負數是往前數,
#date-d"10dayago2015-04-01"團蘆+%Y-%m-%d
『捌』 Linux下用shell獲取指定文件的最後修改時間並與系統時間比對,如果相差時間超過3分鍾則執行另一個腳本
使用date命令加上合適的時間格式化字元串(+%s),會顯示當前時間(或-d參數指定的時間)與1970-01-01 00:00:00相差的秒數(詳細可以參考date的man手冊)
所以基本想法就是使用date命令分別獲取當前時間與文件修改時間的秒數,然後洞喊看這2個秒數之間是否有相差180秒以上。
獲取當前時間比較簡單,直接date +%s就ok了
下面看看如何獲取文件時間
使用stat 命令後面跟一個文件名可以獲取文件的狀態,包括文件猛悄修改時間。其中文件修改時間會單獨一行顯示,格式如下:Modify: 2013-02-21 17:58:05.404876407 +0800 (具體的精度可能系統不同略微有些差別,但大致格式是這樣)
所以我們可以stat myfilename | grep Modify來獲取文件的修改時間的信息,然後通過awk分別獲取時間的日期和時間段
stat myfilename | grep Modify | awk '{print $2}' #這句獲取了日期段,即上面例子裡面的2013-02-21
stat myfilename | grep Modify | awk '{split($3,var,".");print var[1]}' #這句獲取了時間段,即上面例子裡面的17:58:05,具體關於awk的使用可以參考awk的使用手冊
那麼現在可以獲取文件修改時間與1970-01-01 00:00:00相差的描述了,就是date -d "$file_date $file_time" +%s
那麼這個時枝顫渣間與當前時間想減的結果與180相比就可以知道是否滿足條件了,滿足條件的話就可以執行相應的命令。
參考代碼如下:
current_datetime=`date +%s`
filedate=`stat tt.txt | grep Modify | awk '{print $2}'`
filetime=`stat tt.txt | grep Modify | awk '{split($3,var,".");print var[1]}'`
file_datetime=`date -d "$filedate $filetime" +%s
timedelta=`expr $current_datetime - $file_datetime`
if [ "$timedelta" -gt "180" ];then
echo "match condition"
fi
『玖』 如何正確在Linux Shell腳本中定義一個時間變數
1、創建腳本 test.sh,並入截圖內容。