2012-11-23 106 views
0

預先感謝您的任何幫助,這是課程如此進一步讀/指針是極大的讚賞。的Linux shell腳本刪除/恢復/垃圾部分2

我問一個問題有一天與我自己的刪除/垃圾/恢復腳本,我已經完成了刪除和垃圾以及給予刪除備份文本文件還原到以後使用。

然而,不是給我的錯誤,恢復腳本只是有點控制檯停止。就像我輸入#〜/ Restore時一樣,光標跳到下一行,而沒有通常的#,我必須手動關閉它。同樣沒有-n選項。 -n選項應該要求一個新的位置來恢復,如果沒有,它應該恢復到文件的原始位置。 我會發布我的腳本,看看你們都在想什麼。

#!/bin/bash 
if [ "$1" == "-n" ] 
then cd ~/rubbish 
    restore= grep $2 ~/store  
    filename= basename "$restore" 
    echo "Type the files new location" 
    read location 
    location1 = "readlink -f $location"  
    mv -i $filename "$location1" /$filename  
else cd ~/rubbish   
    restore= grep $2 ~/store  
    filename= basename "$restore"   
    mv -i $filename "$location1" $location    
fi 

所以,〜/垃圾是我自己創建的目錄作爲一個回收站和〜/存儲是追加刪除的文件的readlink上刪除細節我的文本文件。如有必要,我可以發佈整個3個腳本?

非常感謝!

回答

2

如果您致電~/Restore -n它將轉到if部分並執行grep $2 ~/store。由於沒有參數$2,它將導致grep ~/store,它告訴grep在來自標準輸入的輸入中搜索「〜/ store」。

這就是爲什麼你的腳本停止,等待輸入。

您可以測試第二參數或包圍$2在雙引號,以確保得到的grep參數正確的數字。更好的做法是:1.測試第二個參數 2.用雙引號括住2美元。

一些積分:

  • 不要把周圍的空間=
  • 括在反引號`命令,如果你想捕獲輸出
  • 和目錄和文件名
之間沒有空格

所以,你應該寫

restore=`grep "$2" ~/store` 
filename=`basename "$restore"` 
echo "Type the files new location" 
read location 
location1=`readlink -f "$location"` 
mv -i $filename "$location1/$filename" 

我建議你看看bash info,並按照「書籍和資源」。

+0

我曾想,從像〜/控制檯呼籲恢復-n〜/垃圾/ NEWFILE會通過文件來恢復作爲第二個參數$ 2〜儘管我會嘗試你的消耗!謝謝! – Moominboy

+0

@Moominboy是的,它的確如此。但是這不是你在你的問題中寫的:「當我輸入#〜/ Restore -n」時。那麼你的問題可能會有所不同。調用你的腳本爲'bash -x〜/ Restore -n〜/ Rubbish/NewFile'並且發佈輸出或至少最後幾行。 –

+0

@Moominboy我更仔細地看了你的劇本並更新了我的答案。 –