shell指令碼小工具之萬能解壓和壓縮器---實現思路
阿新 • • 發佈:2019-01-06
本人也是接觸linux很久了。但是對系統的架構也是一知半解,平時的使用情況也就是一鍵安裝lnmp,頂多裝redis,自己一直都專注於web開發,很少去接觸系統運維方面的知識。一直覺得linux是一個很高大上的系統,一出錯我根本無從下手。只能把錯誤丟給百度,或者google。我花了近一週時間去學習shell,總結起來shell指令碼是一個命令列解析器,幫助使用者和作業系統打交道。也遇到很多坑,if [ $type = 'en' ] 我寫個if語句括號和變數一定要用空格隔開,語法特殊,跟其它語言有一定差別,比如case,esac不過學習shell的過程,讓我更熟悉了vi編輯器,也發現原來可以這麼玩,可以開發很多小工具,提高效率。好了,不多說了。
實現思路:其實很簡單,使用者選擇壓縮型別,然後判斷是壓縮還是解壓,還有檔案完整名稱。shell取出字尾名,根據字尾名判斷壓縮型別。
貼程式碼:
#!/bin/bash #指令碼說明 #壓縮案例: sh ./ext.sh en /root/a.zip ./test 壓縮型別 壓縮後的檔名 要壓縮的檔案或者目錄 #解壓案例: sh ./ext.sh de ./a.zip 壓縮型別 解壓的檔名 (預設當前目錄) type=$1 #壓縮型別,en表示壓縮,de表示解壓 filename=$2 #檔名 to_filename=$3 #如果是壓縮則是選擇壓縮的檔案,解壓則是輸出的檔案路徑 ext="${filename##*.}" #獲取到檔名的字尾 if [ ! $filename ] then #沒有傳入引數 echo 'error(100)not file(tar|gz|bz2|zip|rar)' exit 0 fi if [ $type = 'en' ] then #壓縮至 #匹配相應的檔案 case $ext in 'tar') eval "tar cvf $filename $to_filename" ;; 'gz') eval "tar zcvf $filename $to_filename" ;; 'bz2') eval "tar jcvf $filename $to_filename" ;; 'zip') eval "zip $filename $to_filename" ;; *) #不支援該型別 echo 'error(101)This type is not supported(tar|gz|bz2|zip)' ;; esac else #解壓至 #匹配相應的檔案 case $ext in 'tar') eval "tar xvf $filename" ;; 'gz') eval "tar zxvf $filename" ;; 'bz2') eval "tar jxvf $filename" ;; 'zip') eval "unzip $filename" ;; *) #不支援該型別 echo 'error(101)This type is not supported(tar|gz|bz2|zip)' ;; esac fi
PS:我只寫了四種解壓方式,不過你要多少就可以加多少,在case裡面加入即可。這種解壓器自己用用就好,因為會考慮到有些系統沒有安裝相應的解壓軟體。就會報命令語法錯誤的warning,比如你要解壓rar,系統就得裝rar的解壓器。 如果有我寫的不合理的地方,歡迎大神指教!