ошибка bash-скрипта

ошибка bash-скрипта

bash-5.0-6 попытка запустить следующий скрипт приводит к синтаксической ошибке:

wget -nv -O index.html "https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch"

полученное сообщение об ошибке:

2020-08-24 20:38:51 URL:https://de.wikibooks.org/w/index.php?title=Spezial:Pr%C3%A4fixindex&namespace=0&from=Mathematik%3A_Lineare_Algebra [96400] -> "index.html" [1]
get_wikibooks.sh: 18: Syntax error: Unterminated quoted string

похоже, что знак "%" вызывает ошибку. Но как написать скрипт, чтобы его можно было использовать?

Спасибо заранее, пока, Ганс

P.S. Мой полный код:

set -x
#!/bin/bash
buch=$(zenity --entry --title "Download eines Wikibooks" --text "Bitte geben Sie den Buchtitel an:")
buch=$(echo $buch | sed "s/ /_/g")
mkdir -p ~/wikibooks/$buch
cd ~/wikibooks/$buch
wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'
if [ $? -ne 0 ] ; then
        zenity --error --title "Download eines Wikibooks - Fehler" \
          --text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")
if [ $? -ne 0 ] ; then
        zenity --error --title "Download eines Wikibooks - Fehler" \
          --text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
for i in $(ls); do sed "s#href=\"/wiki/$buch#href=\"./$buch#g" $i > $i.temp; mv $i.temp $i; done
zenity --info --title "Download eines Wikibooks" --text "Herunterladen des Buches erfolgreich\!"

решение1

В коде есть ошибки кавычек. Рассмотрим эту строку:

wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")

Команда tr — tr '"' '\n’. Последняя кавычка в этой команде — обратная кавычка Unicode (не ASCII). Она недопустима как одинарная кавычка оболочки.

Заменить .tr '"' '\n’tr '"' '\n'

После того, как вы это сделаете, скопируйте и вставьте свой код в shellcheck.net и исправьте все оставшиеся ошибки (важные) или предупреждения (могут быть важными), которые он обнаружит.

решение2

Выполнение той же команды по отдельности работает нормально. Однако, поскольку у вас есть $в URL, это может быть посчитано как переменная, так как вы используете " try:

wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'

обратите внимание на 'одинарные кавычки... если только $buchэто не переменная в вашем скрипте bash.

Связанный контент