1. Array Manipulation
Arrays in Bash allow you to store multiple values in a single variable.
#!/bin/bash
# Declare an array
fruits=("apple" "banana" "cherry")
# Access elements
echo ${fruits[0]} # apple
# Print all elements
echo ${fruits[@]}
# Array length
echo ${#fruits[@]}
# Add element
fruits+=("date")
# Iterate over array
for fruit in "${fruits[@]}"
do
echo $fruit
done
2. Regular Expressions
Use regular expressions for pattern matching and text processing.
#!/bin/bash
text="The quick brown fox"
if [[ $text =~ ^The.+fox$ ]]
then
echo "Match found"
fi
# Extract matching part
[[ $text =~ brown ]] && echo "${BASH_REMATCH[0]}"
3. Process Substitution
Use process substitution to pass the output of a command as a file to another command.
#!/bin/bash
diff <(ls dir1) <(ls dir2)
4. Subshells
Execute commands in a subshell to isolate variables and change directory without affecting the parent shell.
#!/bin/bash
(
cd /tmp
echo "Current directory: $(pwd)"
)
echo "Back in: $(pwd)"
5. Trapping Signals
Use the trap command to catch signals and execute code when they occur.
#!/bin/bash
cleanup() {
echo "Cleaning up..."
# Add cleanup code here
}
trap cleanup EXIT
# Your script code here
6. Brace Expansion
Use brace expansion to generate arbitrary strings.
#!/bin/bash
echo {1..5} # 1 2 3 4 5
echo {a..e} # a b c d e
echo file{1,2,3}.txt # file1.txt file2.txt file3.txt
7. Parameter Expansion
Use parameter expansion for string manipulation and default values.
#!/bin/bash
name="John Doe"
echo ${name,,} # Convert to lowercase
echo ${name^^} # Convert to uppercase
echo ${name:0:4} # Substring (John)
# Default value
echo ${unset_var:-default} # Prints 'default'
8. Heredocs
Use heredocs for multi-line string input.
#!/bin/bash
cat << EOF > output.txt
This is a multi-line
text block that will be
written to output.txt
EOF
9. Indirect Variable References
Use indirect references to dynamically access variables.
#!/bin/bash
fruit="apple"
apple_color="red"
color_var="${fruit}_color"
echo ${!color_var} # Prints 'red'
10. Debugging Techniques
Advanced debugging techniques for complex scripts.
#!/bin/bash
set -e # Exit on error
set -u # Treat unset variables as an error
set -o pipefail # Catch pipe failures
# For verbose debugging
set -v # Print shell input lines as they are read
set -x # Print command traces before executing command
Tip:
Always test your scripts thoroughly, especially when using advanced techniques.
Use shellcheck to catch common errors and potential issues in your scripts.