Here are a few notes to add to the previous article on ping. This time, we look at some bash one-liner tips and tricks.
Combine multiple commands
Return Values
Ping Multiple Hosts Using Bash Nmap and Fping
Ping, and Command Line Variables
Start from the beginning. We want to see what happens when attempting to ping a host that resolves an IP address from DNS, but is not reachable from our network at the moment. This is to show how we might build a simple monitoring tool from scratch, and also to see what kind of fun we can have with the command line. To ping a host only one time use the count option, which in Windows is -n, and in Linux is -c.Windows
C:\>set host=google.com C:\>ping -n 1 %host% Pinging google.com [216.58.219.46] with 32 bytes of data: Request timed out. Ping statistics for 216.58.219.46: Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),
Bash: Linux, Mac, Unix
Note that in bash, we don't use the set command to assign a variable, but we may want to use export. So we could use:host=google.com ping -c 1 $hostOr with export:
export host=google.com ping -c 1 $hostThe only difference should be that the variable is still available in a sub shell, if we use export. With both lines combined, use a semicolon.
host=google.com;ping -c 1 $host
Return Codes
Remember that commands will return a result that is placed in the $? variable, which can be used later in our script. Return codes for ping:0 = success (host is up) 1 = ping failed (host is down) 2 = unknown host (host is not in DNS)To see how this works with an unknown host, run these two commands. First, ping an non-existent host, and then echo the $? variable.
$ ping -c 1 xyz-nothing ping: unknown host xyz-nothing $ echo $? 2The same thing, combined on one line, with a host variable:
$ host=xyz-nothing;ping -c 1 $host;echo $? ping: unknown host xyz-nothing 2If a ping check failed, then give the hostname, the return code, and the date and time.
$ host=google.com;ping -c 1 $host > /dev/null 2>&1; RESULT=$?;echo $host: $RESULT; if [ "$RESULT" != "0" ]; then date --rfc-3339=ns;fi google.com: 1 2016-09-01 14:35:10.833175095-07:00Or a simplified version, using the logical "or" double pipe "||", though we need the parentheses to run multiple commands
$ host=google.com;ping -c 1 $host > /dev/null 2>&1 || ( echo "$host $RESULT";date --rfc-3339=ns ) google.com 1 2016-09-01 14:35:31.012810392-07:00
No comments:
Post a Comment