я получил эту ошибку при запуске следующего сценарий
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
Я не мог воспроизвести Вашу ошибку, но сценарий является неправильным вообще. Неправильная часть является присвоением значений 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}/"