Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
inception
- Beiträge: 36
- Registriert: 16.04.2017 18:12:12
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
Mfg,
Daniel
-
tobo
- Beiträge: 2338
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 16.04.2017 19:24:17
Entweder schreibst du
für einen übergebenen Parameterstring oder
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
Beitrag
von inception » 16.04.2017 19:52:14
warum ist das so? bei all funktioniert es ohne probleme.
-
tobo
- Beiträge: 2338
- Registriert: 10.12.2008 10:51:41
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
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
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
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
l
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
-
seep
- Beiträge: 544
- Registriert: 31.10.2004 14:21:08
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: HSK
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.