
This shell script enables you to perform a ping to a remote host and check whether the mentioned port is opened on that server.
This helps system admin for ping test and also make sure if there any issues with specific ports.
Ping Shell Script
#!/bin/bash
if [ "$#" = "0" ];
then
echo "Usage: $0 "
exit 1
fi
host=$1
port=$2
email="test@linoxide.com"
subject="Script result"
if ping -q -c 4 $host >/dev/null
then
ping_result="OK"
else
ping_result="NOT OK"
fi
nc_result=`nc -z $host $port; echo $?`
if [ $nc_result != 0 ];
then
port_result="not opened"
else
port_result="opened"
fi
message="Ping to host - ${ping_result}, port $port ${port_result}."
if [ "$ping_result" != "OK" -o "$nc_result" != "0" ];
then
echo "$message"
echo "$message" | mail -s "$subject" $email
fi
Script Output
Ping to localhost and check is 22 port opened (ssh server)
bobbin@linoxide:/$ ./script 127.0.0.1 22
Ping to host - OK, port 22 not opened.
desktop:~/$
Understanding ping script
#Check if service name passed to script as argument, if there no arguments (0) do next
if [ "$#" = "0" ];
then
#Write to terminal usage
echo “Usage: $0 ”
#Since no arguments – we need to exit script and user re-run
exit 1
fi
#Writing parameters to variables
host=$1
port=$2
email=”test@linoxide.com”
subject=”Script result”
#Check if ping ok -q to quite mod, -c 4 for 4 checks
if ping -q -c 4 $host >/dev/null
then
#Next lines writes result variable
ping_result=”OK”
else
ping_result=”NOT OK”
fi
#Next command check if port opened via nc command, and getting exit status of nc command
nc_result=`nc -z $host $port; echo $?`
#Check of exit status of nc command, and write results to variables
if [ $nc_result != 0 ];
then
port_result=”not opened”
else
port_result=”opened”
fi
#Writing message that script will email and write to output
message=”Ping to host – ${ping_result}, port $port ${port_result}.”
#Next check if ping or port check is failed (ping if not OK and exit status of nc if not 0)
if [ "$ping_result" != "OK" -o "$nc_result" != "0" ];
then
echo “$message” #this line write warning message to terminal
echo “$message” | mail -s “$subject” $email #this line send email
fi