Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: не могу разобраться в bash с элементарной арифметикой  (Прочитано 1265 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Добрый день! Пытаюсь написать себе скрипт с простейшей задачей - он принимает от пользователя числа х и у и выполняет следующий арифметический пример: z = 1/x + 1/y

Со вводом чисел проблем нет
Код: (php) [Выделить]
echo -n “Введите x”
read x
echo -n “Введите y”
read y 

Далее пытаюсь просто разделить единицу на x (для проверки):
Код: (php) [Выделить]
z=$((1/$x))
Допустим, х=4 - получен результат 0, но ведь 1 / 4 = 0,25 (тут видимо происходит округление, знаю что остаток выводится в %, но куда его ставить?)

Допустим, х=0,1 - получен пустой вывод (пробовал и через точку, и через запятую, видимо надо указывать как дробь... но в таком случае как записать 1,01)
пришло время переустановить шындос

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
bash работает с целыми числами. Для дробных стоит использовать bc, dc, … Или тот же awk
Код: (bash) [Выделить]
#!/bin/bash
#USAGE: ./script.name arithmetic_expression

case x$* in
   x) printf "Использование: ${0##*/} \'арифм. выражение\'\n"
      exit;;
x*,*) printf "В качестве десятичной точки используется знак «.»\n"
      set -- ${*//,/.};;
esac
set -- ${*//[ \'\`]/}
result=$(awk 'BEGIN { OFMT="%f"; print '"$*"'; exit}')
case $result in
*.*0) result=${result%"${result##*[!0]}"} ;;
esac
printf "%s\n" "$result"
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Код: (bash) [Выделить]
x=4
z=$(echo "scale=2; 1/$x" | bc | sed 's/^\./0\./')
echo $z

 

Страница сгенерирована за 0.015 секунд. Запросов: 22.