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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access