error de script bash

error de script bash

bash-5.0-6 al intentar ejecutar el siguiente script genera un error de sintaxis:

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

el mensaje de error resultante:

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

Parece que el signo "%" causa el error. Pero, ¿cómo puedo escribir el guión para que sea utilizable?

gracias de antemano adiós hans

PD Mi código completo es:

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\!"

Respuesta1

El código tiene errores entre comillas. Considere esta línea:

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

El comando tr es tr '"' '\n’. La comilla final de ese comando es una comilla invertida Unicode (no ASCII). Esto no es válido como comilla simple de shell.

Reemplazar tr '"' '\n’con tr '"' '\n'.

Después de haber hecho eso, corte y pegue su código en shellcheck.net y corrija cualquier error restante (importante) o advertencia (podría ser importante) que identifique.

Respuesta2

Emitir el mismo comando por sí solo funciona bien. Sin embargo, dado que tiene $la URL, es posible que se cuente como una variable ya que está usando " try:

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

tenga en cuenta las 'comillas simples... a menos que $buchsea una variable dentro de su script bash.

información relacionada