좋아, 나는 왜 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
...