스크립트 파일의 예기치 않은 파일 끝 오류

스크립트 파일의 예기치 않은 파일 끝 오류
#!/bin/sh
#
Host = ###############
Port = ####
email_id="##################"
email_sub="######"
#
if ping -q -c 5 $Host >/dev/null
then
    result_host="Successful"
else
    result_host="Not Successful"
fi
result_nc='nc -z $Host $Port; echo $?'
if [ $result_nc != 0 ];
then
    result_port="Not Opened"
else
    result_port="Opened"
fi
mesg="Ping to host was ${result_host}, Port $port is ${result_port}."
echo "$mesg"
#echo "$mesg" | mail -s "$email_sub" $email_id

스크립트를 실행할 때 오류가 발생합니다. 구문 오류:Unexpected end of file.

답변1

나는 그것을 실행하려고했습니다. 구문 오류가 발생하지 않았습니다. 실제로 구문적으로는 대부분 좋은 것처럼 보입니다.

아래 출력을 참조하세요.

$ ./a.sh
./a.sh: 3: ./a.sh: Host: not found
./a.sh: 4: ./a.sh: Port: not found
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
            [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
            [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
            [-w deadline] [-W timeout] [hop1 ...] destination
./a.sh: 15: [: nc: unexpected operator
Ping to host was Not Successful, Port  is Opened.

이 줄의 따옴표를 역따옴표로 바꾸고 싶다고 생각합니다.

result_nc='nc -z $Host $Port; echo $?'

그래서 다음과 같이 변경합니다:

result_nc=`nc -z $Host $Port; echo $?`

명령의 stdout 결과를 result_nc에 할당하기 때문에 해당 줄에는 논리 문제(구문 문제 아님)도 있습니다. Gordon이 제안한대로 다음과 같이 변경하십시오.

if nc -z $Host $Port
then
...

그리고 과제에서 공백을 제거하십시오.

Host = ###############
Port = ####

그래서 그것은 다음과 같이 됩니다:

Host=###############
Port=####

공백이 있으면 할당이 제대로 작동하지 않기 때문입니다.

그리고 꼭 확인해 보세요http://www.shellcheck.net/

관련 정보