建站服務器
這篇文章給大家分享的是有關shell編程實戰(zhàn)之如何使用自定義命令del代替rm命令的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)服務項目包括清徐網(wǎng)站建設、清徐網(wǎng)站制作、清徐網(wǎng)頁制作以及清徐網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,清徐網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到清徐省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!不知道大家對在服務器上使用rm命令有什么感覺,反正每次我使用的時候,都會好好確認,即使這樣,按下回車的時候,心里還是會有點慌慌的感覺。因為和windows系統(tǒng)不一樣,使用win系統(tǒng)默認刪除文件,該文件就會被放入到回收站中,想要恢復直接從回收站找到文件并恢復即可。但是在linux中,用rm刪除文件,那就是真的刪除掉了,是沒有回收站這個概念的。
真因為rm命令的危險性,所以想要不自己寫一個shell腳本,用來刪除文件。自己定義的這個命令刪除文件時,會將原文件的位置移動“回收站”目錄,然后再將原文件給刪除掉。如果誤刪了,就可以從回收站中找到該文件并恢復。
首先,第一步,我們需要先創(chuàng)建回收站目錄,如果已經(jīng)有了此目錄從不用重新創(chuàng)建
# 回收站目錄 DEL_BAK_DIR="/root/.delbak" if [ ! -d "$DEL_BAK_DIR" ];then mkdir "$DEL_BAK_DIR" || exit 1 fi
然后我們來獲取用戶輸入的參數(shù),循環(huán)遍歷有所參數(shù),調(diào)用刪除函數(shù)來刪除。當然,我們首先需要檢查用戶是否輸入了參數(shù),如果用戶沒有輸入?yún)?shù)那么就直接退出程序,不往下走了。
# 獲取參數(shù) if (( $# < 1 ));then echo "Usage ${0} file1 file2 ..." exit 2 fi # 刪除文件 for file in $* do delete $file done
最后,我們需要編寫delete這個函數(shù)了。這個函數(shù)應該有哪些功能呢?首先,它肯定能對待刪除的文件名做檢查,如果不是文件或目錄,它就不繼續(xù)往下走了。另外,每次將刪除文件放到回收站目錄前,應該對回收站目錄所在分區(qū)剩余空間做檢查,如果空間不足也不往下走。
下面是文件是否存在的檢查
if [ ! -e $1 ];then echo "file $1 is not exists" exit 3 fi
而關于分區(qū)空間的檢查則稍微復雜些。首先,我們要獲取到回收站目錄所在分區(qū)剩余空間,然后獲取到待刪除文件的大小,拿這兩個數(shù)據(jù)做對比。
# 分區(qū)剩余空間是否充足校驗 part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}') file_size=$(du -ks $1 | awk '{print $1}') if (( part_free > file_size)) then # 備份且刪除源文件 …… else echo "The disk size is not enough" exit 4 fi
到這步,所有的準備工作都做好了,就差最后的備份源文件,然后刪除源文件了。下面給出完整的代碼:
#!/bin/bash # 使用自定義命令del來代替rm命令 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 回收站目錄 DEL_BAK_DIR="/root/.delbak" function delete () { # 文件名是否存在校驗 if [ ! -e $1 ];then echo "file $1 is not exists" exit 3 fi # 分區(qū)剩余空間是否充足校驗 part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}') file_size=$(du -ks $1 | awk '{print $1}') if (( part_free > file_size)) then # 備份且刪除源文件 now=$(date +%Y%m%d%H%M) if [ ! -d "$DEL_BAK_DIR/.$now" ];then mkdir "$DEL_BAK_DIR/.$now" || exit 5 fi mv -f $1 $DEL_BAK_DIR/.$now/$(basename $1) else echo "The disk size is not enough" exit 4 fi } if [ ! -d "$DEL_BAK_DIR" ];then mkdir "$DEL_BAK_DIR" || exit 1 fi # 獲取參數(shù) if (( $# < 1 ));then echo "Usage ${0} file1 file2 ..." exit 2 fi # 刪除文件 for file in $* do delete $file done
感謝各位的閱讀!關于shell編程實戰(zhàn)之如何使用自定義命令del代替rm命令就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!