1. 程式人生 > >linux之shell:利用日期進行檔案建立

linux之shell:利用日期進行檔案建立

sh03.sh 


#!/bin/bash
#program
#  program creates three files,which named by user's input
#  and date command
#History:
#2013/12/26 yusiyu First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


#1.讓使用者輸入檔名,並取得fileuser這個變數;
echo -e "I will use 'touch' command to create 3 files " #純粹的顯示資訊
read -p "please input your filename :" fileuser #提示使用者輸入


#2.為了避免使用者隨意按【Enter】,利用變數功能分析檔名是否有設定
filename=${fileuser:-"filename"} #開始判斷有否配置檔名


#3.開始利用date命令來取得所需檔名了
date1=$(date --date='2 days ago' +%Y%m%d) #前兩天的日期
date2=$(date --date='1 days ago' +%Y%m%d) #前一天的日期
date3=$(date +%Y%m%d) #今天的日期
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}


#4.建立檔名。
touch "$file1"
touch "$file2"
touch "$file3"

在這裡面,有兩個是比較不理解的



a. filename=${fileuser:-"filename"} # 開始判斷有否配置檔名


這個是shell進行變數判斷的方式,如下表


變數配置方式str 沒有配置str 為空字串str 已配置非為空字串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}var=exprvar=exprvar=$str
是第二種情況的形式,下面直接把這條語句拆分分二種情況來看


1)當fileuser沒有配置或者為空字串的時候,filename=filename,因為filename本身是一個變數,所以使用"filename"或者'filename',這就是單純的字串了。最終執行的結果,就是建立了三個filename20130908類似的檔案


2)當fileuser有賦值的時候,filename=$fileuser,這種情況下建立 的是wang20130908的檔案,這個wang是輸入的fileuser.


b. date1=$(date --date='2 days ago' +%Y%m%d) 


這個可以使用man date來檢視date的引數,


date --date='2 days ago' 是顯示2天前的時候,這個時候的顯示還是類似這樣子的顯示格式


[root@localhost scripts]# date --date='2 days ago'


Tue Sep 3 15:16:40 CST 2013


date +%Y%m%d是把顯示的格式,在+號前是有個空格的,不能少


[root@localhost scripts]# date +%Y%m%d
20130905