Shell Scripts
Google Shell Style Guide: https://google.github.io/styleguide/shellguide.html
Bash Reference Manual: https://www.gnu.org/software/bash/manual/html_node/index.html
Pure bash snippets: https://github.com/dylanaraps/pure-bash-bible
Reusable Bash functions: https://github.com/gruntwork-io/bash-commons
Bash Guide: https://mywiki.wooledge.org/BashGuide - New version: https://guide.bash.academy - https://github.com/lhunath/guide.bash.academy
If statement
https://stackoverflow.com/questions/3427872/whats-the-difference-between-and-in-bash
Ternary operator
[[ $b = 5 ]] && a="$c" || a="$d"
a=$([ "$b" == 5 ] && echo "$c" || echo "$d")
Check if directory exists
if [ -d src/app ]; then
echo "Directory exists"
else
mkdir src/app
fi
Check if environment variable is set
if [[ -z $ENVIRONMENT ]]; then
echo "ENVIRONMENT is empty"
else
echo "ENVIRONMENT is set to '$ENVIRONMENT'"
fi
Wait for some condition
https://linuxsimply.com/bash-scripting-tutorial/loop/until-loop/
Wait until a file exists(source):
until [ -f /tmp/examplefile.txt ]
do
sleep 5
done
echo "File found"
exit
Wait for EFS mount target in EC2 (source):
while ! (echo > /dev/tcp/${FileSystem}.efs.${AWS::Region}.amazonaws.com/2049) >/dev/null 2>&1
do
sleep 5
done
Arguments
$@
stores all the arguments in a list of string$*
stores all the arguments as a single string$#
stores the number of arguments
https://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script
https://stackoverflow.com/questions/3898665/what-is-in-bash
https://stackoverflow.com/questions/2761723/what-is-the-difference-between-and-in-shell-scripts
https://stackoverflow.com/questions/3008695/what-is-the-difference-between-and-in-bash
Input
echo "Enter your name"
read name
read -p "Enter your name" name
https://stackoverflow.com/questions/18544359/how-do-i-read-user-input-into-a-variable-in-bash
Parameter expansion
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value
read -p "Enter your name" name
name=${name:-Peter}