shell腳本實踐2:自定義rm命令

linux系統的rm命令太危險,一不小心就會刪除掉系統文件。 寫一個shell腳本來替換系統的rm命令,要求當刪除一個文件或者目錄時,都要做一個備份,然後再刪除。
1. 簡單的實現:
假設有一個大的分區/data/,每次刪除文件或者目錄之前,都要先在/data/下面創建一個隱藏目錄,以日期/時間命名,比如/data/.201703271012/,然後把所有刪除的文件同步到該目錄下面,可以使用rsync -R 把文件路徑一同同步,示例:

#!/bin/bash
filename=$1
now=`date +%Y%m%d%H%M`
read -p "Delete the file or directory $1? yes or no:" input
if [ $input == "yes" ] || [ $input == "y" ]
then
        mkdir -p  /data/.$now
        rsync -aR $1/ /data/.$now/$1/
        /bin/rm -rf $1
elif [ $input == "no" ] || [ $input == "n" ]
then
        exit 0
else
        echo "Please input yes or no"
        exit
fi

1. now=`date +%Y%m%d%H%M`:控制日期的格式

date +"%Y_%m_%d_%H_%M"        :2019_07_24_00_15
date +"%Y_%m_%d_%H_%M_%S":2019_07_24_00_15_48
date +"%Y%m%d_%H_%M_%S"    :20190724_00_16_01

2. read -p "Delete the file or directory $1? yes or no:" input

shell read命令詳解:read命令 -p(提示語句) -n(字符個數) -t(等待時間) -s(不回顯)

read命令接收標準輸入(鍵盤)的輸入,或其他文件描述符的輸入(後面在說)。得到輸入後,read命令將數據放入一個標準變量中。下面是read命令的最簡單形式:

#!/bin/bash
echo -n "Enter your name:"   //參數-n的作用是不換行,echo默認是換行
read  name                   //從鍵盤輸入
echo "hello $name,welcome to my program"     //顯示信息
exit 0                       //退出shell程序。

2.1 計時輸入.
使用read命令存在着潛在危險。腳本很可能會停下來一直等待用戶的輸入。如果無論是否輸入數據腳本都必須繼續執行,那麼可以使用-t選項指定一個計時器。-t選項指定read命令等待輸入的秒數。當計時滿時,read命令返回一個非零退出狀態;

#!/bin/bash
if read -t 5 -p "please enter your name:" name
then
    echo "hello $name ,welcome to my script"
else
    echo "sorry,too slow"
fi
exit 0

2.2 設置read命令計數輸入的字符

當輸入的字符數目達到預定數目時,自動退出,並將輸入的數據賦值給變量。

read -n1 -"Do you want to continue [Y/N]?" answer

3. mkdir -p  /data/.$now

cd /:根目錄       cd:用戶目錄

如使用mkdir建立一個多級目錄則要使用-P命令 如:

 mkdir /lcp 是在根(/)目錄下建立一個名爲lcp的文件夾

 mkdir -p /lcp/abc 則是在根(/)目錄下建一個名爲lcp的文件夾同時在此文件夾中建立名爲abc的文件夾

4. rsync -aR $1/ /data/.$now/$1/
rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項。

-a:歸檔模式下,歸檔模式允許遞歸地拷貝文件,同時也保留了符號鏈接,文件權限,用戶組所有權和時間戳
-R, --relative 使用相對路徑信息。

 

【`】,學名叫“倒引號”, 如果被“倒引號”括起來,  表示裏面需要執行的是命令。
比如 `dirname $0`,  就表示需要執行   dirname $0  這個命令
【“”】 , 被雙引號括起來的內容, 裏面 出現  $ (美元號: 表示取變量名)  `(倒引號: 表示執行命令)   \(轉義號: 表示轉義),   其餘的才表示字符串。
【’‘】,  被單引號括起來的內容, 裏面所有的都表示串, 包括上面所說的  三個特殊字符。

 

執行:

$ sudo ./study2 xx5.txt
#xx5.txt就是需要刪除的文件

然後去根目錄下,查看隱藏文件:

$ cd /
$ ls
bin   data  dev  home
$ cd data
$ ll -a
總用量 28
drwxr-xr-x  7 root root 4096 11月 12 17:38 .
dr-xr-xr-x 20 root root 4096 11月 12 16:35 ..
drwxr-xr-x  3 root root 4096 11月 12 16:35 .201911121635
drwxr-xr-x  3 root root 4096 11月 12 16:37 .201911121637
drwxr-xr-x  3 root root 4096 11月 12 16:53 .201911121653
drwxr-xr-x  3 root root 4096 11月 12 17:38 .201911121738
drwxr-xr-x  2 root root 4096 11月 12 16:47 x.txt

#命令ll -a是查看所有文件,包含隱藏文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章