Variables and User Input
read -p "What is you name: " name
echo "Hello $name"
read -p "What do you like to do: " verb
echo "You like ${verb}ing"
Expressions
[[ -e "$file" ]] # True if file exists [[ -d "$file" ]] # True if file exists and is a directory [[ -f "$file" ]] # True if file exists and is a regular file [[ -z "$str" ]] # True if string is of length zero [[ -n "$str" ]] # True is string is not of length zero
# Compare Strings [[ "$str1" == "$str2" ]] [[ "$str1" != "$str2" ]] # Integer Comparisions [[ "$int1" -eq "$int2" ]] # $int1 == $int2 [[ "$int1" -ne "$int2" ]] # $int1 != $int2 [[ "$int1" -gt "$int2" ]] # $int1 > $int2 [[ "$int1" -lt "$int2" ]] # $int1 < $int2 [[ "$int1" -ge "$int2" ]] # $int1 >= $int2 [[ "$int1" -le "$int2" ]] # $int1 <= $int2 # And / Or [[ ... ]] && [[ ... ]] # And [[ ... ]] || [[ ... ]] # Or
Conditionals
# 1. Return values # If notes.md file doesn't exist, create one and # add the text "created by bash" if find notes.md then echo "notes.md file already exists" else echo "created by bash" | cat >> notes.md fi
# 2. Arithmetic Evaluations read -p "Enter your age: " age if (( "$age" > 18 )) then echo "Adult!" elif (( "$age" > 12 )) then echo "Teen!" else echo "Kid" fi
# 3. Test Expressions # Check if argument was passed # "$1" corresponds to first argument if [[ -n "$1" ]] then echo "Your first argument was $1" else echo "No Arguments passed" fi
Looping
# print numbers 1 to 10
# c like for loop
for (( i = 1; i <= 10; ++i ))
do
echo "$i"
done
# for in
for i in {1..10}
do
echo "$i"
done
# while
i=1
while [[ "$i" -le 10 ]]
do
echo "$i"
((i++))
done
# until
i=1
until [[ "$i" -eq 11 ]]
do
echo "until $i"
((i++))
done
# Iterating over arrays arr=(a b c d)
# For in
for i in "${arr[@]}"
do
echo "$i"
done
# c like for
for (( i = 0; i < "${#arr[@]}"; i++))
do
echo "${arr[$i]}"
done
# while
i=0
while [[ "$i" -le "${#arr[@]}" ]]
do
echo "${arr[$i]}"
(( i++ ))
done
# Iterating over arguments
# @ holds all the arguments passed in to the script
for i in "$@"
do
echo "$i"
done
Arrays
arr=(a b c d)
echo "${arr[1]}" # Single element
echo "${arr[-1]}" # Last element
echo "${arr[@]:1}" # Elements from 1
echo "${arr[@]:1:3}" # Elements from 1 to 3
# Insert
arr[5]=e # direct address and insert/update
arr=(${arr[@]:0:1} new ${arr[@]:1}) # Adding 'new' to array
# Delete
arr=(a b c d)
unset arr[1]
echo << "${arr[1]}" # Outputs nothing
# Re-Index after Delete
arr=(a b c d)
unset arr[1]
arr=("${arr[@]}")
echo << "${arr[1]}" # c
Functions
greet() {
echo "Hello, $1"
}
greet Bash # Hello, Bash
# All the arguments of a function can be accessed using @.
greet() {
echo "Hello, ${@}"
}
greet every single body # Hello, every single body