Я беру курс, который имеет следующий сценарий в лаборатории: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 = выр ... линий без успеха.
Пожалуйста, помогите. Спасибо!
Ввод кавычку перед и после каждой строки делает ваш код почти нечитаемым. Чтобы пометить блок текста как раздел кода, выберите его в редакторе и нажмите кнопку '{}', которая будет отступать каждую строку на четыре символа, имея необходимый эффект. –
Также попробуйте следовать http://stackoverflow.com/help/mcve - описать, как построить * минимальный *, * полный *, * проверяемый * пример для любого вопроса. –
... поэтому, если у вас возникла проблема с 'expr', покажите только те части, которые включают' expr', и удалите что-нибудь (например, ввод данных пользователя и проверку действительности и т. Д.), Что не обязательно для демонстрации эта проблема. (Конечно, вам нужно иметь значения для работы, но значения могут быть жестко закодированы). –