Bash Scripting: Command line arguments

In some Bash scripts, there is an option to pass arguments to the script when you are executing it. This allows the user to specify more information in the same command used to run the script.

This is yet another way for us to accept input in a Bash script, and make our script more interactive with the user executing it. Command line arguments are specified as extra bits of information (or flags/options) that are passed to the script.

In this tutorial, you will learn how to accept command line arguments in a Bash script on a Linux system. Follow along with our example below to see how it works.

In this tutorial you will learn:

  • How to detect number of command line arguments
  • How to use command line arguments in a Bash script
An example of using the command line arguments passed to a Bash script
An example of using the command line arguments passed to a Bash script
Software Requirements and Linux Command Line Conventions
Category Requirements, Conventions or Software Version Used
System Any Linux distro
Software Bash shell (installed by default)
Other Privileged access to your Linux system as root or via the sudo command.
Conventions # – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo command
$ – requires given linux commands to be executed as a regular non-privileged user

Bash Scripting: Command line arguments example



Twitter icon Follow LinuxConfig.org on Twitter for the latest tips and tricks about Linux!


Let’s look at a basic example of how we can use command line arguments with our Bash script. The following script will accept two command line arguments – a file name and a bit of text to put inside of the file.

#!/bin/bash

if [ $# -ne 2 ]; then
        echo "please specify 2 command line arguments"
		exit 1
fi

touch $1

echo $2 > $1

Here is how we would pass our two arguments to the script:

$ ./test.sh hello_world.txt "Hello World!"

Note that we wrapped our second command line argument in quotes since it contains a space. The result from executing the above command is a hello_world.txt file gets generated and contains the text we specified:

$ cat hello_world.txt 
Hello World!

The if statement at the beginning of the script uses the $# variable to test the number of arguments we have passed to the script. If it is any value other than 2, the script will issue an error and exit.

$ ./test.sh
please specify 2 command line arguments

After passing that bit of error detection, the script will use the touch command on the first command line argument we passed. Then it will use the echo command to put our second command line argument into the file the script created. It uses our passed arguments through the variables $1 and $2. The values of our arguments are placed into those variables automatically.

Closing Thoughts




In this tutorial, we saw how to pass command line arguments to a Bash script on Linux. Using the numbered variables like $1, $2, etc, we can use the data passed to the script. This is one of the few ways to pass data to a Bash script and make it interactive, but it is very effective and simple to code, as you learned here.



Comments and Discussions
Linux Forum