This content originally appeared on DEV Community and was authored by Zeshan
1. Introduction to Bash
1.1 What is Bash?
Bash (Bourne Again Shell) is a command processor that typically runs in a text window where the user types commands that cause actions.
Bash can also read and execute commands from a file, called a script.
1.2 Creating and Running a Script
-
Creating a script: Use a text editor to create a file with the
.sh
extension.
nano script.sh
- Making the script executable:
chmod +x script.sh
- Running the script:
./script.sh
2. Basic Commands
2.1 Echo
- Description: Prints text to the terminal.
echo "Hello, World!"
2.2 Variables
- Description: Storing and using data.
NAME="John"
echo $NAME
2.3 Comments
- Description: Adding comments to a script for readability.
# This is a comment
echo "This is a script"
3. Input and Output
3.1 Reading User Input
- Description: Taking input from the user.
read -p "Enter your name: " NAME
echo "Hello, $NAME"
3.2 Redirecting Output
- Description: Redirecting command output to a file.
echo "This is a test" > file.txt
3.3 Appending Output
- Description: Appending command output to a file.
echo "This is a test" >> file.txt
3.4 Redirecting Input
- Description: Using a file as input to a command.
wc -l < file.txt
3.5 Piping
- Description: Using the output of one command as input to another.
cat file.txt | grep "test"
4. Control Structures
4.1 Conditional Statements
- Description: Making decisions in scripts.
if [ "$NAME" == "John" ]; then
echo "Hello, John!"
else
echo "You are not John."
fi
4.2 Loops
- Description: Repeating a set of commands.
4.2.1 For Loop
for i in {1..5}; do
echo "Welcome $i"
done
4.2.2 While Loop
COUNTER=0
while [ $COUNTER -lt 5 ]; do
echo "Counter: $COUNTER"
COUNTER=$((COUNTER + 1))
done
4.2.3 Until Loop
COUNTER=0
until [ $COUNTER -ge 5 ]; do
echo "Counter: $COUNTER"
COUNTER=$((COUNTER + 1))
done
5. Functions
5.1 Defining and Calling Functions
- Description: Grouping commands into a reusable block.
my_function() {
echo "Hello from my_function"
}
my_function
6. Data Structures
6.1 Arrays
- Description: Using arrays to store multiple values.
NAMES=("John" "Jane" "Doe")
echo "First Name: ${NAMES[0]}"
6.2 Tuples (Simulated with Arrays)
- Description: Using arrays to simulate tuples.
TUPLE=("Alice" 25 "Developer")
echo "Name: ${TUPLE[0]}, Age: ${TUPLE[1]}, Job: ${TUPLE[2]}"
6.3 Sets (Simulated with Arrays and Associative Arrays)
- Description: Using arrays and associative arrays to simulate sets.
declare -A SET
SET["Apple"]=1
SET["Banana"]=1
if [[ ${SET["Apple"]} ]]; then
echo "Apple is in the set."
fi
7. Operators
7.1 Mathematical Operators
- Description: Performing arithmetic operations.
A=5
B=3
SUM=$((A + B))
echo "Sum: $SUM"
7.2 Logical Operators
- Description: Using logical operators in conditions.
if [ $A -eq 5 ] && [ $B -eq 3 ]; then
echo "Both conditions are true."
fi
7.3 Semantic Operators
- Description: Using comparison operators.
if [ "$A" -eq 5 ]; then
echo "A is 5"
fi
if [ "$A" -ne 5 ]; then
echo "A is not 5"
fi
8. Type Casting
- Description: Type casting in Bash is generally about ensuring variable content is treated correctly.
VAR="123"
NUM=$((VAR + 0)) # Cast string to number for arithmetic
echo $NUM
9. API Calls
-
Description: Making HTTP requests using tools like
curl
.
RESPONSE=$(curl -s -X GET "https://api.example.com/data")
echo "Response: $RESPONSE"
10. Automating Tasks
10.1 Cron Jobs
- Description: Scheduling scripts to run automatically.
# Edit the crontab file
crontab -e
# Add a job to run every day at midnight
0 0 * * * /path/to/script.sh
10.2 Using at
- Description: Scheduling a one-time task.
echo "/path/to/script.sh" | at now + 5 minutes
10.3 Background Jobs
- Description: Running scripts in the background.
./script.sh &
11. Advanced Topics
11.1 Using sed
and awk
-
Description: Text processing with
sed
andawk
.
11.1.1 sed
sed 's/old/new/g' file.txt
11.1.2 awk
awk '{print $1}' file.txt
11.2 Traps
- Description: Capturing signals.
trap "echo 'Script interrupted'; exit" SIGINT
while true; do
echo "Running..."
sleep 1
done
12. Debugging
12.1 Enabling Debugging
- Description: Running a script in debug mode.
bash -x script.sh
12.2 Using set
- Description: Setting options for debugging.
set -x # Enable debugging
set +x # Disable debugging
12.3 Error Handling
- Description: Handling errors in scripts.
command || { echo "Command failed"; exit 1; }
12.4 Using trap
for Cleanup
- Description: Cleaning up resources on script exit.
cleanup() {
echo "Cleaning up..."
# perform cleanup here
}
trap cleanup EXIT
12.5 Logging
- Description: Creating log files for your scripts.
LOG_FILE="/var/log/script.log"
echo "Script started" >> $LOG_FILE
13. More on Arrays
13.1 Array Operations
- Description: Array length and iteration.
ARR=("one" "two" "three")
echo "Array length: ${#ARR[@]}"
for ITEM in "${ARR[@]}"; do
echo $ITEM
done
13.2 Associative Arrays
- Description: Using associative arrays.
declare -A ASSOC_ARRAY
ASSOC_ARRAY["name"]="John"
ASSOC_ARRAY["age"]="30"
echo "Name: ${ASSOC_ARRAY["name"]}"
echo "Age: ${ASSOC_ARRAY["age"]}"
13.3 Multidimensional Arrays
- Description: Simulating multidimensional arrays.
ARRAY_2D[0]="1 2 3"
ARRAY_2D[1]="4 5 6"
ARRAY_2D[2]="
7 8 9"
for ROW in "${ARRAY_2D[@]}"; do
for ITEM in $ROW; do
echo -n "$ITEM "
done
echo
done
14. String Operations
14.1 Substring Extraction
- Description: Extracting a substring from a string.
STRING="Hello World"
echo ${STRING:6:5} # Outputs "World"
14.2 String Length
- Description: Getting the length of a string.
echo ${#STRING} # Outputs "11"
14.3 String Replacement
- Description: Replacing part of a string.
echo ${STRING/World/Bash} # Outputs "Hello Bash"
15. File Operations
15.1 File Tests
- Description: Testing properties of files.
if [ -f "file.txt" ]; then
echo "file.txt is a regular file."
fi
if [ -d "directory" ]; then
echo "directory is a directory."
fi
15.2 Reading Files
- Description: Reading a file line by line.
while IFS= read -r line; do
echo "$line"
done < file.txt
15.3 Writing to Files
- Description: Writing to a file.
echo "Hello, World!" > file.txt
15.4 Appending to Files
- Description: Appending to a file.
echo "This is a new line" >> file.txt
16. Network Operations
16.1 Downloading Files
-
Description: Using
wget
orcurl
to download files.
wget http://example.com/file.zip
curl -O http://example.com/file.zip
16.2 Uploading Files
-
Description: Using
curl
to upload files.
curl -F "file=@/path/to/file" http://example.com/upload
16.3 Checking Internet Connection
- Description: Pinging a server to check for internet connectivity.
ping -c 4 google.com
17. Handling Large Data
17.1 Sorting and Uniqueness
- Description: Sorting data and removing duplicates.
sort file.txt | uniq > sorted.txt
17.2 Finding Patterns
-
Description: Using
grep
to find patterns.
grep "pattern" file.txt
17.3 Splitting Files
- Description: Splitting large files into smaller parts.
split -l 1000 largefile.txt smallfile_
18. Process Management
18.1 Checking Running Processes
-
Description: Using
ps
to list running processes.
ps aux
18.2 Killing Processes
-
Description: Using
kill
to terminate processes.
kill -9 PID
18.3 Monitoring System Resources
-
Description: Using
top
orhtop
to monitor system resources.
top
htop # Requires installation
19. Packaging and Distribution
19.1 Creating Tar Archives
-
Description: Archiving files using
tar
.
tar -cvf archive.tar file1 file2 directory/
19.2 Extracting Tar Archives
- Description: Extracting files from a tar archive.
tar -xvf archive.tar
19.3 Compressing Files
-
Description: Compressing files using
gzip
.
gzip file.txt
19.4 Decompressing Files
-
Description: Decompressing files using
gunzip
.
gunzip file.txt.gz
This extensive guide covers fundamental and advanced topics in Bash scripting
This content originally appeared on DEV Community and was authored by Zeshan
Zeshan | Sciencx (2024-06-23T08:31:09+00:00) Bash Scripting Fundamentals. Retrieved from https://www.scien.cx/2024/06/23/bash-scripting-fundamentals/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.