2016-04-29 17 views
-1

私はラボで次のスクリプトを持ってコースを取っています:これは、例えば、Method 2 Answer is expr $fNumber - $sNumber代わりのMethod 2 Answer is expr 20として出力を生成バッシュexprの出力問題

#/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" 

入力は、私は成功せずANSWER2 = exprの...行に二重引用符、一重引用符と{ブラケットを使用してみました

70から30を減算する script.sh m 30 50 to multiply 30 by 50又は script.sh s 70 30ようなものであるべきです。

助けてください。ありがとうございました!

+0

前に、それぞれの行は、あなたのコードはほとんど読めなくなります後にバッククォートを置きます。テキストブロックをコードセクションとしてマークするには、エディタでそれを選択し、各行を4文字ずつインデントする '{}'ボタンをクリックします。これにより、必要な効果が得られます。 –

+0

また、質問に対して* minimal *、* complete *、* verifiable *の例を構築する方法を説明するhttp://stackoverflow.com/help/mcveに従ってください。 –

+0

... 'expr'に問題がある場合、' expr'を含む部分だけを表示し、デモする必要のないもの(ユーザ入力や妥当性チェックなど)を削除してくださいその問題。 (もちろん、操作する値が必要ですが、値はハードコードすることができます)。 –

答えて

0

二重引用符 ""を使用しています。

からあなたの行を変更し

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

へ:

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

それは働いた。どうもありがとうございました。 – Debug255

+0

'$ fNumber" + "$ sNumber" ' –

+0

' 'exp2 $(expr $ {fNumber} * $ {sNumber})' 'に対して、これは出力を生成しませんでした。 – Debug255