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!
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. –
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. –
... 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). –