Bash (Unix shell)
Bash Scripting
Getting Started
Here is an example bash script
#!/bin/bash
# A simple variable example
myvariable=Hello
anothervar=Fred
echo $myvariable $anothervar
You can check your bash scripts using https://www.shellcheck.net/.
Usage
Basic If Statements
https://linuxize.com/post/bash-if-else-statement/
if [[ $VAR -gt 10 ]] then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]] then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
Comparisons
-eq
is==
-gt
is>
-ge
is>=
Check if File/Folder Exists
See https://linuxize.com/post/bash-check-if-file-exists/#check-if-directory-exist.
Arrays
DRIVES=(
/media/veracrypt1
/media/veracrypt2
/media/veracrypt3
/media/veracrypt4
/media/veracrypt5
/media/veracrypt6
/media/veracrypt7
/media/veracrypt8
/media/veracrypt9
)
for i in "${DRIVES[@]}"
do
ls $i
done
- Notes
"${DRIVES[@]}"
means every element will be a new word"${DRIVES[*]}"
will expand the array into a single word
Functions
#!/bin/bash
function say_hello {
echo Hello $1
}
say_hello World
Redirects
# `ls` is an example command
# Input to stdin
ls < word
# Output stdout to file
ls > file.txt
# Append stdout to file
ls >> file.txt
# Output stderr and stdout to file
ls > file.txt 2>&1
ls &> file.txt # Only works in bash, not sh
Trap
To make a bash script exit on ctrl c:
trap "exit" INT
Wait
Add wait
at the end of a script to wait for all subprocesses.
dirname
How to get the source directory of the bash script
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
.bashrc
Your .bashrc
file will be loaded for each terminal.
Presentation of Shell Variable (PS1)
Add the following to show your current working directory.
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'
Brace Expansion
When you type the following:
echo {red,green,blue}_apple
bash will print out
red_apple green_apple blue_apple
If you want to save this into a variable, you can save it as an array:
APPLES=({red,green,blue}_apple)
echo "${APPLES[@]}"