It's probably a lame question. But I am getting 3 arguments from command line [ bash script ]. Then I am trying to use these in a for loop.
for i in {$1..$2} do action1 done
This doesn't seem to work though and if $1
is "0"
and $2
is 2
it prints {0..2}' and calls
action1` only once. I referred to various examples and this appears to be the correct usage. Can someone please tell me what needs to be fixed here?
Thanks in advance.
You can handle command-line arguments in a bash script in two ways. One is by using argument variables, and another is by using the getopts function.
$# is the number of positional parameters passed to the script, shell, or shell function. This is because, while a shell function is running, the positional parameters are temporarily replaced with the arguments to the function. This lets functions accept and use their own positional parameters.
bash [filename] runs the commands saved in a file. $@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
Use the for loop to iterate through a list of items to perform the instructed commands.
You can slice the input using ${@:3}
or ${@:3:8}
and then loop over it
For eg., to print arguments starting from 3
for i in ${@:3} ; do echo $i; done
or to print 8 arguments starting from 3 (so, arguments 3 through 10)
for i in ${@:3:8} ; do echo $i; done
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With