📖 Scenario: You are a system administrator who wants to keep an eye on the network status of a server. You will write a simple Bash script that checks if the server is reachable by pinging it and then reports the result.
🎯 Goal: Build a Bash script that pings a specific IP address or hostname, counts the number of successful responses, and then prints a summary message.
📋 What You'll Learn
Create a variable called target with the IP address or hostname to ping
Create a variable called count to specify how many ping attempts to make
Use the ping command with the -c option to send the specified number of pings to the target
Extract the number of successful ping replies from the ping command output
Print a message showing how many pings succeeded out of the total attempts
💡 Why This Matters
🌍 Real World
Network administrators often need to monitor if servers or devices are reachable to ensure network health.
💼 Career
Knowing how to write simple network monitoring scripts helps in automating routine checks and troubleshooting connectivity issues.
Progress0 / 4 steps
1
Set the target server to ping
Create a variable called target and set it to the IP address 8.8.8.8.
Bash Scripting
Hint
Use target=8.8.8.8 to assign the IP address to the variable.
2
Set the number of ping attempts
Create a variable called count and set it to 4 to specify the number of ping attempts.
Bash Scripting
Hint
Use count=4 to set the number of pings.
3
Ping the target and count successful replies
Use the ping command with -c $count to ping $target. Then use grep and wc -l to count how many lines contain the word bytes from and save this number in a variable called success.
Bash Scripting
Hint
Use command substitution with $(...) to capture the count of successful replies.
4
Print the ping summary
Print a message that says: "Pinged $target $count times: $success successful replies."
Bash Scripting
Hint
Use echo with double quotes to include variables in the message.
Practice
(1/5)
1. What is the main purpose of a network monitoring script using ping?
easy
A. To increase the speed of the network
B. To install software on remote devices
C. To change the IP addresses of devices
D. To check if devices on the network are reachable
Solution
Step 1: Understand the role of ping
ping sends a small message to a device to see if it replies, showing if it is reachable.
Step 2: Identify the script's goal
The script uses ping to detect if devices respond, helping find network problems early.
Final Answer:
To check if devices on the network are reachable -> Option D
Quick Check:
Ping checks reachability = B [OK]
Hint: Ping tests if a device replies to confirm reachability [OK]
Common Mistakes:
Confusing ping with speed testing
Thinking ping changes device settings
Assuming ping installs software
2. Which of the following is the correct syntax to ping a device once in a bash script?
easy
A. ping /c 1 192.168.1.1
B. ping -n 1 192.168.1.1
C. ping -c 1 192.168.1.1
D. ping 192.168.1.1 -count 1
Solution
Step 1: Recall the ping option for count
In Linux bash, -c specifies the number of ping requests to send.
Step 2: Verify the correct command format
ping -c 1 192.168.1.1 sends exactly one ping to the IP address.
Final Answer:
ping -c 1 192.168.1.1 -> Option C
Quick Check:
Use -c for count in ping = D [OK]
Hint: Use -c to specify ping count in bash [OK]
Common Mistakes:
Using Windows ping options like -n in bash
Incorrect option syntax like /c or -count
Omitting the count option for single ping
3. What will be the output of this script snippet?
if ping -c 1 8.8.8.8 > /dev/null; then
echo "Host is reachable"
else
echo "Host is unreachable"
fi
medium
A. Host is reachable
B. Syntax error
C. Host is unreachable
D. No output
Solution
Step 1: Understand the ping command behavior
The command ping -c 1 8.8.8.8 sends one ping to Google's DNS server, which is usually reachable.
Step 2: Analyze the if condition and output
If ping succeeds, the script prints "Host is reachable"; otherwise, it prints "Host is unreachable".
Final Answer:
Host is reachable -> Option A
Quick Check:
Successful ping prints reachable = C [OK]
Hint: Ping 8.8.8.8 usually succeeds, so output is reachable [OK]
Common Mistakes:
Assuming ping always fails
Confusing output redirection with errors
Missing that output is suppressed with > /dev/null
4. Identify the error in this script snippet for monitoring a device:
for ip in 192.168.1.1 192.168.1.2
do
ping -c 1 $ip
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
medium
A. Incorrect ping option '-c'
B. Missing 'done' to close the for loop
C. Wrong variable name for IP address
D. No error, script is correct
Solution
Step 1: Check for loop syntax completeness
The for loop starts with for ip in ... but lacks the closing done keyword.
Step 2: Confirm other parts are correct
The ping command and if condition use correct syntax and variable names.
Final Answer:
Missing 'done' to close the for loop -> Option B
Quick Check:
For loops need 'done' to end = A [OK]
Hint: Always end bash loops with 'done' [OK]
Common Mistakes:
Forgetting 'done' after loops
Using wrong ping options
Using undefined variables
5. You want to create a script that checks multiple IPs and logs only unreachable ones to a file named unreachable.log. Which snippet correctly does this?
hard
A. for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip > /dev/null || echo "$ip unreachable" >> unreachable.log
done
B. for ip in 192.168.1.1 192.168.1.2; do
if ping -c 1 $ip > /dev/null; then
echo "$ip unreachable" >> unreachable.log
fi
done
C. for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip >> unreachable.log
done
D. for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip || echo "$ip reachable" >> unreachable.log
done
Solution
Step 1: Understand the goal
The script should log only unreachable IPs to unreachable.log.
Step 2: Analyze each option
for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip > /dev/null || echo "$ip unreachable" >> unreachable.log
done uses ping -c 1 $ip > /dev/null || echo "$ip unreachable" >> unreachable.log, which logs IPs only if ping fails (unreachable). for ip in 192.168.1.1 192.168.1.2; do
if ping -c 1 $ip > /dev/null; then
echo "$ip unreachable" >> unreachable.log
fi
done logs reachable IPs incorrectly. for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip >> unreachable.log
done logs all ping output, not just unreachable. for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip || echo "$ip reachable" >> unreachable.log
done logs reachable IPs as unreachable.
Final Answer:
for ip in 192.168.1.1 192.168.1.2; do
ping -c 1 $ip > /dev/null || echo "$ip unreachable" >> unreachable.log
done -> Option A
Quick Check:
Use '||' to log failures only = A [OK]
Hint: Use '||' to log only when ping fails [OK]
Common Mistakes:
Logging reachable IPs instead of unreachable
Appending all ping output to log
Using wrong conditional logic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.