Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
250 views
in Technique[技术] by (71.8m points)

bash - Shell Script - Adding memory functionality

#!/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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...