Bash Scripting
What it is?
Bash is the scripting language we use to communicate with Unix-based OS and give commands to the system.
Script Execution - Examples
venator17@kali[/kali]$ bash script.sh <optional arguments>
venator17@kali[/kali]$ sh script.sh <optional arguments>
venator17@kali[/kali]$ ./script.sh <optional arguments>Shebang
The #!/bin/bash at the beginning of a Bash script is known as a shebang or hashbang. It serves as a directive to the operating system, indicating which interpreter should be used to execute the script.
Conditional Execution
If-Else
if [condition]
then [execution]
else [what would be executed if condition would fail]
fi [closing]If-Only
if [condition]
then [execution]
fi [closing]If-Elif-Else
if [first condition]
then [execution]
elif [second condition]
then [execution]
else [what would be executed if conditions would fail]
fi [closing]Case
case <expression> in
pattern_1 ) statements ;;
pattern_2 ) statements ;;
pattern_3 ) statements ;;
esacExample::
case $opt in
"1") network_range ;;
"2") ping_host ;;
"3") network_range && ping_host ;;
"*") exit 0 ;;
esacComparison Operators
-eq
equal to
-ne
not equal to
-lt
less than
-le
less than or equal to
-gt
greater than
-ge
greater than or equal to
String Operators
==
is equal to
!=
is not equal to
<
is less than in ASCII alphabetical order
>
is greater than in ASCII alphabetical order
-z
if the string is empty (null)
-n
if the string is not null
File Operators
-e
if the file exist
-f
tests if it is a file
-d
tests if it is a directory
-L
tests if it is if a symbolic link
-N
checks if the file was modified after it was last read
-O
if the current user owns the file
-G
if the file’s group id matches the current user’s
-s
tests if the file has a size greater than 0
-r
tests if the file has read permission
-w
tests if the file has write permission
-x
tests if the file has execute permission
Special Variables
$#
Number of arguments passed to the script.
$@
List of command-line arguments.
$n
n is number of argument
$$
Id of executing process
$?
Success of command. 0 is success, 1 is a failure
Regular Variables
> variable="Declared without an error."
> echo $variable
> Declared without an error.Arrays
> domains=(shadow wizard money gang)
> echo ${domains[0]}
> shadowOR
> domains=(shadow wizard "money gang")
> echo ${domains[2]}
> money gangLoops
For
for variable in list
do
# Commands to be executed for each item in the list
doneExample:
fruits=("apple" "orange" "banana")
for fruit in "${fruits[@]}"
do
echo "I like $fruit"
doneWhile
while [ condition ]
do
# Commands to be executed while the condition is true
doneExample:
count=1 # Count from 1 to 5
while [ $count -le 5 ]
do
echo $count
((count++))
doneUntil
until [ condition ]
do
# Commands to be executed until the condition becomes true
doneExample:
count=1 # Count from 1 to 5
until [ $count -gt 5 ]
do
echo $count
((count++))
doneScript Termination
exit 0
Succesful execution
exit 1
General error condition
exit 2
Specific error condition
Wildcards
In Bash, a wildcard refers to a character or a set of characters that can be used to represent a group of filenames or strings. Wildcards are often used in commands to perform operations on multiple files or strings that match a specified pattern.
* (Asterisk)
echo *.txt
Matches all files ending with ".txt".
? (Question Mark)
ls file?.txt
Matches files like "file1.txt", "fileA.txt", etc.
[ ] (Square Brackets)
ls [aeiou]*.txt
Matches any file starting with a vowel and ending with ".txt".
{ } (Brace Expansion)
cp file{1,2,3}.txt dest/
Expands to "file1.txt", "file2.txt", and "file3.txt" and copies to the destination.
!(pattern) (Extended Pattern Matching)
ls !(file*.txt)
Matches all files except those starting with "file" and ending with ".txt".
?(pattern) (Zero or One Occurrence)
ls file?(1).txt
Matches "file.txt" or "file1.txt".
+(pattern) (One or More Occurrences)
ls file+(1).txt
Matches "file1.txt", "file11.txt", etc.
*(pattern) (Zero or More Occurrences)
ls file*(1).txt
Matches "file.txt", "file1.txt", "file11.txt", etc.
Tips & Tricks
You Could use
teecommand for writing output to both standard output and file. If you would usetee -a, it wouldUse
bash -x -vto verbose debugging
Last updated