Introduction
This guide covers concepts focusing on arrays, loops, file operations, arithmetic operations, and string manipulation.
1. Arrays in Bash
Arrays in Bash are zero-indexed lists of values. There are several ways to declare and initialize arrays.
Declaring and Initializing Arrays
- Using declare: ```bash
declare -a my_array
2. Implicit declaration with initialization:
```bash
my_array=(apple banana cherry)
- Empty array declaration: ```bash
my_array=()
4. Declaring with specific indices:
```bash
my_array=([0]="apple" [1]="banana" [5]="cherry")
- Declaring empty and adding elements: ```bash
my_array=()
my_array+=("apple")
my_array+=("banana")
6. Declaring a read-only array:
```bash
declare -ar my_readonly_array=(apple banana cherry)
Accessing and Manipulating Arrays
# Access elements
echo ${my_array[0]} # Output: apple
# Get all elements
echo ${my_array[@]} # Output: apple banana cherry
# Get array length
echo ${#my_array[@]} # Output: 3
# Slicing an array
echo ${my_array[@]:1:2} # Output: banana cherry (from index 1, take 2 elements)
# Finding the indices of an array
echo ${!my_array[@]} # Output: 0 1 2 (or 0 1 5 for the array with specific indices)
2. Loops in Bash
Bash provides several types of loops for repetitive tasks.
For Loops
- Traditional for loop: ```bash
for i in 1 2 3 4 5
do
echo $i
done
2. C-style for loop:
```bash
for ((i=0; i<5; i++))
do
echo $i
done
- For loop with array: ```bash
fruits=(apple banana cherry)
for fruit in "${fruits[@]}"
do
echo $fruit
done
4. For loop with command substitution:
```bash
for file in $(ls)
do
echo $file
done
While Loops
Basic while loop syntax:
count=1
while [ $count -le 5 ]
do
echo "Count is: $count"
((count++))
done
3. File Operations
Reading from and writing to files is a common task in Bash scripting.
Reading a File Line by Line
while IFS= read -r line
do
echo "Line: $line"
done < "input.txt"
Writing to a File
echo "Hello, World!" > output.txt
echo "Appending this line" >> output.txt
4. Arithmetic Operations in Bash
Bash offers various methods for arithmetic operations:
# Using let
let result=5+3
echo $result # Output: 8
# Using (( ))
((result = 5 + 3))
echo $result # Output: 8
# Using $[ ]
result=$[5 + 3]
echo $result # Output: 8
# Using expr (note the spaces)
result=$(expr 5 + 3)
echo $result # Output: 8
5. String Manipulation
String Case Checking
This example checks if given strings start with uppercase or lowercase letters:
#!/bin/bash
declare -a upper
declare -a lower
words=("Hello" "world" "BASH" "script" "ARRAY" "example")
for word in "${words[@]}"
do
if [[ $word == [[:upper:]]* ]]
then
upper+=("$word")
elif [[ $word == [[:lower:]]* ]]
then
lower+=("$word")
fi
done
echo "Uppercase words: ${upper[@]}"
echo "Lowercase words: ${lower[@]}"
Advanced Pattern Matching
This script demonstrates number detection and pattern matching:
#!/bin/bash
declare -a num_var
declare -a userid_var
declare -a other_var
strings=("123" "abc" "456" "1234abcd56" "789xyz" "2023user01" "hello123")
for str in "${strings[@]}"
do
if [[ $str =~ ^[0-9]+$ ]]
then
# String is a number
num_var+=("$str")
elif [[ $str =~ ^[0-9]{4}[a-z]{4}[0-9]{2}$ ]]
then
# String matches pattern \d{4}[a-z]{4}\d{2}
userid_var+=("$str")
else
# String doesn't match any specific category
other_var+=("$str")
fi
done
echo "Numbers: ${num_var[@]}"
echo "User IDs: ${userid_var[@]}"
echo "Other strings: ${other_var[@]}"
6. Comprehensive Example: File Processing and Data Categorization
This example combines file reading, loops, and string manipulation to categorize data from a file:
#!/bin/bash
# Initialize arrays for different types of data
declare -a names
declare -a numbers
declare -a emails
declare -a mixed
# Read the file line by line
while IFS= read -r line
do
# Check if line is a name (contains only letters and spaces)
if [[ $line =~ ^[[:alpha:][:space:]]+$ ]]
then
names+=("$line")
# Check if line is a number
elif [[ $line =~ ^[0-9]+$ ]]
then
numbers+=("$line")
# Check if line is an email
elif [[ $line =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$ ]]
then
emails+=("$line")
# If it doesn't match any of the above, it's mixed content
else
mixed+=("$line")
fi
done < "data.txt"
# Print the categorized data
echo "Names: ${names[@]}"
echo "Numbers: ${numbers[@]}"
echo "Emails: ${emails[@]}"
echo "Mixed Content: ${mixed[@]}"
This script reads a file named data.txt
, categorizes each line based on its content, and stores it in the appropriate array.
Conclusion
This tutorial has covered essential Bash scripting concepts including:
- Array declaration and manipulation
- For and while loops
- File reading and writing operations
- Arithmetic operations
- String manipulation and pattern matching
- A comprehensive example combining multiple concepts
Top comments (0)