为脚本创建命令数组

为脚本创建命令数组

我有几个目录需要更新,步骤相同,但显然每个目录的名称都不同。

我是编写脚本的新手。我可以用 eg 创建一个数组$array=('cd dir1', 'cd dir2');并创建一个for遍历每个目录的循环吗?

例子 (**我将使用 php 语法**):

$arr=array('cd dir1','cd dir2', 'cd dir3', 'cd dir4', 'cd dir5')
for($i=0; $<=5; $i++){
    $arr[$i]
    #MAKE STUFF
    #MAKE MORE STUFF
    cd ..
}

答案1

我建议不要存储命令在数组中,但只有参数(感谢@steeldriver 提供 bash 中的数组语法):

#!/usr/bin/env bash

dirs=('dir1' 'dir2' 'dir3' 'dir4' 'dir5')
for dir in "${dirs[@]}"; do
    cd "$dir"
    echo "***MAKE STUFF***"
    echo "***MAKE MORE STUFF***"
    cd -
done

注意:(cd -减)更改回以前的目录(而不是父目录),因此它比 更安全cd ..

如果你真的想存储命令,那么您需要将数组元素作为命令来执行,只需将它们写下来即可:

#!/usr/bin/env bash

cmds=('cd dir1' 'cd dir2' 'cd dir3' 'cd dir4' 'cd dir5')
for cmd in "${cmds[@]}"; do
    $cmd
    echo "***MAKE STUFF***"
    echo "***MAKE MORE STUFF***"
    cd -
done

请注意,现在脚本中存在不对称:最后一个cd -假设$cmd实际上是一个cd命令。我不建议这样做。要么将两个命令都放在数组中,要么都不放。

答案2

我认为你需要这样做:

#!/usr/bin/env bash
# declare an array called array and define values
array=('dir1' 'dir2' 'dir3' 'dir4' 'dir5')
for i in "${array[@]}"
do
    cd "$i" || exit
    #MAKE STUFF
    #MAKE MORE STUFF
    cd ..
done 

答案3

关于 Bash 中的数组,已经有人问过(并回答过)类似的问题:(https://stackoverflow.com/questions/8880603/loop-through-an-array-of-strings-in-bash)。

为了在 Bash 中创建字符串数组,你需要宣布使用 -a 参数的关键字(-a 表示数组):

# Array: list of strings (directories)
declare -a directories=("/bin" "/etc" "/usr")

# For each element in the array
for element in "${directories[@]}"
do
        cd $element
        ## DO STUFF
done

相关内容