Command-line arguments are a powerful feature in Bash scripting. They allow users to pass information to a script when it's executed, enhancing flexibility and reusability.
In Bash, command-line arguments are accessible through special variables. The script name is stored in $0
, while subsequent arguments are stored in $1
, $2
, and so on.
Here's a simple example demonstrating how to access command-line arguments:
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
If you save this script as args.sh
and run it with ./args.sh hello world
, it will output:
Script name: ./args.sh
First argument: hello
Second argument: world
Bash provides several special variables for working with command-line arguments:
$#
: Number of arguments passed to the script$@
: All arguments as separate strings$*
: All arguments as a single stringYou can use a Bash For Loop to iterate through all arguments:
#!/bin/bash
for arg in "$@"
do
echo "Argument: $arg"
done
For more complex scripts, you might want to use the getopts
command to parse options with flags. This allows for more sophisticated argument handling:
#!/bin/bash
while getopts ":a:b:" opt; do
case $opt in
a) a_arg="$OPTARG"
;;
b) b_arg="$OPTARG"
;;
\?) echo "Invalid option -$OPTARG" >&2
;;
esac
done
echo "A argument: $a_arg"
echo "B argument: $b_arg"
This script can be run with ./script.sh -a value1 -b value2
.
shift
to process arguments in batches.It's crucial to handle cases where expected arguments are missing. You can use Bash If-Else Statements for this purpose:
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Error: No arguments provided"
echo "Usage: $0 "
exit 1
fi
Command-line arguments are essential for creating flexible and interactive Bash scripts. By mastering their usage, you can create more powerful and user-friendly command-line tools. Remember to always validate input and provide clear instructions for using your scripts.