Bashスクリプト“ [!:見つかりません”エラー、およびorステートメントの書き方

StackOverflow https://stackoverflow.com/questions/1821236

質問

編集: 更新されたコードは次のとおりです。

#!/bin/sh
files=`ls`
if [ $# -ne 1 -o -f $1 ]
then
        echo "Usage: 
#!/bin/sh
files=`ls`
if [ $# -ne 1 ]
then
        echo "Usage: <*> <directory>"
        exit 1
fi
if [ ! -e $1 ]
then
        echo "$1 not found"
        exit 1

elif [ -d $1 ]
then
cd $1

for f in $files
do
        if [! -d $f]
        then
           if [ ! -s $f ]
            then
              rm-r $f
        echo "File: $f was removed."
        else
        continue
        fi
fi
done


echo "Name\t\tLinks\t\tOwner\t\tDate"

for f in $files
        do
                find $f -type f -printf "%f\t\t %n\t\t %u\t %TH %Tb %TY\n"
        done
        exit 0
fi
<directory>" exit 1 fi if [ ! -e $1 ] then echo "$1 not found" exit 1 elif [ -d $1 ] then cd $1 for f in $files do if [ ! -d "$f" ] then if [ ! -s "$f" ] then rm -r "$f" echo "File: $f was removed." else continue fi fi done echo "Name\t\tLinks\t\tOwner\t\tDate" for f in $files do find "$f" -type f -printf "%f\t\t %n\t\t %u\t %TH %Tb %TY\n" done exit 0 fi

間隔の問題をすべて修正し、#!bin / shを#/ bin / bashに変更し、&quot; $ f&quot;に引用符を追加しました。ただし、まだ多くのエラーが発生しています。

  

ava @ kosh:〜/ test $ ./delDir d1 rm:    d1 'を削除できません:そのようなファイルはありません   ディレクトリファイル:d1は削除されました。 rm:   削除できません delDir ':そのようなファイルはありません   またはディレクトリファイル:delDirが削除されました。   rm: delDir2 'を削除できません:いいえ   ファイルまたはディレクトリファイル:delDir2   削除されました。 rm:削除できません e1 ':いいえ   そのようなファイルまたはディレクトリファイル:e1は   削除されました。 rm: e2 'を削除できません:いいえ   そのようなファイルまたはディレクトリファイル:e2は   削除されました。 rm:削除できません make_d1 ':   そのようなファイルまたはディレクトリはありませんファイル:   make_d1は削除されました。   Name \ t \ tLinks \ t \ tOwner \ t \ tDate find:   d1:そのようなファイルまたはディレクトリが見つかりません:   delDir:そのようなファイルまたはディレクトリはありません   find:delDir2:そのようなファイルがないか、   ディレクトリ検索:e1:そのようなファイルがないか、   ディレクトリ検索:e2:そのようなファイルはありませんまたは   ディレクトリ検索:make_d1:そのようなファイルはありません   またはディレクトリne1 2
  ava 2009年11月22日ne2
  2 ava 2009年11月22日

他に私が間違っていることを誰か知っていますか?

  

ここに私のコードがあります:

<*>      

ここに私の質問があります:

     
      
  1. 通常のファイルではないものでスクリプトを実行した場合   そして、私はそれがしたいディレクトリではありません   「使用法:ファイル名ディレクトリ」と言います; (見る   行5)。私はこれを2でできることを知っています   ifステートメントですが、それは可能ですか   このためのORステートメントを作成します   bash?

  2.   
  3. スクリプトを実行すると、次のようなエラーが表示されます:

  4.   
     
    

./ delDir:39:[!:見つかりません./delDir:39:[!:見つかりません./delDir:     39:[!:見つかりません./delDir:39:[!:     見つかりません./delDir:39:[!:見つかりません     ./delDir:39:[!:見つかりません./delDir:     39:[!:見つかりません./delDir:39:[!:     見つかりません./delDir:39:[!:見つかりません     ./delDir:39:[!:名前が見つかりません
    リンク所有者の日付     find:d1:そのようなファイルまたはディレクトリはありません     find:delDir:そのようなファイルはありません     ディレクトリ検索:delDir2:そのようなファイルはありません     またはディレクトリe1 1
    ava 2009年11月22日e2
    1 ava 22 Nov 2009     find:make_d1:そのようなファイルがないか、     ディレクトリne1 2
    ava 2009年11月22日ne2
    2 ava 2009年11月22日

  
     

これらのエラーが発生していると思います   forループが最初に見えるため   ユーザーが入力したファイル   (変更後のディレクトリ)および   それを見つけることができません。これを修正するにはどうすればよいですか?   3.表示されるその他のエラーはありますか?

役に立ちましたか?

解決

別の問題は、スクリプトの開始時に行うことです

files = `ls`

その後、別のディレクトリに移動し、$ filesを削除してそれらを削除するループを試みます-もちろん、ディレクトリを変更したため、これは機能しません。

ディレクトリを変更した後、ls行を移動します。

他のヒント

[の後、] の前の行にスペースを入れるのを忘れた:

if [! -d $f]

ANDテストは -a を使用して作成され、 -o はORと同じです:

if [ ! -d $f -a -f $f ]
if [ ! -d $f -o -f $f ]

[の間にスペースを入れてみてください。

他の答えは正しいです。理由は次のとおりです。[はコマンドです。 &quot; [!&quot;と入力すると、シェルはその名前のコマンドを探します。

ここで他の回答を増やしています... #で始まるbashの質問が表示されるたびに! / bin / sh 飛び込む必要がありますが、これは道徳的な義務です。

/ bin / sh は、POSIXによるbashの呼び出し、または完全に異なる「正解の正解」を指していることに注意してください。ダッシュのようなシェル。 / bin / shは多くの場合シンボリックリンクであり、bashの動作をPOSIX準拠に変更します。したがって、多くの便利な機能が通常どおりに機能しないか、別のシェルによってコードが解析されている場合があります。

つまり、/ bin / sh == POSIX_ME_HARDER ですが、.. == bashism :)

bashが必要な場合は、#!/ bin / bash を使用します

それ以上に、singingwolfboyの答えはあなたの差し迫った問題を解決するはずです:)

他の人は [で間隔の問題を抱えていましたが、他にもいくつか気づきました。

おそらく23行目の rm コマンドにスペースが必要です:

rm -r $f

また、通常、ファイルパスを二重引用符で囲むことをお勧めします。これにより、スクリプトがスペースやその他の特殊文字を含むファイル名を正しく処理できるようになります。

rm -r "$f"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top