for循环wget目录数组

for循环wget目录数组

运行以下脚本时我收到此错误

错误

mus.sh: 8: mus.sh: Syntax error: word unexpected (expecting "do")

脚本

#!/bin/bash

versions='57.0 58.0.1'
platforms='win64 win32'
locales='en-US es-ES'

for i in ${versions[@]}
do
for p in ${platforms[@]}
    do
        for l in ${locales[@]}
        do
            wget -c -A.mar "http://download.cdn.mozilla.net/pub/firefox/releases/"$i"/update/"$p"/"$l"/"
        done
    done
done

答案1

versions我无法重现您的错误,但脚本完全不正确。不正确的部分是、platforms、的值的分配locales- 目前这些是变量,而不是数组。以下是一个例子:

$ versions='57.0 58.0.1'
$ printf '%s\n' "${versions[@]}"
57.0 58.0.1

构建的方法之一Bash 中的数组, 作为@甜点表示,使用圆括号。最常见的是:

  • 定义一个空数组:array=()
  • 定义一个数组并赋值:array=('element 0' 'element 1')
  • 将元素添加到预定义数组:array+=('element 2' 'element 3')
  • 替换某个元素的值(本例中为第一个元素)array[0]='new value':,
  • 在这种情况下引号由于值中有空格,所以是绝对强制性的。

以下是使用数组时上图的结果:

$ unset versions 
$ versions=('57.0' '58.0.1')
$ printf '%s\n' "${versions[@]}"
57.0
58.0.1

据此,您的脚本应如下所示:

#!/bin/bash

versions=('57.0' '58.0.1')
platforms=('win64' 'win32')
locales=('en-US' 'es-ES')

for i in "${versions[@]}"
do
    for p in "${platforms[@]}"
    do
        for l in "${locales[@]}"
        do
             echo "$i : $p : $l"
        done
    done
done

另一个小错误是你的wget表达方式。引用整个 url 更好或更简单。使用括号将变量与字符串的其余部分分开:

wget -c -A.mar "http://.../releases/${i}/update/${p}/${l}/"

相关内容