Bash: Syntaxfehler – Unerwartetes Near-Token „else“

Bash: Syntaxfehler – Unerwartetes Near-Token „else“

Also gut, ich verstehe absolut nicht, warum Bash mir diesen Fehler anzeigt. Ich habe ein Skript erstellt, das überprüft, ob ein Laufwerk in einem Verzeichnis gemountet ist. Wenn ein Laufwerk gemountet ist, führt es einige rsync-Aufgaben aus (und druckt den Status in ein Protokoll). Wenn es nicht gemountet ist, sollte es mir eine E-Mail senden (E-Mail aus dem Code entfernt).

Aber jedes Mal, wenn ich diesen Code ausführe, erhalte ich die Meldung „Syntaxfehler: unerwartetes Token in der Nähe von ‚else‘“. Warum tritt dieser Syntaxfehler auf?

Ich habe es mit 1 [ und 2 [[ mit der f-Anweisung versucht, das Skript unter sudo ausgeführt, aber ohne Erfolg.

Dem Code wurden zusätzliche Kommentare hinzugefügt, damit Sie die Logik erkennen können ;).

#!/bin/bash
#Print to log that check is starting
printf "Checking if Backup drive is successfully mounted\n" >>/home/fileserver/Applications/Backup/logs/backup.log 2>&1 &&

# Start check
if [[ $(mount | grep -c /home/fileserver/Backup4TB) != 0 ]]; then

# If check is successfull, print it to log & start the backup
printf "Backup Drive successfully mounted, Backing up Applications folder to USB Backup Drive\n" >>/home/fileserver/Applications/Backup/logs/backup.log 2>&1 &&

# Backup using rsync
rsync --log-file=/home/fileserver/Applications/Backup/logs/rsync.log -avhP --delete /home/fileserver/Applications/ /home/fileserver/Backup4TB/Applications >/dev/null 2>&1 &&

# Print to log
printf "Backing up Books folder to USB Backup Drive\n" >>/home/fileserver/Applications/Backup/logs/backup.log 2>&1 &&

# Backup using rsync
rsync --log-file=/home/fileserver/Applications/Backup/logs/rsync.log -avhP --delete /home/fileserver/Media/Books/ /home/fileserver/Backup4TB/Books >/dev/null 2>&1 &&

# SYNTAX ERROR IS HERE - If check is unsuccessfull
else

# Print error to log
printf "ERROR - Mount was insuccesfull, sending email as warning\n" >>/home/fileserver/Applications/Backup/logs/backup.log 2>&1 &&

# Email me
/usr/sbin/ssmtp "MYEMAIL" < /home/fileserver/Applications/Backup/mountingerror/mountingerrorBackup.txt

fi

Antwort1

Ja, gefunden: Ich setze && nach meinem letzten Befehl direkt vor der else-Anweisung:

...

# Backup using rsync
rsync --log-file=/home/fileserver/Applications/Backup/logs/rsync.log -avhP --delete /home/fileserver/Media/Books/ /home/fileserver/Backup4TB/Books >/dev/null 2>&1 &&

# SYNTAX ERROR IS HERE - If check is unsuccessfull
else

...

Durch Entfernen des && verschwindet der Fehler:

...

# Backup using rsync
rsync --log-file=/home/fileserver/Applications/Backup/logs/rsync.log -avhP --delete /home/fileserver/Media/Books/ /home/fileserver/Backup4TB/Books >/dev/null 2>&1 

# SYNTAX ERROR IS HERE - If check is unsuccessfull
else

...

verwandte Informationen