неожиданный конец ошибки файла в файле сценария

#!/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.

2
задан 16 June 2015 в 23:09
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. Как предложил Гордон, измените это на:

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

И удалите пробелы в назначении:

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

, чтобы оно стало:

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

, потому что назначения не будут работать должным образом, если есть пробелы.

И проверьте http://www.shellcheck.net/[12105 impression

3
ответ дан 3 December 2019 в 10:43

Теги

Похожие вопросы