Bash:
Reading command line arguments
How to:
#!/bin/bash
# Print the name of the script.
echo "Script name: $0"
# Print the first argument.
echo "First argument: $1"
# Print all arguments.
echo "All arguments: $@"Sample output assuming your script is named ’example.sh’ and you call ./example.sh arg1 arg2:
Script name: ./example.sh
First argument: arg1
All arguments: arg1 arg2Loop through arguments:
#!/bin/bash
# Loop through each argument.
for arg in "$@"; do
echo "Argument: $arg"
doneDeep Dive
Bash has supported command line arguments for ages; they are positional parameters, $0 to $9, with $@ and $* showing all. $0 is the script itself, $1 to $9 are the first to ninth argument; braces like ${10} are needed from tenth on.
Using $@ is usually better than $* as it handles arguments containing spaces correctly. $@ gives each argument as a separate “word”; $* combines them all into a single “word”.
You can shift through arguments using the shift command, which bumps $2 to $1, and so forth, discarding the old $1.
Alternatives? Sure. getopts and getopt provide more control for options (like -h for help) and flag parsing; check them out if $1, $2,… don’t cut it.
See Also
- Bash Manual on Special Parameters: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
- Advanced Bash-Scripting Guide: https://www.tldp.org/LDP/abs/html/
getoptstutorial: https://wiki.bash-hackers.org/howto/getopts_tutorial