我创建的脚本只是一个命令列表(cp,mkdir,rm等)。这样做基本上是用源文件夹的内容更新一堆文件夹的内容。
现在我有大约15个文件夹需要修改,每个文件夹大约有30个命令。所以当我需要添加一个文件夹时,我需要再添加30个命令并指定该文件夹。
脚本中是否有一种方法可以创建一个文件夹数组来更改和循环它或什么?
我的脚本现在只包含通常在命令行中运行的基本命令,因此没有任何进展。
答案 0 :(得分:2)
是的,你可以这样做:
for x in "folder1" "folder2" "folder3"; do
mkdir $x
cp foobar $x
done
更好的是,使用数组来保存文件夹名称,例如
arr=("folder1" "folder2" "folder3")
for x in ${arr[*]} do
mkdir $x
cp foobar $x
done
如果您在模式后面有特定名称,则可以使用循环自动生成该名称列表。
答案 1 :(得分:1)
这是一种方法:
#!/bin/bash
# This function does all you clever stuff
# $1 contains the first parameter, $2 the second and so on
function my_cmds()
{
echo $1
}
# You can loop over folders like this
for i in folder1 folder2 folder3
do
# here we call a function with the string as parameter
my_cmds $i
done
# ... or like this
folders[0]="folder0"
folders[1]="folders1"
folders[2]="folders2"
for i in "${folders[@]}"
do
my_cmds $i
done
初始化整个数组的便捷方法是
array=( element1 element2 ... elementN )
符号。
答案 2 :(得分:0)
这类似于使用for
循环的答案,但使用here文档存储文件夹列表。这就像在脚本中嵌入了一个数据文件。
while read -r folder <&3; do
mkdir "$folder"
# etc
done 3<<EOF
folder1
folder2
folder with space
EOF
我在这里使用文件描述符3,以防你在循环体中有命令尝试从标准输入读取。