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