Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Network monitoring script in Bash Scripting - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Network monitoring script
O(n)
Understanding Time Complexity

We want to understand how the time needed to run a network monitoring script changes as we check more hosts.

How does the script's work grow when the list of hosts gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

#!/bin/bash
hosts=("192.168.1.1" "192.168.1.2" "192.168.1.3")

for host in "${hosts[@]}"; do
  ping -c 1 "$host" >/dev/null 2>&1
  if [ $? -eq 0 ]; then
    echo "$host is up"
  else
    echo "$host is down"
  fi
done

This script checks if each host in the list is reachable by sending one ping and then prints if it is up or down.

Identify Repeating Operations
  • Primary operation: The for-loop that pings each host once.
  • How many times: Once for each host in the list.
How Execution Grows With Input

Each new host adds one more ping command to run, so the total work grows directly with the number of hosts.

Input Size (n)Approx. Operations
1010 pings
100100 pings
10001000 pings

Pattern observation: The work increases steadily and proportionally as the list of hosts grows.

Final Time Complexity

Time Complexity: O(n)

This means the time to finish grows in a straight line with the number of hosts checked.

Common Mistake

[X] Wrong: "The script runs in constant time because each ping is quick."

[OK] Correct: Even if one ping is fast, the script runs one ping per host, so more hosts mean more total time.

Interview Connect

Understanding how loops affect time helps you explain script efficiency clearly and shows you can think about scaling tasks.

Self-Check

"What if we changed the script to ping each host 5 times instead of once? How would the time complexity change?"

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

  1. 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.
  2. Step 2: Identify the script's goal

    The script uses ping to detect if devices respond, helping find network problems early.
  3. Final Answer:

    To check if devices on the network are reachable -> Option D
  4. 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

  1. Step 1: Recall the ping option for count

    In Linux bash, -c specifies the number of ping requests to send.
  2. Step 2: Verify the correct command format

    ping -c 1 192.168.1.1 sends exactly one ping to the IP address.
  3. Final Answer:

    ping -c 1 192.168.1.1 -> Option C
  4. 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

  1. 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.
  2. Step 2: Analyze the if condition and output

    If ping succeeds, the script prints "Host is reachable"; otherwise, it prints "Host is unreachable".
  3. Final Answer:

    Host is reachable -> Option A
  4. 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

  1. Step 1: Check for loop syntax completeness

    The for loop starts with for ip in ... but lacks the closing done keyword.
  2. Step 2: Confirm other parts are correct

    The ping command and if condition use correct syntax and variable names.
  3. Final Answer:

    Missing 'done' to close the for loop -> Option B
  4. 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

  1. Step 1: Understand the goal

    The script should log only unreachable IPs to unreachable.log.
  2. 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.
  3. 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
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard