In Bash, one can set default values for command line arguments. If a default value is set for an argument, Bash expands to that default value whenever the argument is unset or null. Setting default arguments prevents unexpected halting of a Bash script. In this article, I will show how to set default values for arguments and a few use cases of default arguments.
What are Default Arguments in Bash?
Default arguments or default parameters are values assigned to arguments that are used when the user does not provide those arguments. Essentially, they offer a predetermined value for arguments when the user doesn’t supply one. The syntax for setting default values to a parameter is ${parameter:-default_value}, where “parameter” represents the argument and “default_value” signifies the value assigned if the argument is unset or null.
2 Ways to Set Default Values to Arguments in Bash
There are a couple of ways to set the default argument in Bash. All of them inherently use the parameter expansion technique. Go through the detailed process below to set a default argument:
1. Using Parameter Expansion
Parameter expansion in Bash is used for manipulating variables, including setting default values to positional parameters or arguments. To assign a default argument use the syntax ${parameter:-default_value}. Here is an example:
#!/bin/bash
var="${1:-User}"
echo "Hello, $var"
This Bash script sets up a variable named var, assigning it the value of the first command-line argument ($1). If no argument is provided, it defaults to “User”. Then, it echoes a message using the value of var
, saying “Hello, $var”.
2. Using If Statement
The if statement can be used to check if an argument is provided. After checking the existence of an argument one can set a default value if necessary. Here’s how it works:
#!/bin/bash
if [ -z "$1" ]; then
set -- "${1:-GoodBye}"
fi
# Echo the first argument
echo "First Argument: $1"
The script checks if the first command-line argument is empty using the -z operator. If $1 is indeed empty, it utilizes parameter expansion ${1:-Good Bye}
to set the default value “Good Bye” for the first argument. The set --
command then assigns this default value to $1. Finally, it echoes the value of the first argument.
Default Values of Command Line Arguments in Bash Script
Setting default values for command line arguments is crucial to prevent a Bash script from halting abruptly. For instance, consider the scenario of adding two numbers: if users provide both numbers, the script should compute their sum. However, if no or only one argument is provided, default values should be used instead of throwing an error. See the script below for clarification:
#!/bin/bash
arg1="${1:-0}"
arg2="${2:-0}"
# Echo the arguments
echo "Sum of numbers: $(($arg1+$arg2))"
The program utilizes parameter expansion ${1:-0}
and ${2:-0}
to set default values of 0 for the first and second arguments respectively, in case they are unset or empty. It then calculates the sum of the arguments using arithmetic expansion, $(($arg1+$arg2))
and prints the result.
Default Value of an Argument in a Bash Function
Default arguments are particularly useful in Bash functions. For instance, when checking the disk usage of a specific file or directory, users may need to provide the file or directory as an argument of a reusable function. However, setting the current directory as the default argument allows the function to use it if no argument is provided. An example illustrating this is provided below:
#!/bin/bash
du1() {
local files="${1:-.}"
du -hsc "$files"
}
du1
This Bash script defines a function du1()
that calculates the disk usage of specified files or directories. It utilizes parameter expansion ${1:-.}
to set the default value of the variable files to the current directory. Here, dot (.
) represents the current directory.
If no argument is provided when calling the function, it uses the du command with the -hsc
options to display the disk usage of the current directory. On the other hand, if any file or directory is provided as an argument the function displays the disk usage of that file or directory.
1 Practice Problem for Setting Default Arguments in Bash
Write a Bash script that converts bits to bytes or vice versa. It should take two arguments: a number and “b” for bits or “B” for Bytes. If the unit is provided, it should default to bits.
Conclusion
To sum up, setting default values for arguments in a Bash script is fairly simple. One can easily set default values for arguments using parameter expansion. Making an argument optional by setting default values enables a script to perform its go-to task. Moreover, it ensures the script runs even if the user forgets to provide the argument. I believe that from now on, you can easily set default arguments in a Bash script.
People Also Ask
How can I set a default argument in bash?
In Bash, you can set a default argument using ${parameter:-default} syntax. If the parameter is unset or null, it will use the default value; otherwise, it will use the given value of the parameter.
Why should I set a default value for a bash argument?
You should set a default value for a Bash argument to guard against unexpected behavior of a script. If you don’t provide a value, the script can rely on the default value to proceed with its operation. This ensures that your script doesn’t halt unexpectedly due to missing arguments.
How to override a bash argument with a new value?
To override a bash argument within a bash script, you can use the ${parameter:+new_value} syntax. This syntax allows you to replace the old value of the parameter with the new_value. However, If parameter is null or unset, nothing is substituted and parameter remains empty.
What is the purpose of setting an argument default to empty in bash?
Setting an argument default to empty in bash ensures predictable behavior, especially when handling cases where an argument doesn’t exist. While bash typically expands an unset argument to an empty string, in set -u
mode, the shell throws a runtime error if the argument is unset. Unset means the variable has not been defined or it does not exist, whereas null or empty means the variable has a value, and this value is an empty string.
Related Articles
- How to Check Number of Arguments in Bash? [3 Methods]
- How to Use First Argument in Bash Script [5 Cases]
- How to Get Argument in Bash? [4 Methods]
- How to Pass Arguments to Bash Script? [5 Methods]
- How to Parse Optional Arguments in Bash Script [2 Ways]
- How to Pass Array as an Argument in Bash Function? [3 Ways]
- How to Use OPTARG in Bash [3 Practical Examples]
- How to Use “getopts” in Bash [Complete Guide]
- [Solved] “bash: Argument list too long” Error
<< Go Back to Argument in Bash Script | Bash Functions | Bash Scripting Tutorial
FUNDAMENTALS A Complete Guide for Beginners