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)