-2
#!/bin/bash

while true
do
     if [[ $# -eq 0 ]] ; then
         echo Enter operand1 value:
         read operand1
 
         # Offer choices
         echo 1. Addition
         echo 2. Subtraction
         echo 3. Multiplication
         echo 4. Division
         echo 5. Exit
 
         echo Enter your choice:
         read choice

         if [[ $choice != 1 || 2 || 3 || 4 || 5 ]] ; then
             echo Sorry $choice is not a valid operator - please try again 
             echo Enter your choice:
             read choice
         else 
             Continue 
         fi
 
         echo Enter operand2 value:
         read operand2
 
         # get operands and start computing based on the user's choice
         if [[ $choice -eq 1 ]] ; then
             echo ----------------------------------------
             echo Addition of $operand1 and $operand2 is $((operand1+operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 2 ]] ; then
             echo ----------------------------------------
             echo Subtraction of $operand1 and $operand2 is $((operand1-operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 3 ]] ; then
             echo ----------------------------------------
             echo Multiplication of $operand1 and $operand2 is $((operand1*operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 4 && operand2 -eq 0 ]] ; then
             echo Can not divide by 0 please try again 
             echo Please enter operand2
             read operand2
             echo ----------------------------------------
             echo Division of $operand1 and $operand2 is $((operand1/operand2))
             echo ----------------------------------------
             echo    
          elif [[ $choice -eq 4 && operand2 -ne 0 ]] ; then
             echo ----------------------------------------
             echo Division of $operand1 and $operand2 is $((operand1/operand2))
             echo ----------------------------------------
             echo    
         elif [[ $choice -eq 5 ]] ; then
             exit    
         else
             echo ----------------------------------------
             echo Invalid choice.. Please try again
             echo ----------------------------------------
             echo
         fi        
   else
             echo ----------------------------------------
             echo You either passed too many parameters or too less
             echo than the optimum requirement.
             echo
             echo This program accepts a maximum of 2 arguments or no
             echo argument at all in order to run successfully.
             echo ----------------------------------------
   fi
done

I am looking to add functionality to the above code so that each subsequent operation will use the previous result, prompt the user for the next operator and operand so that the user doesn't have to enter the first operand again and it simply stores it in memory. I cant seem to think of any ways to do this - any advice?

9
  • 2
    Q: Do you want to use the same value of "operand1" over and over again ... or do you want to use the result as the 1st operand in subsequent operations? In either case: just use a shell variable. Assign the result to a variable ... instead of just printing it. Here is how you can check if a Bash variable is assigned or not. Commented Feb 21, 2021 at 23:43
  • 1
    Code in a question should be a minimal reproducible example -- the shortest possible thing that demonstrates a specific problem. Why have five options and a bunch of echos? Beyond that, it's not clear why you're having a problem with storing a value across iterations -- variables you set stay in place, so what's the specific thing that goes wrong when you try? Commented Feb 21, 2021 at 23:45
  • 1
    BTW, [[ $choice != 1 || 2 || 3 || 4 || 5 ]] is always true, because after checking [[ $choice != 1 ]] (which may be either true or false), it checks [[ 2 ]], which is always true (because it's equivalent to [[ -n 2 ]], and 2 is not an empty string). Commented Feb 21, 2021 at 23:46
  • Thanks for pointing that out @CharlesDuffy I see that now. Would you recommend a way to format this I've been trying to input a line which would show the user that they inputted an incorrect operator and this is the only one that actually functions with my script. Any help being pushed in the right direction would be greatly helpful Commented Feb 22, 2021 at 0:12
  • The above aspect of the question is a duplicate of Compare string to multiple correct values. Commented Feb 22, 2021 at 0:24

1 Answer 1

0

You should store the result in a variable like this:

result=$((operand1+operand2))

Then your first if statement can check if this variable has a value, and if it does, skip the read and use it instead.

if [[ $result == "" ]]; then
    echo Enter operand1 value:
    read operand1
else
    operand1=$result
    echo "Operand 1 is: $result"
    echo ""
fi
...

Here is the working version of your code:

#!/bin/bash

while true
do
     if [[ $# -eq 0 ]] ; then
        if [[ $result == "" ]]; then # check if $result is empty
            echo Enter operand1 value: 
            read operand1
        else
            operand1=$result # if not empty then assign its value to $operand1
            echo "Operand 1 is: $result"
            echo ""
        fi
 
         # Offer choices
         echo 1. Addition
         echo 2. Subtraction
         echo 3. Multiplication
         echo 4. Division
         echo 5. Exit
 
         echo Enter your choice:
         read choice

         if [[ $choice != 1 && $choice != 2 && $choice != 3 && $choice != 4 && $choice != 5 ]] ; then
             echo Sorry $choice is not a valid operator - please try again 
             echo Enter your choice:
             read choice
         fi
 
         echo Enter operand2 value:
         read operand2
 
         # get operands and start computing based on the user's choice
         if [[ $choice -eq 1 ]] ; then
             result=$((operand1+operand2)) # store result
             echo ----------------------------------------
             echo Addition of $operand1 and $operand2 is $((operand1+operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 2 ]] ; then
             result=$((operand1-operand2)) # store result
             echo ----------------------------------------
             echo Subtraction of $operand1 and $operand2 is $((operand1-operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 3 ]] ; then
             result=$((operand1*operand2)) # store result
             echo ----------------------------------------
             echo Multiplication of $operand1 and $operand2 is $((operand1*operand2))
             echo ----------------------------------------
             echo
         elif [[ $choice -eq 4 && operand2 -eq 0 ]] ; then
             echo Can not divide by 0 please try again 
             echo Please enter operand2
             read operand2
             echo ----------------------------------------
             echo Division of $operand1 and $operand2 is $((operand1/operand2))
             echo ----------------------------------------
             echo    
             result=$((operand1/operand2)) # store result
          elif [[ $choice -eq 4 && operand2 -ne 0 ]] ; then
             result=$((operand1/operand2)) # store result
             echo ----------------------------------------
             echo Division of $operand1 and $operand2 is $((operand1/operand2))
             echo ----------------------------------------
             echo    
         elif [[ $choice -eq 5 ]] ; then
             exit    
         else
             echo ----------------------------------------
             echo Invalid choice.. Please try again
             echo ----------------------------------------
             echo
         fi        
   else
             echo ----------------------------------------
             echo You either passed too many parameters or too less
             echo than the optimum requirement.
             echo
             echo This program accepts a maximum of 2 arguments or no
             echo argument at all in order to run successfully.
             echo ----------------------------------------
   fi
done
Sign up to request clarification or add additional context in comments.

3 Comments

Thank you for your input, would I have to add a result variable for each operation to be stored before my loops?
@LukeMcCutcheon You can store the value right after or before you echo the answer to the user in each type of operation.
@LukeMcCutcheon I added a working example with comments marking up the changes

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.