Синтаксическая ошибка: ожидается операнд (токен ошибки «= 1 +»)

Я новичок в написании сценариев оболочки и не уверен, почему получаю эту ошибку. Если я запускаю программу и выбираю вычитание, ошибка возникает в следующей подфункции в том же месте. Я опубликовал весь свой код, но думаю, что ошибка существует только в первых двух функциях (add () и sub ().

Мы будем очень признательны за любые объяснения того, почему это происходит. Спасибо

function add(){
echo "mycalc $1 + $2" 
(($sum = $1 + $2))
echo "The sum of $1 plus $2 is $sum" 
sleep 3
clear
exit
}

function sub(){
echo "mycalc $1 - $2" 
(($sub = $1 - $2))
echo "$1 minus $2 equals $sub" 
sleep 3
clear
exit
}

choice=a

if [ $# = 3 ] && [ "$2" = '+' ] || [ "$2" = '-' ]
then if 
[ "$2" = '+' ] && [ "$1" -le 0 ] || [ "$1" -ge 0 ] && [ "$3" -le 0 ] || [ "$3" -ge 0 ]
then add $1 $3

elif
[ "$2" = '-' ] && [ "$1" -le 0 ] || [ "$1" -ge 0 ] && [ "$3" -le 0 ] || [ "$3" -ge 0 ]
then sub $1 $3
else
echo "Main Menu"
sleep 3
clear
fi
else while [ $choice != "X" ] && [ $choice != "x" ]
do
echo "Please choose one of the following options" 
echo "C) Calculate " 
echo "X) Exit" 
read -p "Option" choice

if [ $choice = "C" ] || [ $choice = "c" ]
then choice1=a
while [ $choice1 != "X" ] && [ $choice1 != "x" ] 
do
read -p "Please enter an integer or press X to exit." choice1

if [ $choice1 = "X" ] || [ $choice1 = "x" ]
then
echo "Good bye" 
sleep 3
clear
exit

elif [ $choice1 -le 0 ] || [ $choice1 -ge 0 ]
then action=a
while [ $action != "X" ] && [ $action != "x" ] 
do
echo "Please select an operation"
echo "+) Addition" 
echo "-) Subtraction" 
echo "X) Exit" 
read action

if [ $action = "X" ] || [ $action = "x" ]
then
echo "Good bye" 
sleep 3
clear
exit

elif [ "$action" = "+" ] || [ "$action" = "a" ] || [ "$action" = "A" ]
then
read -p "Please enter another number " num2
add $1 $num2
elif [ $action = "-" ] || [ $action = s ] || [ $action = "S" ]
then
read -p "Please enter another number " num2
sub $1 $num2

else
echo "Invalid response, please try again" sleep 3 
clear
fi
done

else
echo "Invalid response" 
sleep 3
clear
fi
done

elif [ choice = "X" ] || [ choice = "x" ]
then
echo "Good bye" 
sleep 3
clear
exit

else
echo "Invalid response"
sleep 3
clear
fi
done
fi
                                                          117,1         Bot
0
08.12.2016, 09:10
2 ответа

Помимо арифметики расширения, другой способ оценки числовых операций - использовать встроенный в оболочку keywrod let :

let sum=$1+$2
let sub=$1-$2

Дополнительная информация по этому ключевому слову: help let или man bash .

0
28.01.2020, 02:34

Ошибка в (($ sum = $ 1 + $ 2)) для сложения чисел в сценарии bash

Используйте арифметическое расширение :

Для целого числа:

sum=$(($1 + $2))
sub=$(($1 - $2))
2
28.01.2020, 02:34

Теги

Похожие вопросы