argument not recognized for-loop











up vote
1
down vote

favorite












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.










share|improve this question


























    up vote
    1
    down vote

    favorite












    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.










    share|improve this question
























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      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.










      share|improve this question













      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.







      command-line bash scripts






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 2 at 23:32









      Y.Terz

      84




      84






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          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.






          share|improve this answer

















          • 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 at 0:05











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "89"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1098020%2fargument-not-recognized-for-loop%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote



          accepted










          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.






          share|improve this answer

















          • 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 at 0:05















          up vote
          1
          down vote



          accepted










          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.






          share|improve this answer

















          • 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 at 0:05













          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          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.






          share|improve this answer












          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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Dec 2 at 23:41









          Sergiy Kolodyazhnyy

          68.9k9143303




          68.9k9143303








          • 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 at 0:05














          • 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 at 0:05








          1




          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 at 0:05




          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 at 0:05


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Ask Ubuntu!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1098020%2fargument-not-recognized-for-loop%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

          Mangá

          Eduardo VII do Reino Unido