
Ладно, я совершенно не понимаю, почему bash выдает мне эту ошибку. Я создал скрипт, который проверяет, смонтирован ли диск в каталоге. Если диск смонтирован, он выполняет некоторые задачи rsync (и выводит статус в журнал). Если он не смонтирован, он должен отправить мне письмо (сообщение удалено из кода).
Но всякий раз, когда я запускаю этот код, он выдает мне "Ошибка синтаксиса: неожиданный токен рядом с 'else'". Почему происходит эта синтаксическая ошибка?
Я попробовал с 1 [ en 2 [[ с оператором f, запустил скрипт под sudo, но ничего не вышло.
В код добавлены дополнительные комментарии, чтобы вы могли увидеть логику ;).
#!/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
решение1
Да, нашел: я помещаю && после последней команды, прямо перед оператором else:
...
# 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
...
При удалении && ошибка исчезает:
...
# 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
...