![Bash 스크립트에 두 개의 "else" 문이 있습니까? [폐쇄]](https://linux55.com/image/143674/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%22else%22%20%EB%AC%B8%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
sshfs
연결 문제로 인해 가끔 중단되는 원격 서버의 설치가 있습니다 . 이 문제를 해결하기 위해 파일이 마운트에 있는지 확인하는 스크립트를 작성했습니다. 그렇지 않은 경우 이메일을 보내고 다시 연결하십시오 sshfs
.
그 뒤의 두 번째 명령문이 올바른 구문을 가지고 있는지 확실하지 않습니다 else
. 이를 구분하기 위해 괄호가 필요한지, 아니면 첫 번째 명령문을 끝내기 위해 세미콜론이 필요한지 확실하지 않습니까? 코드는 다음과 같습니다.
#!/bin/bash
file="/path/to/mount/.exists"
if [ -f "$file" ]
then
echo "$file found." > /dev/null 2>&1
else
/usr/sbin/sendmail -t [email protected] </etc/alert.txt
/bin/sh /etc/fix_mount.sh
fi
그런 다음 else
먼저 경고 메시지를 보내 문제가 발생했음을 알리고 두 번째 bash 스크립트를 실행하여 다시 연결합니다 sshfs
. 나는 그것이 자체적으로 작동한다는 것을 알고 있지만 내 구문으로 인해 올바르게 작동하지 않는 /etc/fix_mount.sh
것 같습니다 . else
괄호? 세미콜론? 준비됐나요?
답변1
당신의 문법은 괜찮습니다.
if/then/else 문의 구문 에는 if
, then
및 (잊지 마세요 ) 라는 키워드가 포함됩니다 . , 및 문 뒤에 허용되는 명령은 다음 과 같습니다.else
fi
elif
then
else
elif
목록명령(하나 이상의 명령).
답변2
보기에는 좋아 보이지만 다음과 같이 작성했을 것입니다.
#!/bin/bash
check_file="/path/to/mount/.exists"
if [ ! -f "$check_file" ]; then
/usr/sbin/sendmail -t [email protected] </etc/alert.txt
/bin/sh /etc/fix_mount.sh
fi
echo
나는 당신이 그것을 지시하고 있기 때문에 첫 번째 진술에 대한 이유가 없다고 생각합니다 /dev/null
.
파일이 다음과 같은 경우 조치를 취하는 것이 더 합리적입니다.아니요전시하다. 따라서 논리적 NOT !
연산자입니다.
file
또한 변수 이름 으로 사용하지 않을 것 입니다.GNU/Linux 프로그램.
그러나 스크립트에 관한 한~해야 한다일하다.