我想编写一个 bash 脚本来创建如下目录结构:
foo
| - innerdir1
| - innerfile1
应针对不同的目录 foo 名称重复此操作多次。每个 foo 名称由两部分组成。所以我想我首先需要设置环境变量:
$BAR=something
$BAZ=anotherthing
然后我需要在脚本中使用它们,该脚本将生成上述带有 foo 名称的结构,如 $BAR.$BAZ,即 something.anotherthing。我该如何编写这样的脚本?
答案1
for BAR in abc def
do
for BAZ in ghi jkl mno
do
mkdir -p "$BAR.$BAZ/innerdir1"
touch "$BAR.$BAZ/innerfile1"
done
done
将创建:
abc.ghi
| - innerdir1
| - innerfile1
abc.jkl
| - innerdir1
| - innerfile1
abc.mno
| - innerdir1
| - innerfile1
def.ghi
| - innerdir1
| - innerfile1
def.jkl
| - innerdir1
| - innerfile1
def.mno
| - innerdir1
| - innerfile1
答案2
不要使用环境变量,而是将您的名称作为参数传递,并编写脚本来使用这些参数——这将使其成为一个更灵活的工具。
查找‘ getopts
’此 bash-guide 页面和其他地方。
答案3
剧本:
#!/bin/bash
if [ -z "$BAR" -o -z "$BAZ" ]; then
echo "This script needs environment variables $BAR and $BAZ to be set."
exit 1
fi
dir=$BAR.$BAZ
mkdir $dir
mkdir $dir/innerdir1
touch $dir/innerfile1
调用方式如下:
BAR=bar BAZ=baz ./script.sh
这将创建:bar.baz/innerdir1
和bar.baz/innerfile1
。
答案4
你应该看看
http://tldp.org/LDP/abs/html/arrays.html
一个简单的开始是:
#!/bin/bash
# define foo array
FOOLIST=()
# can be repeated
# create foonames
BAR="something"
BAZ="anotherthing"
# add to foolist
FOOLIST+=("${BAR}.${BAZ}")
BAR="somethingnew"
FOOLIST+=("2${BAR}.${BAZ}")
BAR="somethingnewer"
FOOLIST+=("3${BAR}.${BAZ}")
# create folders from list
for folder in ${FOOLIST[@]}
do
mkdir $folder
mkdir $folder/innerdir1
mkdir $folder/innerfile1
done