1

I'm new pretty new when it comes to creating scripts in linux (I also don't really know on which terms to use like bash/shell), but I have the following command in a script which I want to execute with some arugments

write_loop.sh

#!/bin/bash
echo $1
echo $2
for i in {1..$1}; do printf "file '%s'\n" $2 >> list.txt; done

I'm trying to execute it like this in the terminal with 2 arguments: the amount of times to loop (150) and the filename to loop ("loop.mp4")

./write_loop.sh 150 loop.mp4

The arguments are passed to the script just fine, but for some reason the for-loop is not working. When I manually change $1 to 150 in write_loop.sh it does work, so I'm not sure what the issue is (maybe the argument is of a different type?). Any bit of help is appreciated.

1

Variables can't be used in range expansion {INT..INT}, so fallback to that is to use seq as show in related post. Alternatively, use C-like for loop since you're using bash anyway:

#!/bin/bash           
echo $1
echo $2
echo {1..$1}
for((i=1;i<=$1;i++)); do 
   printf "'%s'\n" "$2"
done

Or POSIX-ly:

#!/bin/bash           
echo $1
echo $2
i=1
while [ $i -le $1  ]; do 
   printf "'%s'\n" "$2"
   i=$((i+1))
done

Note I changed printf part for testing purposes. Adapt it to your needs.

  • 1
    Thank you for your answer. Love that you gave multiple options on how to do it. I used the C-like for loop because I'm the most comfortable with that syntax (for now). – Y.Terz Dec 3 '18 at 0:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.