如何使用 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/ 目录并在每个目录中创建一个文件除了在/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

相关内容