Bash脚本循环问题

时间:2019-09-15 00:28:02

标签: arrays bash ssh

我试图将循环中的数组元素用作选择相关数组的动态键。我尝试了几种方法,但是内部循环不起作用,并且我不能将父参数用作选择正确数组的动态键。

有什么建议吗? 谢谢

#!/bin/bash

SUFFIX='.zip'
ZIPCOMMAND=""
DSTDIR="/root/destfiles/"
SRCDIR="/root/srcfiles"
ZIPCOMMAND=""
PACKAGES=("STARTER" "BUSINESS")
STARTER=("209" "Module2")
BUSINESS=("210" "Module1" "Module3")

# packageid, destination command
function make_zip_file {
   targetfilename="${2}${1}$(echo -n "${1}" | md5sum | cut -d' ' -f1 ).zip ${3}"
    echo "$targetfilename"
}
cd $SRCDIR
declare -p BUSINESS
for j in "${PACKAGES[@]}"; do
    COUNT=0;
    declare -p j
    nums=${#j[@]}
    echo "$nums";
    if (( $nums > 1 )); then
        for i in "${j[@]}"; do
               if ((  $COUNT == 0 )); then
                               Packageid=$i;
                               echo -e "Package id $Packageid";
               else
                      echo -e "# $COUNT - $i$SUFFIX"
                      ZIPCOMMAND="${ZIPCOMMAND} ${i}${SUFFIX}";
                         fi
               COUNT=$(($COUNT+1));
        done
        echo -e "$ZIPCOMMAND"
        ZIPPARAMS=$(make_zip_file "$Packageid" "$DSTDIR" "$ZIPCOMMAND")
        zip -qr $ZIPPARAMS
        echo -e "$ZIPPARAMS"
    fi
done

1 个答案:

答案 0 :(得分:2)

如果我理解您的问题,那么您正在寻找一种使用变量STARTER解引用数组BUSINESSj的方法。

也许有更好的方法,但是我要做的是:

jref="${j}[@]"
jarray=("${!jref}")

示例:

$ BUSINESS=("210" "Module1" "Module3")
$ j=BUSINESS
$ jref="${j}[@]"
$ jarray=("${!jref}")
$ printf "%s\n" "${jarray[@]}"
210
Module1
Module3
$ echo ${jarray[1]}
Module1