Table of contents
- Why Shell Scripting?
- First Clear about, Shell and Bash:
- Getting Started with Shell Scripting
- Writing and Running Shell Scripts
- Shell Script Example: File Operations
- Adding Metadata to Shell Scripts
- Shell Scripting in DevOps
- Health Check Commands for Systems:
- Debugging Shell Scripts
- Error Handling in Shell Scripts
- Networking Tools in Shell Scripting
- Advanced Topics in Shell Scripting
- Reading Files in Bash
- Passing Parameters to Scripts
- Conclusion
Shell scripting is an essential skill for anyone working with Linux systems or DevOps. It helps automate repetitive tasks, making server management efficient and freeing up time for more critical activities. In this post, we'll cover everything from creating your first script to advanced features such as conditional statements, loops, and file handling.
Why Shell Scripting?
Shell scripting allows automation of tasks such as:
System monitoring: Automating checks for CPU, RAM, and disk space usage.
Configuration management: Automating the setup of servers or applications.
Task automation: Automating repetitive tasks like backups, updates, or file manipulations.
First Clear about, Shell and Bash:
Shell provides the Linux command line interface.
A shell is a program that allows users to interact with the operating system using commands.
The default shell for many Linux distros is Bash.
A terminal is a program that provides a user interface to interact with the shell. It’s a window where you type commands and see the output
Bash is succeeded by the Bourne shell (
sh
).When a shell is used interactively, the prompt displays
$
for a regular user and#
for the root user.Example for regular user:
[username@host ~]$
Example for root user:
[root@host ~]#
Getting Started with Shell Scripting
1. Creating Your First Shell Script
To begin with shell scripting, follow these steps to create your very first script:
Create a new script file:
touch first-shell-script.sh
Open the file in your favorite text editor (like
vi
ornano
):vi first-shell-script.sh
2. Understanding the Shebang (#!
)
The shebang (
#!
) is the first line in a shell script, specifying which interpreter to use when running the script. For example:#! /bin/bash
- This line tells the system to use the Bash shell to execute the script.
Common interpreters include:
/bin/sh
(Bash or other shells)/bin/bash
(Bash shell)/bin/dash
(lightweight shell)
Differences Between
/bin/sh
and/bin/bash
:Historically,
/bin/sh
was linked to/bin/bash
.Some Linux systems (e.g., Ubuntu) link
/bin/sh
to/bin/dash
, which has a different syntax and features than bash.If you want to ensure a script runs with bash, always use
#!/bin/bash
.
Writing and Running Shell Scripts
1. Basic Command to Print
To print a simple message, use the echo
command:
echo "Hello, Shell Script!"
2. Executing Shell Scripts
To run a script, you have two options:
Using
sh
:sh first-shell-script.sh
Using
./
(requires executable permission):./first-shell-script.sh
- Note: You need to set executable permissions first:
chmod +x first-shell-script.sh
3. Changing File Permissions
To make your script executable, use:
chmod +x first-shell-script.sh
Shell Script Example: File Operations
Let’s look at a basic shell script that creates a directory, adds a file, and deletes them.
Output:
Adding Metadata to Shell Scripts
Including metadata at the beginning of your shell script is essential for clarity, collaboration, and version control. It provides critical information about the script's creation and purpose, especially when scripts are shared or maintained by multiple people. Here’s why including the following metadata is important:
Author: Identifies who wrote the script, which helps when you need to reach out for clarification or updates.
Date: Documents when the script was written or last modified, helping track changes over time.
Purpose: Describes the goal or function of the script, so others can quickly understand its intended use without needing to read through the entire code.
Version: Tracks different versions of the script, helping with maintenance, and ensuring you're using the most up-to-date version.
Shell Scripting in DevOps
In the world of DevOps, shell scripting plays a vital role in automating infrastructure management, configuration management, and system monitoring.
Real-World Example: Health Check Script
Imagine John, a DevOps engineer managing 10,000 virtual machines at Amazon. To ensure everything runs smoothly, he writes a script to monitor CPU and memory usage:
Output Example:
Health Check Commands for Systems:
Some useful commands for system health checks:
df
: Disk space usagefree
: Memory usagenproc
: Number of CPU corestop
: Process and resource usage monitoring
Debugging Shell Scripts
Debugging scripts is crucial, especially when something goes wrong. To enable debugging, use:
set -x
This command prints each command as it is executed, helping you track down errors more easily.
Error Handling in Shell Scripts
Effective error handling ensures your script behaves predictably and avoids unexpected failures:
set -e
: Automatically stops the script if any command returns a non-zero status, preventing further execution of flawed commands.set -o pipefail
: Ensures the script exits if any command in a pipeline fails, even if the final command succeeds.Example usage:
set -exo pipefail
Networking Tools in Shell Scripting
Networking tools make it easy to interact with servers, APIs, and remote files directly from your script:
curl
: A powerful tool for transferring data over protocols like HTTP and FTP. Commonly used for API testing or fetching data from servers.Example:
curl -X GET https://api.example.com
wget
: Ideal for downloading files over HTTP, HTTPS, or FTP. It supports features like recursive downloads and automatic file saving.Example:
wget https://example.com/file.zip
Advanced Topics in Shell Scripting
Variables and Arithmetic
Defining variables:
name="John" echo "Hello, $name!"
Arithmetic operations:
result=$(( 5 + 3 )) echo "The result is $result"
Output:
The result is 8
Numeric Comparison:
Conditionals: If-Else Statements
Shell scripting allows you to use conditional statements to perform tasks based on certain conditions.
Example:
if [ $age -gt 18 ]; then
echo "You are an adult."
else
echo "You are a minor."
fi
Output (if age=20
):
You are an adult.
Loops in Bash
Loops are used to repeat tasks. There are several types of loops in Bash:
For Loop:
for i in 1 2 3 4 do echo "Number: $i" done
Output:
Number: 1 Number: 2 Number: 3 Number: 4
While Loop:
count=1 while [ $count -le 5 ] do echo "Count is $count" ((count++)) done
Output:
Count is 1 Count is 2 Count is 3 Count is 4 Count is 5
Reading User Input
To capture user input, use the read
command:
read -p "Enter your name: " name
echo "Hello, $name!"
Output (if user inputs "Alice"):
Hello, Alice!
Reading Files in Bash
Bash allows you to read files line-by-line, making it easy to process text files within a script. Here's how:
LINE=1
while read -r CURRENT_LINE; do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "sample_file.txt"
Explanation:
while read -r
: Reads each line from the file.CURRENT_LINE
: Holds the content of the current line.((LINE++))
: Increments the line counter after processing each line.< "sample_file.txt"
: Specifies the file to read.
Passing Parameters to Scripts
You can pass arguments to a script using positional parameters like $1
, $2
, etc.
Example script:
#!/bin/bash
echo "First Parameter: $1"
echo "Second Parameter: $2"
echo "All Parameters: $@"
echo "Number of Parameters: $#"
Explanation:
$1
,$2
: Hold the first and second arguments passed to the script.$@
: Represents all the arguments.$#
: Shows the total number of arguments.
Running the script:
Bash script.sh Hello World
Output:
First Parameter: Hello
Second Parameter: World
All Parameters: Hello World
Number of Parameters: 2
This demonstrates how to pass and handle dynamic input in your shell scripts.
Conclusion
Shell scripting is an essential skill that can automate system management, help with DevOps tasks, and increase productivity. Whether you’re managing servers, checking system health, or automating tasks, shell scripting will save you valuable time and effort.
If you're just starting, focus on mastering the basics such as creating scripts, understanding variables, and using loops. With practice, you'll be able to create powerful scripts that handle complex tasks efficiently.
If you found this blog helpful and want to follow along with my DevOps journey, feel free to subscribe and connect with me on LinkedIn and X.
Let’s grow together! 🚀😇