2016-04-29 23 views
-1

Ich nehme einen Kurs, der das folgende Skript in einem Labor hat:Bash ausdr Ausgabe Ausgabe

#/bin/bash 
# 
# arithmeticLab 
# demonstrates arithmetic, functions and simple if clauses 
# three methods are used for arithmetic. 
# the exercise requires only one. 
# the three methods are: 
# 1) let 
# 2) expr 
# 3) $((...)) 
# The user will input a letter and two numbers. 
# the letter will 
# be a(dd), s(ubtract), m(ultiply), d(ivide) 
# to select an 
# arithmetic operation. 

# Functions. must be before the main part of the script 
# 
adder() { 

# method 1. use let 
let answer1=($fNumber + $sNumber) 

# method 2. use expr 
answer2="expr ${fNumber} + ${sNumber}" 

# method 3. use $((...)) 
answer3=$(($fNumber + $sNumber)) 

} # end adder function 
#-------------------------------- 

subtracter() { 

# method 1. use let 
let answer1=($fNumber - $sNumber) 

# method 2. use expr 
answer2='expr $fNumber - $sNumber' 

# method 3. use $((...)) 
answer3=$(($fNumber - $sNumber)) 

} # end subtracter function 

#--------------------------------------- 

multiplyer() { 

# method 1. use let 
let answer1=($fNumber * $sNumber) 

# method 2. use expr 
answer2='expr $fNumber * $sNumber)' 

# method 3. use $((...)) 
answer3=$((fNumber * $sNumber)) 

} # end multiplyer function 

#------------------------------------- 

divider() { 

# method 1. use let 
let answer1=($fNumber/$sNumber) 

# method 2. use expr 
answer2='expr $fNumber/$sNumber' 

# method 3 use $((...)) 
answer3=$(($fNumber/$sNumber)) 

} # end divider function 
# End of functions 
# 

# Main part of the script 
# check that user provided a letter and two numbers 
# does not checkt o see if the user put in 
# an incorrect letter 
# which wil simply display messages without an answer 

if [ $# -lt 3 ] 
then 
    echo "" 
    echo "Usage: Provide an operation (a,s,m,d) and two numbers" 
    echo "Syntax: "$arithmetic.sh s 40 2" will produce output of "40 - 2."" 
    echo "" 
    exit 1 
fi 

#----------------- 

# set the input number to variables to pass to the functions 
# 

fNumber=$2 
sNumber=$3 

if [[ $1 == "a" ]] 
    then 
     adder 
fi 

if [[ $1 == "s" ]] 
    then 
     subtracter 
fi 

if [[ $1 == "m" ]] 
    then 
     multiplyer 
fi 

if [[ $1 == "d" ]] 
    then 
     divider 
fi 

#------------------------------- 
# Present the answers for all three methdos 
# 

echo "Method 1 Answer is $answer1" 
echo "Method 2 Answer is $answer2" 
echo "Methdo 3 Answer is $answer3" 

Diese eine Ausgabe als Method 2 Answer is expr $fNumber - $sNumber erzeugt statt Method 2 Answer is expr 20, zum Beispiel.

Die Eingabe sollte so etwas wie script.sh m 30 50 to multiply 30 by 50 oder script.sh s 70 30 seine 30 subtrahieren von 70

ich doppelte Anführungszeichen, Apostrophe und {Klammern in den answer2 = ausdr ... Linien ohne Erfolg versucht mit.

Bitte helfen. Vielen Dank!

+0

Putting Backticks vor und nach jeder Zeile fast unlesbaren Code macht. Um einen Textblock als Codeabschnitt zu markieren, wählen Sie ihn im Editor aus und klicken Sie auf die Schaltfläche {} ', die jede Zeile um vier Zeichen einrücken wird und den erforderlichen Effekt hat. –

+0

Versuchen Sie auch, http://stackoverflow.com/help/mcve zu folgen - und beschreiben Sie, wie Sie ein * minimum *, * complete *, * überprüfbares * Beispiel für eine Frage erstellen können. –

+0

... also, wenn Sie ein Problem mit 'expr' haben, zeigen Sie nur die Teile an, die' expr' enthalten, und entfernen Sie alles (wie die Benutzereingabe und Gültigkeitsprüfung usw.), die nicht demonstriert werden müssen dieses Problem. (Sicher, Sie müssen Werte haben, um zu arbeiten, aber Werte können fest codiert sein). –

Antwort

0

Sie verwenden doppelte Anführungszeichen "".

Ihre Linien Wechsel von:

answer2="expr ${fNumber} + ${sNumber}" 

An:

answer2=$(expr ${fNumber} + ${sNumber}) 
+0

Das hat funktioniert. Vielen Dank. – Debug255

+0

Besser wäre 'expr' $ fNummer" + "$ sNumber" ' –

+0

Für' answer2 = $ (expr $ {fNumber} * $ {sNumber}) ', hat dies keine Ausgabe erzeugt. – Debug255