In this tutorial, we'll learn how to write a Bash script to print all arguments passed to a script file via terminal in Linux. Although such script isn't very useful for anything in practice, it's a good learning experiment.
Code Snippet
To start, create a new file and call it args.sh, then open it using you preferred source code editor.
Paste the following code in it and save:
#!/usr/bin/env bash
for i in $(seq 0 $#);
do
echo "\$$i" = ${!i}
done
Understanding the Code
Before executing the script file, let's understand what this code does.
Shebang
The first line is the shebang #!/usr/bin/env bash. This tells what program can be used to execute this script file. In this case, /usr/bin/env bash will execute the bash command wherever it's installed for us.
For... in...; do...done
For for... in...; is the for loop statement in Bash. This will loop through items in a list and execute the code between do and done for each item in the list. Note that in Bash a "list" is just text separated by whitespace.
seq
The seq program outputs a sequence form one number to another. In this case, the first number is 0.
$#
The code $# is where the total number of arguments passed to our script is stored.
In this loop, we'll make the variable i go from 0 to the the total number of arguments.
echo
This command prints to the terminal whatever arguments as pass to it.
\$
This is a escape sequence. In Bash, the dollar sign ($) has a special meaning in syntax, so to use $ literally we need to escape it with a backward slash (\).
$i
This will be replaced by the current value of i in the loop. Combined with the above, "\$$i" will become "$0", "$1", "$2" and so on.
=
This doesn't mean anything. echo will just print it.
${!i}
This is the important part. In Bash, $0 stores the zeroth argument passed to the program, $1 stores the first one, $2 stores the second, and so on.
The syntax ${!...} will output the value of a variable whose name is stored in another variable that you write between ! and }.
When $i is 0, ${!i} will output the value of $0, which is the zeroth argument. When $1 is 1, it will output the value of $1, and so on.
Running the Code
To run this script, open a terminal in the folder where you saved it [how?], then mark it as executable and run it:
chmod +x args.sh
./args.sh first second third fourth
This should output the following:
$0 = ./args.sh
$1 = first
$2 = second
$3 = third
$4 = fourth