溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell編程實(shí)戰(zhàn)之如何使用自定義命令del代替rm命令

發(fā)布時(shí)間:2020-09-22 09:22:27 來(lái)源:億速云 閱讀:348 作者:小新 欄目:建站服務(wù)器

這篇文章給大家分享的是有關(guān)shell編程實(shí)戰(zhàn)之如何使用自定義命令del代替rm命令的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

不知道大家對(duì)在服務(wù)器上使用rm命令有什么感覺(jué),反正每次我使用的時(shí)候,都會(huì)好好確認(rèn),即使這樣,按下回車(chē)的時(shí)候,心里還是會(huì)有點(diǎn)慌慌的感覺(jué)。因?yàn)楹蛍indows系統(tǒng)不一樣,使用win系統(tǒng)默認(rèn)刪除文件,該文件就會(huì)被放入到回收站中,想要恢復(fù)直接從回收站找到文件并恢復(fù)即可。但是在linux中,用rm刪除文件,那就是真的刪除掉了,是沒(méi)有回收站這個(gè)概念的。

真因?yàn)閞m命令的危險(xiǎn)性,所以想要不自己寫(xiě)一個(gè)shell腳本,用來(lái)刪除文件。自己定義的這個(gè)命令刪除文件時(shí),會(huì)將原文件的位置移動(dòng)“回收站”目錄,然后再將原文件給刪除掉。如果誤刪了,就可以從回收站中找到該文件并恢復(fù)。

首先,第一步,我們需要先創(chuàng)建回收站目錄,如果已經(jīng)有了此目錄從不用重新創(chuàng)建

# 回收站目錄
DEL_BAK_DIR="/root/.delbak"

if [ ! -d "$DEL_BAK_DIR" ];then
    mkdir "$DEL_BAK_DIR" || exit 1
fi

然后我們來(lái)獲取用戶輸入的參數(shù),循環(huán)遍歷有所參數(shù),調(diào)用刪除函數(shù)來(lái)刪除。當(dāng)然,我們首先需要檢查用戶是否輸入了參數(shù),如果用戶沒(méi)有輸入?yún)?shù)那么就直接退出程序,不往下走了。

# 獲取參數(shù)
if (( $# < 1 ));then
    echo "Usage ${0} file1 file2 ..."
    exit 2
fi

# 刪除文件
for file in $*
do
    delete $file
done

最后,我們需要編寫(xiě)delete這個(gè)函數(shù)了。這個(gè)函數(shù)應(yīng)該有哪些功能呢?首先,它肯定能對(duì)待刪除的文件名做檢查,如果不是文件或目錄,它就不繼續(xù)往下走了。另外,每次將刪除文件放到回收站目錄前,應(yīng)該對(duì)回收站目錄所在分區(qū)剩余空間做檢查,如果空間不足也不往下走。

下面是文件是否存在的檢查

if [ ! -e $1 ];then
    echo "file $1 is not exists"
    exit 3
fi

而關(guān)于分區(qū)空間的檢查則稍微復(fù)雜些。首先,我們要獲取到回收站目錄所在分區(qū)剩余空間,然后獲取到待刪除文件的大小,拿這兩個(gè)數(shù)據(jù)做對(duì)比。

# 分區(qū)剩余空間是否充足校驗(yàn)
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

到這步,所有的準(zhǔn)備工作都做好了,就差最后的備份源文件,然后刪除源文件了。下面給出完整的代碼:

#!/bin/bash
# 使用自定義命令del來(lái)代替rm命令

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en

# 回收站目錄
DEL_BAK_DIR="/root/.delbak"

function delete ()
{
    # 文件名是否存在校驗(yàn)
    if [ ! -e $1 ];then
        echo "file $1 is not exists"
        exit 3
    fi
    
    # 分區(qū)剩余空間是否充足校驗(yàn)
    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

感謝各位的閱讀!關(guān)于shell編程實(shí)戰(zhàn)之如何使用自定義命令del代替rm命令就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI