Bash Boilerplate
A collection of pieces of bash script code that do certain things.
Change to directory if possible
cd $DIR || { echo "Cannot change to necessary directory." >&2 exit $E_XCD; }
Iterate over files and directories
# Using glob FILES="/var/log/*.log" for file in $FILES do echo "$file" done # Using glob and ls sorted after ctime FILES=$( ls -c /var/log/*.log ) for file in $FILES do echo "$file" done # Glob-matching files and directories with whitespace for file in * do echo "$file" done
Get the number of matches in a file glob
FILES=(/var/log/*.log) FILECOUNT=${#FILES[*]}
Extract path, filename and extension
FILEPATH="../.we-ird_/påth/file.name.txt" FILEDIR="${FILEPATH%/*}" FILENAME="${FILEPATH##*/}" EXTENSION="${FILEPATH##*.}" NOEXTENSION="${FILEPATH%.*}"
Get the directory of the bash script
DIR=$(dirname $(readlink -f "$0"))
Get the number of lines in a file
LINECOUNT=`wc -l $FILE | awk '{ print $1 }'`
Tests
if [ -z "$1" ] then echo "first parameter is null" fi if [ -n "$1" ] then echo "first parameter is not null" fi
(see also man test
)
Validating arguments
# Match an argument against a regex if echo "$1" | grep "^[0-9]\+$" > /dev/null then echo "$1 is a postitive integer" else echo "$1 is not a positive integer" fi # Loop through all arguments while [ "$#" -gt "0" ] do if [ "$1" = "-a" ] then if echo "$2" | grep -e "^valid_value1$" -e "^valid_value2$" > /dev/null then echo "The value of flag '-a' is $2" shift else echo "Invalid value for flag '-a'" fi elif [ "$1" = "-b" ] then echo "Flag '-b' is on." fi shift done