bash - 脚本错误

分享于 

3分钟阅读

ubuntu

  繁體

问题:

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



符号"-"导致了错误,如何才能编写一个可用的脚本?

post script,完整代码是:


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'替换。


答案2:


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



注意'单引号,除非$buch是bash脚本中的变量。