手头的问题
我正在尝试编写一个 bash 脚本来快速创建目录结构。这是尝试了解有关操作数组、变量和使用循环的更多信息。我的脚本用于检查目录是否存在,然后创建文件夹。我遇到的问题是在前两层中创建第三层目录。
目标
我希望能够编写一个 bash 脚本来创建一个目录结构,例如~/a/a/a, ~/a/a/b, ~/a/a/c,...,~/a/z/z
。这应该是灵活的,这样我就可以使用任何合适的数组或变量。
这是我到目前为止已经解决的问题:
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
if [ ! -d "directory" ]; then
mkdir directory
fi
for array_0 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/
done
if [ -d "~/directory/$array_0/" ]; then
for array_1 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/$array_1
done
fi
exit 0
问题
我得到的错误是mkdir: cannot create directory '/home/user/directory/one/x' : No such file or directory
该脚本的其他尝试允许我创建~/directory
并且~/directory/one, ~/directory/two,..., ~/directory/five
不会失败,但不能创建下一个级别,即/directory/one/x
等等。
如何编写此目录结构的创建脚本?使用数组可以做到这一点还是有其他方法?
答案1
您可以使用嵌套数组循环,如下所示
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
for a0 in "${array_0[@]}"
do
for a1 in "${array_1[@]}"
do
mkdir -p "$HOME/web/$a0/$a1"
done
done
或者,如果您不介意避免使用数组而是使用扩展列表,那么这个命令将执行相同的操作:
mkdir -p ~/{one,two,three,four,five}/{x,y,z}