Bash Best(ish) practices part 2
Part 2 of our series has us beginning to use functions as a part of script development. Bash functions are pretty simple, and much has already been written about them. Today we will primarly be concerned with how they can help your script flow better and potentially speed up development and troubleshooting. Lets start with some code… <code>#!/bin/bash # Copy some files # Print usage information and exit print_usage(){ echo -e "\n" \ "usage: ./copy_stuff -s sourcedir -d destdir \n" \ "\n" \ "-s <sourcedir> source directory\n" \ "-d <destdir> destination directory\n" \ "-h this help\n" \ "\n" && exit 1 } # Loop through $@ to find flags while getopts ":hs:d:" FLAG; do case "${FLAG}" in s) # Our source SOURCE="${OPTARG}" ;; d) # Our destination DEST="${OPTARG}" ;; h) # Print usage information HELP=1;; [:?]) # Print usage information print_usage;; esac done # Copy some files from one place to another copy_files(){ echo "Copying ${SOURCE}/foo to ${DEST}/foo" echo "Copying ${SOURCE}/bar to ${DEST}/bar" echo "Copying ${SOURCE}/baz/foo to ${DEST}/baz/foo" echo "Copying ${SOURCE}/baz/bar/foo to ${DEST}/baz/bar/foo" echo "Copying ${SOURCE}/dir/somefile to ${DEST}/dir/someotherfile" } # Restart some service restart_service(){ echo "Stopping the service" echo "Making sure the service is stopped" echo "Reticulating splines..." echo "Starting the service" } # Test to see if the service is running test_service(){ echo "service is tested" } [ "${HELP}" ] && print_usage if [ ${SOURCE} ] && [ ${DEST} ] then echo "Copying files from ${SOURCE} to ${DEST}" copy_files echo "Restarting the service" restart_service echo "Testing the service" test_service fi </code> There is a lot happening in this script, but you can see that we are expanding upon ideas from last week. ...