2012-11-21 87 views
1

TIA提前尋求幫助。這是課程,所以進一步閱讀總是感激!Linux shell腳本刪除/恢復/垃圾箱

基本上我必須在bash中編寫3個腳本。一個'刪除'文件到我創建的目錄(〜/垃圾)。另一個可以在需要時進行恢復,第三個可以永久刪除它。

我有點卡在我的垃圾腳本。它似乎並沒有實際刪除任何內容,因爲ls顯示了所有文件仍在那裏。我也遇到了麻煩(-a),我已經爲用戶添加了一次全部垃圾,如果不是,那麼它應該要求確認每個找到的文件。

這裏就是我剛纔......

#!/bin/bash 
if [ "$1" = "-a" ] 
then 
cd ~/rubbish 
rm ~/rubbish 
mkdir ~/rubbish 
echo "All files have been deleted" 
else 
cd ~/rubbish 
ls > rubbish 
for line in 'cat rubbish' 
do 
echo "Do you want to delete?" $line 
echo "Y/N" 
read ans 
case "ans" in 
Y|y) rm $line;; 
N|n) " ";; 
esac 
done 
fi 

正如我所說的,它不會看到-a,並跳過第一個分支,並通過第二看似細微運行,但是當我LS 〜/垃圾所有的文件仍然存在。

編輯感謝您的幫助!人造衛星,呃不能真正看到你的評論改變了什麼,除了添加分號?和inductiveLoad,你的答案是王牌,但我找不到一個正確的工作方式,失去耐心,並超級基本。像這樣....

#!/bin/bash 

if [ "$1" = "-a" ] ; 
then 
cd ~/rubbish; 
rm ~/rubbish/*; 
echo "All files have been deleted"; 
else 
    rm -i ~/rubbish/* ; 
fi 
+0

嘗試這樣做'#/斌/慶典;!如果[ 「$ 1」= 「-a」];然後,CD〜/垃圾; RM〜/垃圾;的mkdir〜/垃圾;回聲「所有文件已被刪除「; else; cd〜/垃圾; ls>垃圾;對於'cat垃圾'中的行; do; echo」你想刪除嗎?「 $ line; echo「Y/N」; read ans; case「ans」in; Y | y)rm $ line ;;; N | n)「」;;; esac; done; fi' –

回答

1

我會用getopts解析選項,因爲它允許更多的靈活性,任意數量的任意排序參數,用數據(而不是一個標誌選項 - 見下面的-d選項),並且如果您給出錯誤的選項,也會打印幫助。

usage() 
{ 
cat <<EOF 
usage: $0 options 

This script deletes/restores/trashes files. 

OPTIONS: 
    -h Show this message 
    -a Trash it all! 
    -d Rubbish directory 
EOF 
} 

trashAll=false 
rubbishDir="~/rubbish" 

while getopts "ad:" OPTION; 
do 
    case "$OPTION" 
    in 
     h) usage 
      exit 1;; 
     a) trashAll=true;; 
     d) rubbishDir=${OPTARG};; 
     ?) usage 
      exit 1;; 
    esac 
done 

if $trashAll 
then 
    #trash it all 
    echo "Trashing all in ${rubbishDir}!" 
fi 
+0

+1通常用於家庭作業問題,我們只是提供一些指導,而不是完整的解決方案。 –

+0

感謝您的幫助!人造衛星,呃不能真正看到你的評論改變了什麼,除了添加分號?和inductiveLoad,你的答案是王牌,但我找不到一個正確的工作方式,失去耐心,並超級基本。 – Moominboy