Проблемы использования операторов "Mul" и "Mod" в Bash - PullRequest
0 голосов
/ 01 декабря 2011

Я не понимаю, почему в этом коде

echo "Please, give me two numbers:"
echo 1: 
read a
echo 2:
read b 
echo "a = $a"
echo "b = $b"

OPT="Sum Sub Div Mul Mod"
 select opt in $OPT; do

if [ $opt = "Sum"  ]; then
 sum=$(echo $a + $b | bc -l)
 echo "SUM is: $sum"

elif [ $opt = "Sub"  ]; then
 sub=$(echo $a - $b | bc -l)
 echo "SUB is: $sub"

elif [ $opt = "Div"  ]; then
  div=$(echo $a / $b | bc -l)
  echo "DIV is: $div"

elif [ $opt = "Mul"  ]; then
  mul=$(echo $a * $b | bc -l)
  echo "MUL is: $mul"

elif [ $opt = "Mod"  ]; then
  mod=$(echo $a % $b | bc -l )
  echo "MOD is: $mod"

else
 clear
 echo "wrong choise"
 exit

fi

done

выполняется правильно SUM, SUB и DIV, но если я хочу выполнить операцию MUL или MOD, выдает ошибку:

(standard_in) 1: синтаксическая ошибка

(standard_in) 1: недопустимый символ: ~

(standard_in) 1: недопустимый символ: ~

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Вам нужно заключить в кавычки *, в противном случае он расширяется оболочкой.

    mul=$(echo $a '*' $b | bc -l)

% должно быть без кавычек, но для простоты вы можете указать все операторы.

1 голос
/ 01 декабря 2011

Это должно работать так, как вы ожидаете.Вам нужно сбежать от * и %.И у вас было echo "MOD is $mul":

echo "Please, give me two numbers:"
echo 1: 
read a
echo 2:
read b 
echo "a = $a"
echo "b = $b"

OPT="Sum Sub Div Mul Mod"
 select opt in $OPT; do

if [ $opt = "Sum"  ]; then
 sum=$(echo $a + $b | bc -l)
 echo "SUM is: $sum"

elif [ $opt = "Sub"  ]; then
 sub=$(echo $a - $b | bc -l)
 echo "SUB is: $sub"

elif [ $opt = "Div"  ]; then
  div=$(echo $a / $b | bc -l)
  echo "DIV is: $div"

elif [ $opt = "Mul"  ]; then
  mul=$(echo $a \* $b | bc -l)
  echo "MUL is: $mul"

elif [ $opt = "Mod"  ]; then
  mod=$(echo $a \% $b | bc -l )
  echo "MOD is: $mod"

else
 clear
 echo "wrong choice"
 exit

fi

done
...