Bash scripts automate repetitive network tasks by combining command-line tools like ping, curl, ssh, and nslookup into reusable workflows. Instead of manually running commands dozens of times, you write a script once and execute it instantly. This guide teaches you to build production-ready networking scripts that save hours of manual work.
Bash is the de facto standard for Unix-like systems because it's available everywhere—servers, cloud instances, containers. Unlike Python or Perl, you don't need to install dependencies. Bash scripts run immediately on any Linux or macOS system. It excels at orchestrating existing CLI tools and handling text processing, which is core to networking tasks.
Network administrators use Bash for monitoring uptime, bulk server configuration, automated backups, log analysis, and incident response. The skills transfer directly to DevOps, cloud engineering, and systems administration roles.
Every Bash script starts with a shebang—the line that tells the system to interpret the file as a Bash script.
#!/bin/bash
# This is a comment
echo "Hello from Bash!"
To make this executable:
chmod +x script.sh
./script.sh
The shebang #!/bin/bash must be the first line. Without it, the system won't know how to run your script. Always use this rather than relying on the user to call bash script.sh manually.
One of the most practical networking scripts checks whether multiple servers are reachable. This script pings a list of hosts and reports their status.
#!/bin/bash
# Define target hosts
HOSTS=("8.8.8.8" "1.1.1.1" "example.com" "192.168.1.1")
TIMEOUT=2
echo "=== Host Connectivity Report =="
echo "Timestamp: $(date)"
echo
for host in "${HOSTS[@]}"; do
if ping -c 1 -W $TIMEOUT "$host" &> /dev/null; then
echo "✓ $host is ONLINE"
else
echo "✗ $host is OFFLINE"
fi
done
This script loops through each host, sends a single ping request with a 2-second timeout, and prints the result. The &> /dev/null suppresses output so you only see your custom status messages. This is the foundation for uptime monitoring—extend it by logging results to a file and setting up cron jobs for continuous checks.
/usr/bin/curl instead of curl because cron jobs have limited PATH variables.