Как я могу использовать цикл для создания нового ФАЙЛА в каждом / home каталоге, кроме / home / lost + found

#!/bin/sh for file in /home/* do if [ "{$file}" != "/home/lost+found" ] then touch $file/FILE1 done 

Чего я хочу добиться, так это того, чтобы я прошел через все каталоги / home / и сделал в каждом ona файл, кроме / home / lost + found . Что я делаю неправильно?

Не так много, вам не хватает fi который завершает оператор if, и {$file} расширяется до {/home/somedir} с буквальными скобками. Расширение параметра с фигурными скобками равно ${file} , т.е. знак доллара выходит за скобки.

Кроме того, шаблон /home/* будет соответствовать всем файлам (не только каталогам), так что вы получите ошибки от touch если они есть. В /home может быть /home , но шаблон легко изменить на /home/*/ который должен соответствовать только каталогам. наклонная черта будет частью переменной, так что учитывайте это при сравнении. (Также можно проверить [ -d "$file" ] .)

Также, в общем, вы хотите процитировать "$file" . Или, возможно, dir будет более уместным здесь.

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