Bash Script Tutorial
1. Script Basics
1.1 Creating a Bash Script
-
Create a script file with a
.sh
extension:bashtouch myscript.sh
-
Make the script executable:
bashchmod +x myscript.sh
-
Add the shebang line at the top to specify the interpreter:
bash#!/bin/bash
1.2 Running a Bash Script
Run the script from the terminal by providing the path:
bash
./myscript.sh
2. Variables
2.1 Defining Variables
Variables do not need a data type declaration in Bash:
bash
name="John"
age=25
2.2 Accessing Variables
Use the $
symbol to access a variable's value:
bash
echo "My name is $name and I am $age years old."
2.3 Reading User Input
You can use the read
command to get input from the user:
bash
echo "Enter your name:"
read user_name
echo "Hello, $user_name!"
3. Conditionals
3.1 if
Statements
bash
if [ condition ]; then
# Code to execute if the condition is true
fi
3.2 if-else
Statements
bash
if [ condition ]; then
echo "Condition is true"
else
echo "Condition is false"
fi
3.3 if-elif-else
Example
bash
if [ $age -lt 18 ]; then
echo "You are a minor."
elif [ $age -ge 18 ] && [ $age -lt 65 ]; then
echo "You are an adult."
else
echo "You are a senior."
fi
3.4 File Conditionals
Check if a file or directory exists:
bash
if [ -f "/path/to/file" ]; then
echo "File exists."
fi
if [ -d "/path/to/directory" ]; then
echo "Directory exists."
fi
3.5 String Comparison
bash
str1="hello"
str2="world"
if [ "$str1" == "$str2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
4. Loops
4.1 for
Loop
bash
for i in 1 2 3; do
echo $i
done
4.2 for
Loop with Range
bash
for i in {1..5}; do
echo $i
done
4.3 while
Loop
bash
count=1
while [ $count -le 5 ]; do
echo $count
((count++))
done
4.4 until
Loop
bash
count=1
until [ $count -gt 5 ]; do
echo $count
((count++))
done
5. Arrays
5.1 Declaring Arrays
bash
fruits=("apple" "banana" "cherry")
5.2 Accessing Array Elements
bash
echo ${fruits[0]} # Output: apple
5.3 Looping Through an Array
bash
for fruit in "${fruits[@]}"; do
echo $fruit
done
5.4 Array Length
bash
echo ${#fruits[@]} # Output: 3
6. Functions
6.1 Defining a Function
bash
function greet() {
echo "Hello, $1!"
}
6.2 Calling a Function
bash
greet "Alice" # Output: Hello, Alice!
6.3 Returning Values
Bash functions return values using return
or output:
bash
function add() {
local sum=$(( $1 + $2 ))
echo $sum
}
result=$(add 10 20)
echo "Sum: $result" # Output: Sum: 30
7. File and Directory Operations
7.1 Creating Directories
bash
mkdir myfolder
7.2 Checking if a Directory Exists
bash
if [ ! -d "myfolder" ]; then
mkdir myfolder
fi
7.3 Listing Files in a Directory
bash
for file in *; do
echo $file
done
8. Input/Output Redirection
8.1 Redirecting Output to a File
bash
echo "Hello, World!" > output.txt # Overwrites the file
echo "Append this line" >> output.txt # Appends to the file
8.2 Redirecting Input from a File
bash
while read line; do
echo $line
done < input.txt
8.3 Redirecting Error Output
bash
command 2> error.log # Redirect stderr to error.log
command > output.log 2>&1 # Redirect stdout and stderr to output.log
9. Special Variables
9.1 Positional Parameters
bash
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
9.2 Script Exit Status
bash
command
if [ $? -eq 0 ]; then
echo "Command succeeded."
else
echo "Command failed."
fi
9.3 Looping Through Arguments
bash
for arg in "$@"; do
echo "Argument: $arg"
done
10. Miscellaneous
10.1 Exit Script with Status Code
bash
if [ "$user" != "admin" ]; then
echo "Access denied."
exit 1
fi
10.2 Sleeping for a Few Seconds
bash
sleep 5 # Waits for 5 seconds
10.3 Commenting in Bash
Use #
for single-line comments:
bash
# This is a comment
echo "This is code."
11. Combining Everything in a Complete Script Example
Here's a complete example script that demonstrates many of these concepts:
bash
#!/bin/bash
# Function to create a directory if it doesn't exist
create_directory() {
if [ ! -d "$1" ]; then
mkdir "$1"
echo "Directory '$1' created."
else
echo "Directory '$1' already exists."
fi
}
# Greet the user
echo "Enter your name:"
read user_name
echo "Hello, $user_name!"
# Create directories
projects=("project1" "project2" "project3")
for project in "${projects[@]}"; do
create_directory "$project"
done
# Example of a conditional
if [ "$user_name" == "admin" ]; then
echo "Welcome, admin!"
else
echo "You are not the admin."
fi
# Example of a loop
for i in {1..5}; do
echo "Iteration $i"
done
# Function with return value
function add() {
local result=$(( $1 + $2 ))
echo $result
}
sum=$(add 10 20)
echo "The sum of 10 and 20 is: $sum"