How to pass multiple files to a Bash script as variables?












0















I have a bash script, let's call it myscript, that is supposed to accept files in the current working directory as variables and perform various actions on them.



I've been able to set up this:



#!/bin/bash

file=$1

command1 $file
command2 $file


that works fine, when I run myscript myfile1.ext it correctly executes command1 myfile1.ext and command2 myfile1.ext.



The problem is that I'd like to pass more filenames on the same instance, to speed up things, and be able to do this: myscript myfile1.ext myfile2.ext myfile3.ext myfile4.ext and have each one of these files be processed by the script. Right now, even if I pass more filenames, only the first one is processed.



How should I modify this script to sequentially work on multiple files?










share|improve this question





























    0















    I have a bash script, let's call it myscript, that is supposed to accept files in the current working directory as variables and perform various actions on them.



    I've been able to set up this:



    #!/bin/bash

    file=$1

    command1 $file
    command2 $file


    that works fine, when I run myscript myfile1.ext it correctly executes command1 myfile1.ext and command2 myfile1.ext.



    The problem is that I'd like to pass more filenames on the same instance, to speed up things, and be able to do this: myscript myfile1.ext myfile2.ext myfile3.ext myfile4.ext and have each one of these files be processed by the script. Right now, even if I pass more filenames, only the first one is processed.



    How should I modify this script to sequentially work on multiple files?










    share|improve this question



























      0












      0








      0








      I have a bash script, let's call it myscript, that is supposed to accept files in the current working directory as variables and perform various actions on them.



      I've been able to set up this:



      #!/bin/bash

      file=$1

      command1 $file
      command2 $file


      that works fine, when I run myscript myfile1.ext it correctly executes command1 myfile1.ext and command2 myfile1.ext.



      The problem is that I'd like to pass more filenames on the same instance, to speed up things, and be able to do this: myscript myfile1.ext myfile2.ext myfile3.ext myfile4.ext and have each one of these files be processed by the script. Right now, even if I pass more filenames, only the first one is processed.



      How should I modify this script to sequentially work on multiple files?










      share|improve this question
















      I have a bash script, let's call it myscript, that is supposed to accept files in the current working directory as variables and perform various actions on them.



      I've been able to set up this:



      #!/bin/bash

      file=$1

      command1 $file
      command2 $file


      that works fine, when I run myscript myfile1.ext it correctly executes command1 myfile1.ext and command2 myfile1.ext.



      The problem is that I'd like to pass more filenames on the same instance, to speed up things, and be able to do this: myscript myfile1.ext myfile2.ext myfile3.ext myfile4.ext and have each one of these files be processed by the script. Right now, even if I pass more filenames, only the first one is processed.



      How should I modify this script to sequentially work on multiple files?







      linux bash






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 12 at 22:42







      Sekhemty

















      asked Feb 12 at 22:12









      SekhemtySekhemty

      3,991114482




      3,991114482






















          1 Answer
          1






          active

          oldest

          votes


















          2














          A straightforward approach is like this:



          #!/bin/sh

          for file in "$@"; do
          command1 "$file"
          command2 "$file"
          done


          Notes:




          • The code is not Bash-specific, it works in sh (hence my shebang).


          • Quote variables like I did.


          You can implement more complex logic with shift shell builtin. See the documentation or help shift in Bash.






          share|improve this answer


























          • Thanks, it was easier than I expected :)

            – Sekhemty
            Feb 12 at 22:43











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "3"
          };
          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',
          autoActivateHeartbeat: false,
          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%2fsuperuser.com%2fquestions%2f1405033%2fhow-to-pass-multiple-files-to-a-bash-script-as-variables%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









          2














          A straightforward approach is like this:



          #!/bin/sh

          for file in "$@"; do
          command1 "$file"
          command2 "$file"
          done


          Notes:




          • The code is not Bash-specific, it works in sh (hence my shebang).


          • Quote variables like I did.


          You can implement more complex logic with shift shell builtin. See the documentation or help shift in Bash.






          share|improve this answer


























          • Thanks, it was easier than I expected :)

            – Sekhemty
            Feb 12 at 22:43
















          2














          A straightforward approach is like this:



          #!/bin/sh

          for file in "$@"; do
          command1 "$file"
          command2 "$file"
          done


          Notes:




          • The code is not Bash-specific, it works in sh (hence my shebang).


          • Quote variables like I did.


          You can implement more complex logic with shift shell builtin. See the documentation or help shift in Bash.






          share|improve this answer


























          • Thanks, it was easier than I expected :)

            – Sekhemty
            Feb 12 at 22:43














          2












          2








          2







          A straightforward approach is like this:



          #!/bin/sh

          for file in "$@"; do
          command1 "$file"
          command2 "$file"
          done


          Notes:




          • The code is not Bash-specific, it works in sh (hence my shebang).


          • Quote variables like I did.


          You can implement more complex logic with shift shell builtin. See the documentation or help shift in Bash.






          share|improve this answer















          A straightforward approach is like this:



          #!/bin/sh

          for file in "$@"; do
          command1 "$file"
          command2 "$file"
          done


          Notes:




          • The code is not Bash-specific, it works in sh (hence my shebang).


          • Quote variables like I did.


          You can implement more complex logic with shift shell builtin. See the documentation or help shift in Bash.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Feb 12 at 22:28

























          answered Feb 12 at 22:18









          Kamil MaciorowskiKamil Maciorowski

          28.6k156187




          28.6k156187













          • Thanks, it was easier than I expected :)

            – Sekhemty
            Feb 12 at 22:43



















          • Thanks, it was easier than I expected :)

            – Sekhemty
            Feb 12 at 22:43

















          Thanks, it was easier than I expected :)

          – Sekhemty
          Feb 12 at 22:43





          Thanks, it was easier than I expected :)

          – Sekhemty
          Feb 12 at 22:43


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Super User!


          • 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%2fsuperuser.com%2fquestions%2f1405033%2fhow-to-pass-multiple-files-to-a-bash-script-as-variables%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