SHELLSCRIPT: Syntax error: word unexpected (expecting ")")

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

SHELLSCRIPT: Syntax error: word unexpected (expecting ")")

Beitrag von inception » 16.04.2017 19:02:01

Hallo,
ich habe eben ein backup shellscript geschrieben und bekomme nach dem ausführen folgende Errormeldung: ./backup.sh: 8: ./backup.sh: Syntax error: word unexpected (expecting ")").

Das script sieht folgendermaßen aus:

Code: Alles auswählen

#!/bin/sh
case "$1" in
jts3)
		cd /home
		tar cpfz /home/backups/jts3/jts3_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz JTS3ServerMod
		;;
		
del jts3)
		cd /home/backups/jts3
		if [ "$(ls /home/backups/jts3/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
		
ts)
		cd /home
		tar cpfz /home/backups/ts3/ts3_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz teamspeak3-server_linux_amd64
		;;
		
del ts)
		fi
		cd /home/backups/ts3
		if [ "$(ls /home/backups/ts3/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
		
mc)
		cd /home
		tar cpfz /home/backups/mc/mc_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz minecraft
		;;
		
del mc)
		cd /home/backups/mc
		if [ "$(ls /home/backups/mc/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
		
sb)
		cd /opt
		tar cpfz /home/backups/sb/sb_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz sinusbot
		;;
		
del sb)		
		cd /home/backups/sb
		if [ "$(ls /home/backups/sb/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
		
all)
		cd /home
		tar cpfz /home/backups/jts3/jts3_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz JTS3ServerMod
		cd /home
		tar cpfz /home/backups/ts3/ts3_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz teamspeak3-server_linux_amd64
		cd /home
		tar cpfz /home/backups/mc/mc_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz minecraft
		cd /opt
		tar cpfz /home/backups/sb/sb_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz sinusbot
		;;
		
del all)
		cd /home/backups/jts3
		if [ "$(ls /home/backups/jts3/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		cd /home/backups/ts3
		if [ "$(ls /home/backups/ts3/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		cd /home/backups/mc
		if [ "$(ls /home/backups/mc/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		cd /home/backups/sb
		if [ "$(ls /home/backups/sb/ | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;

*)
		echo "Falsche Benutzung, bitte wie folgt verwenden {ts|del ts|jts3|del jts3|mc|del mc|sb|del sb|all|del all}"
		exit 1
		;;
		
esac
exit 0
irgendwie finde ich den fehler nicht -.-' Wenn jemad weiß woran es liegt fällt es mir wahrscheinlich wie Schuppen von den Augen :D

Mfg,
Daniel

tobo
Beiträge: 2338
Registriert: 10.12.2008 10:51:41

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von tobo » 16.04.2017 19:24:17

Entweder schreibst du

Code: Alles auswählen

"del jts3")
für einen übergebenen Parameterstring oder

Code: Alles auswählen

del | jts3)
als Auswahl (oder) aus 2 übergebenen Parametern. Wobei "jts3" dann natürlich schon darüber greift.

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von inception » 16.04.2017 19:52:14

warum ist das so? bei all funktioniert es ohne probleme.

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von Meillo » 16.04.2017 20:21:26

inception hat geschrieben:warum ist das so?
Darum: http://pubs.opengroup.org/onlinepubs/96 ... 8_09_04_05 ;-)

Oder wie hast du die Frage gemeint?
Use ed once in a while!

tobo
Beiträge: 2338
Registriert: 10.12.2008 10:51:41

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von tobo » 16.04.2017 20:24:41

inception hat geschrieben:warum ist das so? bei all funktioniert es ohne probleme.
Gerade mal geschaut - nein tut es nicht!
Du musst die Leerzeichen quoten und dann auch dem Skript als geschlossenen Parameter übergeben. Also alle del XX) zu "del XX") ändern und Aufruf mit script.sh "del XX". In Zeile 21 ist ein fi zuviel.

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von inception » 16.04.2017 21:20:30

Jap das fi habe ich schon weggemacht jetzt muss ich den Parameter auch mit den Anführungszeichen benutzen. Naja das ist ha halb so schlimm. Danke für die hilfe! :)

tobo
Beiträge: 2338
Registriert: 10.12.2008 10:51:41

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von tobo » 16.04.2017 21:35:05

Wenn du nur einen Parameter überprüfst/erwartest, dann könntest du auch im case anstelle "$1" ein "$*" abfragen. Das übergibt dann die komplette Parameterliste als geschlossenen String und du könntest das Skript z.B. mit skript.sh del all aufrufen.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von breakthewall » 19.04.2017 13:24:37

inception hat geschrieben:irgendwie finde ich den fehler nicht -.-' Wenn jemad weiß woran es liegt fällt es mir wahrscheinlich wie Schuppen von den Augen :Dl
Das ist je nach Coding-Style nicht ungewöhnlich, womit Probleme mal mehr oder mal weniger auffallen.
Zusätzlich würde Ich Dir empfehlen, mal das Programm Shellcheck im Repository anzusehen, was viele gängige Design -und Scripting-Probleme erkennt und entsprechend erklärt warum das so ist.
Kann daher je nach Komplexität eines Shellscriptes nicht schaden, insbesondere für z.B. Anfänger.

Weitere Informationen: https://github.com/koalaman/shellcheck

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Re: SHELLSCRIPT: Syntax error: word unexpected (expecting ")

Beitrag von seep » 19.04.2017 15:41:23

inception hat geschrieben:ich habe eben ein backup shellscript geschrieben und bekomme nach dem ausführen folgende Errormeldung: ./backup.sh: 8: ./backup.sh: Syntax error: word unexpected (expecting ")").
Ein "vi +8 backup.sh" hätte Dich übrigens auch gleich direkt in die fehlerhafte Zeile befördert.

Antworten