Which is the best way to check return result?When is double-quoting necessary?Input validation in a bash scriptScript that asks for four words, then tells the user the word they chose. Output error?Get specific result from functionbash script to extract string from last output lineif statement with grepHow to check a set of lines in a text file for patterns using awk, sed, or grep?Check whether any value is zero using jq and return 0 to the calling shell scriptBash assign variable result of bool function, then checkshell script if output equal any ip addressbash: Boolean math and unary '!'

Do any Labour MPs support no-deal?

Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?

Can a German sentence have two subjects?

How is it possible to have an ability score that is less than 3?

A Journey Through Space and Time

Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?

Underlining section titles

XeLaTeX and pdfLaTeX ignore hyphenation

Shell script not opening as desktop application

The magic money tree problem

What are these boxed doors outside store fronts in New York?

How to add power-LED to my small amplifier?

Using theabspage from the 'perpage' package

Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)

Why not use SQL instead of GraphQL?

What is the command to reset a PC without deleting any files

strToHex ( string to its hex representation as string)

What do the dots in this tr command do: tr .............A-Z A-ZA-Z <<< "JVPQBOV" (with 13 dots)

How to make payment on the internet without leaving a money trail?

Why was the small council so happy for Tyrion to become the Master of Coin?

Python: Add Submenu

Is it possible to make sharp wind that can cut stuff from afar?

Is it tax fraud for an individual to declare non-taxable revenue as taxable income? (US tax laws)

How do we improve the relationship with a client software team that performs poorly and is becoming less collaborative?



Which is the best way to check return result?


When is double-quoting necessary?Input validation in a bash scriptScript that asks for four words, then tells the user the word they chose. Output error?Get specific result from functionbash script to extract string from last output lineif statement with grepHow to check a set of lines in a text file for patterns using awk, sed, or grep?Check whether any value is zero using jq and return 0 to the calling shell scriptBash assign variable result of bool function, then checkshell script if output equal any ip addressbash: Boolean math and unary '!'






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








5















I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.



Code:



#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"

# Functions

function checkFolderExist()
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi



CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?

# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi









share|improve this question






























    5















    I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
    Then I check this "return", but I don't understand why "if" does not work because the return equal 1.



    Code:



    #!/bin/bash
    # Main folders
    INPUT="input"
    OUTPUT="output"

    # Functions

    function checkFolderExist()
    if [ -d $1 ]
    then
    # 0 = true
    # Change to 0, only for tests.
    return 1
    else
    mkdir $1
    result=$?
    if [ result==0 ]
    then
    # 0 = true
    return 0
    else
    # 1 = false
    return 1
    fi
    fi



    CHECKINPUT=$(checkFolderExist $INPUT)
    echo $?
    CHECKOUTPUT=$(checkFolderExist $OUTPUT)
    echo $?

    # If folders does not exist, exit the script
    if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
    echo "[+] Error. Folder does not exist. Check user permissions."
    exit 1
    fi









    share|improve this question


























      5












      5








      5


      1






      I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
      Then I check this "return", but I don't understand why "if" does not work because the return equal 1.



      Code:



      #!/bin/bash
      # Main folders
      INPUT="input"
      OUTPUT="output"

      # Functions

      function checkFolderExist()
      if [ -d $1 ]
      then
      # 0 = true
      # Change to 0, only for tests.
      return 1
      else
      mkdir $1
      result=$?
      if [ result==0 ]
      then
      # 0 = true
      return 0
      else
      # 1 = false
      return 1
      fi
      fi



      CHECKINPUT=$(checkFolderExist $INPUT)
      echo $?
      CHECKOUTPUT=$(checkFolderExist $OUTPUT)
      echo $?

      # If folders does not exist, exit the script
      if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
      echo "[+] Error. Folder does not exist. Check user permissions."
      exit 1
      fi









      share|improve this question
















      I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
      Then I check this "return", but I don't understand why "if" does not work because the return equal 1.



      Code:



      #!/bin/bash
      # Main folders
      INPUT="input"
      OUTPUT="output"

      # Functions

      function checkFolderExist()
      if [ -d $1 ]
      then
      # 0 = true
      # Change to 0, only for tests.
      return 1
      else
      mkdir $1
      result=$?
      if [ result==0 ]
      then
      # 0 = true
      return 0
      else
      # 1 = false
      return 1
      fi
      fi



      CHECKINPUT=$(checkFolderExist $INPUT)
      echo $?
      CHECKOUTPUT=$(checkFolderExist $OUTPUT)
      echo $?

      # If folders does not exist, exit the script
      if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
      echo "[+] Error. Folder does not exist. Check user permissions."
      exit 1
      fi






      bash shell-script






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 3 at 11:56









      Rui F Ribeiro

      42k1483142




      42k1483142










      asked Apr 3 at 11:54









      jaskjask

      484




      484




















          3 Answers
          3






          active

          oldest

          votes


















          14














          There's a few things here.



          • You very seldom have to explicitly check $? against anything or save it in a variable (unless you need to reference the same exit status multiple times).

          • The exit status of a function is the exit status of the last executed command in the function, so an explicit return is seldom needed (seldom with an explicit return value at least).

          • A function that checks whether a directory exists should not create any directories. Better call it create_dir_if_needed.

          • There's an error in [ result==0 ]. The string result==0 is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted [ "$result" -eq 0 ] instead.

          • Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.

          With these things in mind:



          create_dir_if_needed () 
          mkdir -p -- "$1"



          This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.



          You would use this as



          if ! create_dir_if_needed "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi


          or, since the function is trivial, you could get rid of it and say



          if ! mkdir -p -- "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi



          A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:



          create_dir_if_needed () 
          if [ -d "$1" ]; then
          return
          fi

          mkdir -- "$1"



          or,



          create_dir_if_needed () mkdir -- "$1"



          A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.






          share|improve this answer

























          • Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

            – jask
            Apr 4 at 10:32






          • 1





            @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

            – Kusalananda
            Apr 4 at 10:50



















          2














          Bash does not work like regular programming languages when it comes to returning values.



          Here you are confusing output from checkFolderExist with return status from checkFolderExist.



          Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.



          Should you really want to save your function’s return status for later use you should rather do:



          checkFolderExist "$INPUT"
          CHECKINPUT=$?

          checkFolderExist "$OUTPUT"
          CHECKOUTPUT=$?


          Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.






          share|improve this answer























          • Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

            – jask
            Apr 4 at 11:17


















          2














          You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:



          Either do a return:



          myfunc() 
          return 1


          myfunc
          ret=$?
          [ $ret -eq 0 ] && echo OK


          or write to stdout and check the output:



          myfunc() 
          echo '1'


          ret="$(myfunc)"
          [ "$ret" = '0' ] && echo OK


          Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.



          It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.






          share|improve this answer

























          • Great!! Thanks for the info.

            – jask
            Apr 4 at 11:18











          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          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: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          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%2funix.stackexchange.com%2fquestions%2f510269%2fwhich-is-the-best-way-to-check-return-result%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          3 Answers
          3






          active

          oldest

          votes








          3 Answers
          3






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          14














          There's a few things here.



          • You very seldom have to explicitly check $? against anything or save it in a variable (unless you need to reference the same exit status multiple times).

          • The exit status of a function is the exit status of the last executed command in the function, so an explicit return is seldom needed (seldom with an explicit return value at least).

          • A function that checks whether a directory exists should not create any directories. Better call it create_dir_if_needed.

          • There's an error in [ result==0 ]. The string result==0 is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted [ "$result" -eq 0 ] instead.

          • Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.

          With these things in mind:



          create_dir_if_needed () 
          mkdir -p -- "$1"



          This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.



          You would use this as



          if ! create_dir_if_needed "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi


          or, since the function is trivial, you could get rid of it and say



          if ! mkdir -p -- "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi



          A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:



          create_dir_if_needed () 
          if [ -d "$1" ]; then
          return
          fi

          mkdir -- "$1"



          or,



          create_dir_if_needed () mkdir -- "$1"



          A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.






          share|improve this answer

























          • Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

            – jask
            Apr 4 at 10:32






          • 1





            @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

            – Kusalananda
            Apr 4 at 10:50
















          14














          There's a few things here.



          • You very seldom have to explicitly check $? against anything or save it in a variable (unless you need to reference the same exit status multiple times).

          • The exit status of a function is the exit status of the last executed command in the function, so an explicit return is seldom needed (seldom with an explicit return value at least).

          • A function that checks whether a directory exists should not create any directories. Better call it create_dir_if_needed.

          • There's an error in [ result==0 ]. The string result==0 is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted [ "$result" -eq 0 ] instead.

          • Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.

          With these things in mind:



          create_dir_if_needed () 
          mkdir -p -- "$1"



          This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.



          You would use this as



          if ! create_dir_if_needed "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi


          or, since the function is trivial, you could get rid of it and say



          if ! mkdir -p -- "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi



          A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:



          create_dir_if_needed () 
          if [ -d "$1" ]; then
          return
          fi

          mkdir -- "$1"



          or,



          create_dir_if_needed () mkdir -- "$1"



          A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.






          share|improve this answer

























          • Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

            – jask
            Apr 4 at 10:32






          • 1





            @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

            – Kusalananda
            Apr 4 at 10:50














          14












          14








          14







          There's a few things here.



          • You very seldom have to explicitly check $? against anything or save it in a variable (unless you need to reference the same exit status multiple times).

          • The exit status of a function is the exit status of the last executed command in the function, so an explicit return is seldom needed (seldom with an explicit return value at least).

          • A function that checks whether a directory exists should not create any directories. Better call it create_dir_if_needed.

          • There's an error in [ result==0 ]. The string result==0 is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted [ "$result" -eq 0 ] instead.

          • Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.

          With these things in mind:



          create_dir_if_needed () 
          mkdir -p -- "$1"



          This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.



          You would use this as



          if ! create_dir_if_needed "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi


          or, since the function is trivial, you could get rid of it and say



          if ! mkdir -p -- "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi



          A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:



          create_dir_if_needed () 
          if [ -d "$1" ]; then
          return
          fi

          mkdir -- "$1"



          or,



          create_dir_if_needed () mkdir -- "$1"



          A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.






          share|improve this answer















          There's a few things here.



          • You very seldom have to explicitly check $? against anything or save it in a variable (unless you need to reference the same exit status multiple times).

          • The exit status of a function is the exit status of the last executed command in the function, so an explicit return is seldom needed (seldom with an explicit return value at least).

          • A function that checks whether a directory exists should not create any directories. Better call it create_dir_if_needed.

          • There's an error in [ result==0 ]. The string result==0 is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted [ "$result" -eq 0 ] instead.

          • Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.

          With these things in mind:



          create_dir_if_needed () 
          mkdir -p -- "$1"



          This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.



          You would use this as



          if ! create_dir_if_needed "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi


          or, since the function is trivial, you could get rid of it and say



          if ! mkdir -p -- "$dirpath"; then
          printf 'Failed to create directory "%s"n' "$dirpath" >&2
          exit 1
          fi



          A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:



          create_dir_if_needed () 
          if [ -d "$1" ]; then
          return
          fi

          mkdir -- "$1"



          or,



          create_dir_if_needed () mkdir -- "$1"



          A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 3 at 13:22









          Stéphane Chazelas

          313k57592949




          313k57592949










          answered Apr 3 at 12:04









          KusalanandaKusalananda

          140k17261435




          140k17261435












          • Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

            – jask
            Apr 4 at 10:32






          • 1





            @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

            – Kusalananda
            Apr 4 at 10:50


















          • Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

            – jask
            Apr 4 at 10:32






          • 1





            @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

            – Kusalananda
            Apr 4 at 10:50

















          Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

          – jask
          Apr 4 at 10:32





          Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!

          – jask
          Apr 4 at 10:32




          1




          1





          @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

          – Kusalananda
          Apr 4 at 10:50






          @jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for mkdir but applies to most command line utilities.

          – Kusalananda
          Apr 4 at 10:50














          2














          Bash does not work like regular programming languages when it comes to returning values.



          Here you are confusing output from checkFolderExist with return status from checkFolderExist.



          Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.



          Should you really want to save your function’s return status for later use you should rather do:



          checkFolderExist "$INPUT"
          CHECKINPUT=$?

          checkFolderExist "$OUTPUT"
          CHECKOUTPUT=$?


          Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.






          share|improve this answer























          • Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

            – jask
            Apr 4 at 11:17















          2














          Bash does not work like regular programming languages when it comes to returning values.



          Here you are confusing output from checkFolderExist with return status from checkFolderExist.



          Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.



          Should you really want to save your function’s return status for later use you should rather do:



          checkFolderExist "$INPUT"
          CHECKINPUT=$?

          checkFolderExist "$OUTPUT"
          CHECKOUTPUT=$?


          Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.






          share|improve this answer























          • Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

            – jask
            Apr 4 at 11:17













          2












          2








          2







          Bash does not work like regular programming languages when it comes to returning values.



          Here you are confusing output from checkFolderExist with return status from checkFolderExist.



          Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.



          Should you really want to save your function’s return status for later use you should rather do:



          checkFolderExist "$INPUT"
          CHECKINPUT=$?

          checkFolderExist "$OUTPUT"
          CHECKOUTPUT=$?


          Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.






          share|improve this answer













          Bash does not work like regular programming languages when it comes to returning values.



          Here you are confusing output from checkFolderExist with return status from checkFolderExist.



          Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.



          Should you really want to save your function’s return status for later use you should rather do:



          checkFolderExist "$INPUT"
          CHECKINPUT=$?

          checkFolderExist "$OUTPUT"
          CHECKOUTPUT=$?


          Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Apr 3 at 13:11









          LL3LL3

          1,0667




          1,0667












          • Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

            – jask
            Apr 4 at 11:17

















          • Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

            – jask
            Apr 4 at 11:17
















          Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

          – jask
          Apr 4 at 11:17





          Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.

          – jask
          Apr 4 at 11:17











          2














          You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:



          Either do a return:



          myfunc() 
          return 1


          myfunc
          ret=$?
          [ $ret -eq 0 ] && echo OK


          or write to stdout and check the output:



          myfunc() 
          echo '1'


          ret="$(myfunc)"
          [ "$ret" = '0' ] && echo OK


          Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.



          It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.






          share|improve this answer

























          • Great!! Thanks for the info.

            – jask
            Apr 4 at 11:18















          2














          You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:



          Either do a return:



          myfunc() 
          return 1


          myfunc
          ret=$?
          [ $ret -eq 0 ] && echo OK


          or write to stdout and check the output:



          myfunc() 
          echo '1'


          ret="$(myfunc)"
          [ "$ret" = '0' ] && echo OK


          Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.



          It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.






          share|improve this answer

























          • Great!! Thanks for the info.

            – jask
            Apr 4 at 11:18













          2












          2








          2







          You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:



          Either do a return:



          myfunc() 
          return 1


          myfunc
          ret=$?
          [ $ret -eq 0 ] && echo OK


          or write to stdout and check the output:



          myfunc() 
          echo '1'


          ret="$(myfunc)"
          [ "$ret" = '0' ] && echo OK


          Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.



          It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.






          share|improve this answer















          You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:



          Either do a return:



          myfunc() 
          return 1


          myfunc
          ret=$?
          [ $ret -eq 0 ] && echo OK


          or write to stdout and check the output:



          myfunc() 
          echo '1'


          ret="$(myfunc)"
          [ "$ret" = '0' ] && echo OK


          Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.



          It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 3 at 17:11

























          answered Apr 3 at 17:01









          rexkogitansrexkogitans

          405313




          405313












          • Great!! Thanks for the info.

            – jask
            Apr 4 at 11:18

















          • Great!! Thanks for the info.

            – jask
            Apr 4 at 11:18
















          Great!! Thanks for the info.

          – jask
          Apr 4 at 11:18





          Great!! Thanks for the info.

          – jask
          Apr 4 at 11:18

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Unix & Linux Stack Exchange!


          • 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%2funix.stackexchange.com%2fquestions%2f510269%2fwhich-is-the-best-way-to-check-return-result%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

          Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

          Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

          Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given