forループを使用して/home/lost+foundを除くすべての/homeディレクトリに新しいファイルを作成する方法[閉じる]

forループを使用して/home/lost+foundを除くすべての/homeディレクトリに新しいファイルを作成する方法[閉じる]
#!/bin/sh
for file in /home/*
do
if [ "{$file}" != "/home/lost+found" ]
then
    touch $file/FILE1
done

私が達成したいのは、すべての/home/ディレクトリを繰り返します。文書を除いて/家/紛失+発見。私は何が間違っていましたか?

答え1

fi何もありません。 ifステートメントを終了し、文字通り中括弧を使用して{$file}拡張するのを見逃しました{/home/somedir}。中かっこを持つパラメータは、${file}ドル記号が中かっこの外側になるように拡張されます。

また、パターンは/home/*ディレクトリだけでなくすべてのファイルと一致するため、touchファイルが存在するとエラーが発生します。内容はあまりないかもしれませんが、ディレクトリだけが一致する/homeようにパターンを変更するのは簡単です/home/*/。末尾のスラッシュは変数の一部になるため、比較するときにこの点を考慮してください。 (またはテスト[ -d "$file" ]。)

また、一般的に引用したいことは"$file"...またはdirここに置くことがより適切かもしれません。

#!/bin/sh
for dir in /home/*/ ; do
    if [ "$dir" != "/home/lost+found/" ] ; then
       touch "$dir/FILE1"
    fi
done

関連情報