1

私はシェルスクリプトの初心者です。ユーザーのHOMEディレクトリにあるディレクトリの内容をすべて削除し、条件に一致するいくつかのファイルを削除したい。しばらくグーグルで検索した後、次のスクリプトを作成しました。

#!/bin/bash
#!/sbin/fuser


PATH="$HOME/di"

echo "$PATH";

if [ -d $PATH ]
then
 rm -r $PATH/*
 fuser -kavf $PATH/.n*
 rm -rf $PATH/.store
 echo 'File deleted successfully :)'
fi

スクリプトを実行すると、次のようなエラーが発生します。

/users/dinesh/di
dinesh: line 11: rm: command not found
dinesh: line 12: fuser: command not found
dinesh: line 13: rm: command not found
File deleted successfully :)

誰でもこれで私を助けることができますか?

前もって感謝します。

4

3 に答える 3

2

PATH は、システムがコマンド実行可能ファイル ( 、 など) を検索する場所を制御する特別な変数rmですfuser。に設定すると/users/dinesh/di、後続のすべてのコマンドが検索されますが、(もちろん) それらは見つかりません。解決策: 別の変数名を使用してください。実際には、シェル スクリプトでは小文字の変数を使用することをお勧めします。予約されている大文字の変数名は多数あり、それらのいずれかを使用しようとすると問題が発生します。これを回避する簡単な方法は、小文字を使用することです。

ところで、一般に、変数を使用するときはいつでも変数を二重引用符で囲むのが最善です。これにより、変数を置き換えた後にシェルが行う解析の問題を回避できます。たとえば、[ -d "$path" ]の代わりに を使用し[ -d $path ]ます。 は引用符内では機能しない$path/*ため、もう少し複雑です。*解決策: rm -r "$path"/*.

ランダムなその他のメモ:#!/sbin/fuserラインは何もしていません。シバンとして機能できるのは、スクリプトの最初の行だけです。;また、シェルスクリプトの行末にわざわざ入れないでください。

#!/bin/bash

path="$HOME/di"

echo "$path"

if [ -d "$path" ]
then
 rm -r "$path"/*
 fuser -kavf "$path"/.n*
 rm -rf "$path/.store"
 echo 'File deleted successfully :)'
fi
于 2012-05-29T07:01:09.103 に答える