reworking content
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
This commit is contained in:
142
landing/docs/Bash-Scripts/015-writing-your-first-bash-script.md
Normal file
142
landing/docs/Bash-Scripts/015-writing-your-first-bash-script.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Your First Bash Script
|
||||
|
||||
Time to build your first Bash script. We'll create a script to monitor server status, including:
|
||||
* Disk usage
|
||||
* CPU load
|
||||
* RAM usage (Memory)
|
||||
* TCP connections
|
||||
* Kernel version
|
||||
|
||||
Customize as needed.
|
||||
|
||||
### Script Setup
|
||||
|
||||
First, create your script file, `status.sh`:
|
||||
|
||||
```bash
|
||||
touch status.sh
|
||||
```
|
||||
|
||||
Open `status.sh` with your text editor. Start with the shebang, `#!/usr/bin/env bash`. This tells the system how to execute the script.
|
||||
|
||||
Add initial comments for clarity:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Script to report current server status.
|
||||
```
|
||||
|
||||
### Variables
|
||||
|
||||
Variables store data. Assign values using `=` (no spaces). Use `$()` for command substitution.
|
||||
|
||||
Capture the server's hostname:
|
||||
|
||||
```bash
|
||||
server_name=$(hostname)
|
||||
```
|
||||
|
||||
Echo the variable to see its value:
|
||||
|
||||
```bash
|
||||
echo "${server_name}"
|
||||
```
|
||||
|
||||
### Functions
|
||||
|
||||
Functions group commands for reuse. Let's create one for memory usage:
|
||||
|
||||
```bash
|
||||
function memory_check() {
|
||||
echo ""
|
||||
echo "Memory usage on ${server_name}: "
|
||||
free -h
|
||||
echo ""
|
||||
}
|
||||
```
|
||||
|
||||
This function prints a message and calls `free -h` for memory details. Call it by name (no parentheses):
|
||||
|
||||
```bash
|
||||
memory_check
|
||||
```
|
||||
|
||||
Before seeing the complete solution, try implementing functions for:
|
||||
* Disk usage
|
||||
* CPU load
|
||||
* TCP connections
|
||||
* Kernel version
|
||||
|
||||
Google commands if needed. There are multiple valid approaches.
|
||||
|
||||
### The Complete Script
|
||||
|
||||
Here's the full `status.sh` script:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##
|
||||
# Server status script:
|
||||
# - Memory usage
|
||||
# - CPU load
|
||||
# - TCP connections
|
||||
# - Kernel version
|
||||
##
|
||||
|
||||
server_name=$(hostname)
|
||||
|
||||
function memory_check() {
|
||||
echo ""
|
||||
echo "Memory usage on ${server_name}: "
|
||||
free -h
|
||||
echo ""
|
||||
}
|
||||
|
||||
function cpu_check() {
|
||||
echo ""
|
||||
echo "CPU load on ${server_name}: "
|
||||
echo ""
|
||||
uptime
|
||||
echo ""
|
||||
}
|
||||
|
||||
function tcp_check() {
|
||||
echo ""
|
||||
echo "TCP connections on ${server_name}: "
|
||||
echo ""
|
||||
cat /proc/net/tcp | wc -l
|
||||
echo ""
|
||||
}
|
||||
|
||||
function kernel_check() {
|
||||
echo ""
|
||||
echo "Kernel version on ${server_name}: "
|
||||
echo ""
|
||||
uname -r
|
||||
echo ""
|
||||
}
|
||||
|
||||
function all_checks() {
|
||||
memory_check
|
||||
cpu_check
|
||||
tcp_check
|
||||
kernel_check
|
||||
}
|
||||
|
||||
all_checks
|
||||
```
|
||||
|
||||
Save `status.sh`, then make it executable and run:
|
||||
|
||||
```bash
|
||||
chmod +x status.sh
|
||||
./status.sh
|
||||
```
|
||||
|
||||
### Conclusion
|
||||
|
||||
Bash scripting combines Linux commands to automate routine tasks, freeing you for more impactful work. This basic script demonstrates the power of automation.
|
||||
|
||||
> {notice} This content was inspired by a piece by softwareshinobi on Dev Team Six.
|
||||
Reference in New Issue
Block a user