1. 程式人生 > >shell指令碼小工具之萬能解壓和壓縮器---實現思路

shell指令碼小工具之萬能解壓和壓縮器---實現思路

    本人也是接觸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的解壓器。
如果有我寫的不合理的地方,歡迎大神指教!