для цикла wget directory array [closed]

я получил эту ошибку при запуске следующего сценарий

ошибка

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
0
задан 18 September 2018 в 04:42

1 ответ

Я не мог воспроизвести Вашу ошибку, но сценарий является неправильным вообще. Неправильная часть является присвоением значений versions, platforms, locales - в настоящее время это переменные, не массивы. Вот иллюстрация:

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

Один из способов создать массив в Bash, как @dessert сказал, при помощи круглых скобок. Обычно к:

  • определите пустой массив: 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}/"
2
ответ дан 27 October 2019 в 23:12

Другие вопросы по тегам:

Похожие вопросы: