Defining Functions
Problem
There are several places in your shell script where you would like to give the user a usage message (a message describing the proper syntax for the command), but you don’t want to keep repeating the code for the same echo statement. Isn’t there a way to do this just once and have several references to it? If you could make the usage message its own script, then you could just invoke it anywhere in your original script—but that requires two scripts, not one. Besides, it seems odd to have the message for how to use one script be the output of a different script. Isn’t there a better way to do this?
Solution
You need a bash function. At the beginning of your script put something like this:
function usage () { printf "usage: %s [ -a | - b ] file1 ... filen\n" $0 > &2 }
Then later in your script you can write code like this:
if [ $# -lt 1] then usage fi
Discussion
Functions may be defined in several ways ([ function
]
name () compound-command
[ redirections ])
. We could write a function
definition any of these ways:
function usage () { printf "usage: %s [ -a | - b ] file1 ... filen\n" $0 > &2 } function usage { printf "usage: %s [ -a | - b ] file1 ... filen\n" $0 > &2 } usage ( ) { printf "usage: %s [ -a | - b ] file1 ... filen\n" $0 > &2 } usage ( ) { printf "usage: %s [ -a | - b ] file1 ... filen\n" $0 > &2 }
Either the reserved word function
or the trailing () must be present.
If function
is used, the () are
optional. We like using the word function
because it is ...
Get bash Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.