3

助けが必要です。これは、dustbin ディレクトリから元の場所にファイルを復元するために使用するスクリプトです。以前はルートにありました。次に、他のスクリプトを使用して「削除」され、dustbin ディレクトリに保存され、以前の場所はこれを使用してストレージ ファイルに記録されました。

case $ans in
    y) echo "`readlink -f $1`" >>home/storage & mv $1 /home/dustbin ;;
    n) echo "File not deleted." ;;
    *) echo "Please input answer." ;;
esac

したがって、以下のスクリプトを使用すると、削除されたファイルを復元する必要がありますが、次のエラーが発生します。

#!/bin/sh

if [ "$1" == "-n" ] ; then
    cd ~/home/dustbin
    restore="$(grep "$2" "$home/storage")"
    filename="$(basename "$restore")"
    echo "Where to save?"
    read location
    location1="$(readlink -f "$location")"
    mv -i $filename "$location1"/$filename
else
    cd ~/home
    storage=$home/storage
    restore="$(grep "$1" "$storage")"
    filename="$(basename "$restore")"
    mv -i $filename $restore
fi

与えられたエラー -mv: missing file operand

編集:

さて、スクリプトを次のように変更しました。

#!/bin/sh

if [ $1 ] ; then

    cd ~/home
    storage=~/home/storage
    restore="$(grep "$1" "$storage")"
    filename="$(basename "$restore")"
    mv -i "$filename" "$restore"

fi

それでもエラーが発生します:

mv: `filename' を stat できません: そのようなファイルまたはディレクトリはありません

4

2 に答える 2

0

$filenameの一部として使用する前に、基本的なエラー処理を実行して、存在するかどうかを確認することができmvます。

たとえば、前に:

mv -i $filename "$location1"/$filename

おそらく次のことを行う必要があります。

if [[ -e "$filename" ]]; then
    # do some error handling if you haven't found a filename
fi

このオプションは、次の引数が存在するファイル名を参照している-eかどうかをチェックします。[[そうである場合は true、そうでない場合は false と評価されます。(または、-f通常のファイルかどうかを確認するために使用します)

または少なくとも: if [[ -z "$filename" ]]; # ファイル名 fi が見つからない場合はエラー処理を行う

このオプションは、 の次の引数が空の文字列-zかどうかをチェックします。[[そうである場合は true、そうでない場合は false と評価されます。

についての同様のコメント:mv -i $filename $restoreあなたのelse句で。

テスト オプションの一覧を次に示します。

于 2012-11-30T00:27:57.617 に答える