I once needed a quick system overview—CPU load, memory usage, disk space—but opening multiple commands felt inefficient. Instead of running top
, df -h
, and free -m
separately, I decided to automate everything in a single Bash script.
The result? A custom system fetch tool that provides essential system details at a glance. In this guide, you'll learn how to build your own step by step, improving your Bash scripting skills along the way.
Step 1: The Basics (What We’re Fetching)
Before we jump into coding, let’s outline what information we need:
✅ CPU Model & Load (/proc/cpuinfo
, top
)
✅ Memory Usage (free -m
)
✅ Disk Space (df -h
)
✅ System Uptime (uptime
)
✅ Network Information (ip a
, hostname -I
)
Step 2: Writing the Script (Fundamentals First)
1️⃣ Shebang & Setup
Start by specifying Bash as the interpreter and clearing the screen:
#!/bin/bash
clear
2️⃣ Fetching CPU Info
Extract the CPU model name using grep
on /proc/cpuinfo
:
cpu_model=$(grep "model name" /proc/cpuinfo | head -1 | cut -d ':' -f2)
Get the CPU load using top
(or uptime
for a lightweight alternative):
cpu_load=$(top -bn1 | grep "load average" | awk '{print $10}')
3️⃣ Checking Memory Usage
Use free -m
to display RAM usage in MB:
mem_usage=$(free -m | awk 'NR==2{printf "Used: %sMB / Total: %sMB", $3, $2}')
4️⃣ Fetching Disk Space
List available disk space using df -h
:
disk_usage=$(df -h | awk '$NF=="/"{printf "Used: %d%%", $5}')
5️⃣ Displaying Network Info
Fetch the current IP address:
ip_address=$(hostname -I | awk '{print $1}')
Step 3: Formatting Output for Readability
Instead of printing raw text, format the output neatly using colors and spacing:
echo -e "\033[32mSystem Information:\033[0m"
echo "-------------------------------"
echo -e "CPU Model: $cpu_model"
echo -e "CPU Load: $cpu_load"
echo -e "Memory: $mem_usage"
echo -e "Disk Space: $disk_usage"
echo -e "IP Address: $ip_address"
🔹 Why it’s useful:
- Colors improve readability
- Consistent spacing makes it visually appealing
Step 4: Running the Script
-
Save the script as
sysfetch.sh
- Make it executable:
chmod +x sysfetch.sh
- Run it:
./sysfetch.sh
📌 Expected Output (Example):
System Information:
-------------------------------
CPU Model: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
CPU Load: 0.78
Memory: Used: 3800MB / Total: 16000MB
Disk Space: Used: 42%
IP Address: 192.168.1.10
Step 5: Enhancing the Script
✅ Add Live Updates
Instead of a one-time report, refresh every few seconds:
while true; do
clear
./sysfetch.sh
sleep 5
done
✅ Save Output to a Log File
Redirect output for future analysis:
./sysfetch.sh | tee system_report.txt
✅ Make It Interactive
Allow users to choose what info to display:
echo "Select an option: [1] CPU [2] Memory [3] Disk [4] All"
read choice
case $choice in
1) echo "CPU Model: $cpu_model" ;;
2) echo "Memory: $mem_usage" ;;
3) echo "Disk Space: $disk_usage" ;;
4) ./sysfetch.sh ;;
*) echo "Invalid option" ;;
esac
Final Thoughts
Creating a custom system fetch tool is a great way to:
✅ Improve your Bash scripting skills
✅ Understand Linux system commands
✅ Make system monitoring more efficient
If you're a beginner, this project gives you real-world Bash experience. If you're advanced, you can customize it further with more data points.
Want a Quick Reference for Bash Basics?
If you're just getting started with Bash and need a beginner-friendly guide, check out my Bash Scripting Cheat Book:
📌 A quick reference for beginners to understand Bash scripting faster
📌 Covers fundamental concepts like variables, loops, conditionals, and functions
📌 Designed for absolute beginners—no advanced topics covered
👉 Get the Bash Scripting Cheat Book for just $3.99
Discussion: What System Info Do You Track in Your Bash Scripts?
Drop a comment below and share what extra system details you’d add to this script!
Top comments (0)