![forループを使用して/home/lost+foundを除くすべての/homeディレクトリに新しいファイルを作成する方法[閉じる]](https://linux33.com/image/135344/for%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%2Fhome%2Flost%2Bfound%E3%82%92%E9%99%A4%E3%81%8F%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%2Fhome%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E6%96%B0%E3%81%97%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
#!/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