#!/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
wenn ich das Skript ausführe, erhalte ich einen Syntaxfehler:Unexpected end of file.
Antwort1
Ich habe versucht, das auszuführen. Ich habe keinen Syntaxfehler erhalten. Tatsächlich sieht es syntaktisch größtenteils gut aus.
Bitte sehen Sie sich die Ausgabe unten an:
$ ./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.
Ich denke, Sie möchten die Anführungszeichen in dieser Zeile durch Backticks ersetzen:
result_nc='nc -z $Host $Port; echo $?'
ändern Sie es also in:
result_nc=`nc -z $Host $Port; echo $?`
Es gibt auch ein Logikproblem (kein Syntaxproblem) mit dieser Zeile, da dadurch das Standardergebnis des Befehls result_nc zugewiesen wird. Ändern Sie das, wie Gordon vorgeschlagen hat, in:
if nc -z $Host $Port
then
...
Und entfernen Sie die Leerzeichen in der Zuweisung:
Host = ###############
Port = ####
so dass daraus wird:
Host=###############
Port=####
da Zuweisungen bei Leerzeichen nicht richtig funktionieren.
Und schauen Sie sich anhttp://www.shellcheck.net/