Я пишу сценарий удара для автоматизации моего процесса загрузки. В разделе это дает ошибку:
синтаксическая ошибка около неожиданного маркера 'newURL= $ (повторяют $URL | sed 's/&:/$index /')'
Тот раздел кода здесь:
# Downloading the pdf's.
for index in {$startedNumber..$endedNumber} do
newURL=$(echo $URL | sed 's/&:/$index/')
wget $newURL
done
Это описатели секции URL как http://xxxx.com/xxx/yyy/zzz&:.pdf"" и находит "и": часть. Когда это найдет, что, изменит его на $index. Так, чтобы я мог загрузить эти строки: http://xxxx.com/xxx/yyy/zzz1.pdf http://xxxx.com/xxx/yyy/zzz2.pdf http://xxxx.com/xxx/yyy/zzz3.pdf http://xxxx.com/xxx/yyy/zzz4.pdf (... и продолжается до de $endedNumber),
Что я должен сделать для решения этой проблемы?
do
ключевое слово должно или быть на новой строке или после a ;
.
Общее эмпирическое правило от личного опыта, когда об ошибке сообщают как являющийся около неожиданного маркера, всегда смотрит на код перед нею (не только в ударе)
for index in {$startedNumber..$endedNumber}; do
newURL=$(echo $URL | sed 's/&:/$index/') &&
wget $newURL;
done
Существует несколько проблем здесь в дополнение к обращенным в текущих ответах
удар (непосредственно) не поддерживает использование переменных оболочки в расширении фигурной скобки. Посмотрите, например,
$index
привычка расширена, потому что Ваше sed выражение единственно заключается в кавычки. Посмотрите, например,
избегайте использования имен переменных ВСЕХ ЗАГЛАВНЫХ БУКВ и не забывайте к расширениям переменной двойной кавычки
На самом деле Вам не нужно sed
вообще, так как сама оболочка может сделать простой поиск и замену на переменных непосредственно. Так, например,
startedNumber=3; endedNumber=7
url="http://foo&:bar"
for index in $(seq $startedNumber $endedNumber); do
echo wget "${url/&:/$index}"
done
wget http://foo3bar
wget http://foo4bar
wget http://foo5bar
wget http://foo6bar
wget http://foo7bar
(удалите echo
для Вашего реального случая).