2016-04-29 2 views
-1

Я беру курс, который имеет следующий сценарий в лаборатории:Bash выход выраж вопрос

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

Это дает выход в Method 2 Answer is expr $fNumber - $sNumber вместо Method 2 Answer is expr 20, например.

вход должен быть чем-то вроде script.sh m 30 50 to multiply 30 by 50 или script.sh s 70 30 вычесть 30 из 70.

Я попытался с помощью двойные кавычки, одиночные кавычки и скобки {в Ответ2 = выр ... линий без успеха.

Пожалуйста, помогите. Спасибо!

+0

Ввод кавычку перед и после каждой строки делает ваш код почти нечитаемым. Чтобы пометить блок текста как раздел кода, выберите его в редакторе и нажмите кнопку '{}', которая будет отступать каждую строку на четыре символа, имея необходимый эффект. –

+0

Также попробуйте следовать http://stackoverflow.com/help/mcve - описать, как построить * минимальный *, * полный *, * проверяемый * пример для любого вопроса. –

+0

... поэтому, если у вас возникла проблема с 'expr', покажите только те части, которые включают' expr', и удалите что-нибудь (например, ввод данных пользователя и проверку действительности и т. Д.), Что не обязательно для демонстрации эта проблема. (Конечно, вам нужно иметь значения для работы, но значения могут быть жестко закодированы). –

ответ

0

Вы используете двойные кавычки "".

Измените строки из:

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

To:

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

Это сработало. Большое спасибо. – Debug255

+0

Лучше будет 'expr '$ fNumber" + "$ sNumber" ' –

+0

Для' answer2 = $ (expr $ {fNumber} * $ {sNumber}) ', это не выдавало никакого вывода. – Debug255

Смежные вопросы