Bash Shell Scripting: A Comprehensive Guide
August 12th, 2024 10:26 AM Mr. Q Categories: Command
Bash (Bourne Again SHell) is a popular Unix shell and command language. Writing shell scripts allows you to automate tasks and manage system processes efficiently. This guide covers basic concepts, common commands, and provides sample scripts to get you started.
1. Introduction to Bash Scripts
A Bash script is a text file containing a series of commands that the Bash interpreter executes. Scripts can automate repetitive tasks, manage system configurations, and perform complex operations.
2. Writing a Basic Bash Script
File Name: myscript.sh
Content:
#!/bin/bash
# This is a comment
echo "Hello, World!"
Description:
#!/bin/bash
: Shebang line specifying the script interpreter.echo "Hello, World!"
: Command to print “Hello, World!” to the terminal.
Make the script executable:
chmod +x myscript.sh
Run the script:
./myscript.sh
Sample Output:
Hello, World!
3. Variables and User Input
File Name: vars_input.sh
Content:
#!/bin/bash
# Define variables
name="John"
age=30
# Print variables
echo "Name: $name"
echo "Age: $age"
# Read user input
read -p "Enter your name: " user_name
echo "Hello, $user_name!"
Description:
name
andage
are variables.read -p "Enter your name: "
prompts for user input.$user_name
captures the input.
Sample Output:
Name: John
Age: 30
Enter your name: Alice
Hello, Alice!
4. Conditional Statements
File Name: conditionals.sh
Content:
#!/bin/bash
# Read user input
read -p "Enter a number: " number
# Conditional statement
if [ $number -gt 10 ]; then
echo "Number is greater than 10"
elif [ $number -eq 10 ]; then
echo "Number is equal to 10"
else
echo "Number is less than 10"
fi
Description:
if [ $number -gt 10 ]
: Checks if the number is greater than 10.elif [ $number -eq 10 ]
: Checks if the number is equal to 10.else
: Handles all other cases.
Sample Output:
Enter a number: 15
Number is greater than 10
5. Loops
File Name: loops.sh
Content:
#!/bin/bash
# For loop
for i in {1..5}; do
echo "Loop iteration: $i"
done
# While loop
count=1
while [ $count -le 5 ]; do
echo "Count is $count"
((count++))
done
Description:
for i in {1..5}
: Loops through numbers 1 to 5.while [ $count -le 5 ]
: Loops while$count
is less than or equal to 5.
Sample Output:
Loop iteration: 1
Loop iteration: 2
Loop iteration: 3
Loop iteration: 4
Loop iteration: 5
Count is 1
Count is 2
Count is 3
Count is 4
Count is 5
6. Functions
File Name: functions.sh
Content:
#!/bin/bash
# Define a function
greet() {
local name=$1
echo "Hello, $name!"
}
# Call the function
greet "Alice"
greet "Bob"
Description:
greet()
: Defines a function that takes one argument.local name=$1
: Assigns the first argument to thename
variable.
Sample Output:
Hello, Alice!
Hello, Bob!
7. Case Statements
File Name: case_example.sh
Content:
#!/bin/bash
# Read user input
read -p "Enter a fruit name (apple/banana/grape): " fruit
# Case statement
case $fruit in
apple)
echo "You selected an apple."
;;
banana)
echo "You selected a banana."
;;
grape)
echo "You selected a grape."
;;
*)
echo "Unknown fruit."
;;
esac
Description:
case $fruit in
: Starts the case statement.- Each pattern (
apple
,banana
,grape
) is followed by)
, indicating the block of code to execute if the pattern matches. *)
: Default case if no patterns match.
Sample Output:
Enter a fruit name (apple/banana/grape): banana
You selected a banana.
8. File Operations
File Name: file_ops.sh
Content:
#!/bin/bash
# Create a file and write to it
echo "This is a test file." > testfile.txt
# Append to the file
echo "Appending more text." >> testfile.txt
# Display the file contents
cat testfile.txt
Description:
echo "This is a test file." > testfile.txt
: Creates and writes totestfile.txt
.>>
: Appends text to the file.cat testfile.txt
: Displays the contents of the file.
Sample Output:
This is a test file.
Appending more text.
9. Error Handling
File Name: error_handling.sh
Content:
#!/bin/bash
# Command that may fail
if ! ls /nonexistent_directory; then
echo "Directory not found!"
fi
Description:
if ! ls /nonexistent_directory; then
: Checks if thels
command fails.echo "Directory not found!"
: Prints an error message if the directory does not exist.
Sample Output:
ls: cannot access '/nonexistent_directory': No such file or directory
Directory not found!
10. Miscellaneous Commands
10.1. awk
: Pattern scanning and processing language.
File Name: awk_example.sh
Content:
#!/bin/bash
# Sample file: data.txt
# Name,Age
# John,30
# Alice,25
# Bob,35
# Use awk to print the name column
awk -F, '{print $1}' data.txt
Description:
-F,
: Sets the field separator to a comma.{print $1}
: Prints the first column.
Sample Output:
Name
John
Alice
Bob
10.2. cut
: Remove sections from each line of files.
File Name: cut_example.sh
Content:
#!/bin/bash
# Sample file: data.txt
# John:30
# Alice:25
# Bob:35
# Use cut to extract the name column
cut -d: -f1 data.txt
Description:
-d:
: Sets the delimiter to a colon.-f1
: Extracts the first field.
Sample Output:
John
Alice
Bob
10.3. tr
: Translate or delete characters.
File Name: tr_example.sh
Content:
#!/bin/bash
# Sample input
echo "hello world" | tr 'a-z' 'A-Z'
Description:
tr 'a-z' 'A-Z'
: Translates lowercase letters to uppercase.
Sample Output:
HELLO WORLD
10.4. join
: Join lines of two files on a common field.
File Name: join_example.sh
Content:
#!/bin/bash
# Sample files:
# file1.txt
# 1 John
# 2 Alice
# 3 Bob
# file2.txt
# 1 Developer
# 2 Designer
# 3 Manager
# Use join to combine files on the first field
join file1.txt file2.txt
Description:
join file1.txt file2.txt
: Joins lines offile1.txt
andfile2.txt
based on the common field.
Sample Output:
1 John Developer
2 Alice Designer
3 Bob Manager
10.5. xargs
: Build and execute command lines from standard input.
File Name: xargs_example.sh
Content:
#!/bin/bash
# Sample input
echo "file1.txt file2.txt" | xargs ls -l
Description:
xargs ls -l
: Executesls -l
on the files listed in the input.
Sample Output:
-rw-r--r-- 1 user user 0 Aug 9 12:00 file1.txt
-rw-r--r-- 1 user user 0 Aug 9 12:00 file2.txt
**10.6. sed
: Stream editor