Bash 스크립트에 두 개의 "else" 문이 있습니까? [폐쇄]

Bash 스크립트에 두 개의 "else" 문이 있습니까? [폐쇄]

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및 (잊지 마세요 ) 라는 키워드가 포함됩니다 . , 및 문 뒤에 허용되는 명령은 다음 과 같습니다.elsefielifthenelseelif목록명령(하나 이상의 명령).

답변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 프로그램.

그러나 스크립트에 관한 한~해야 한다일하다.

관련 정보