Автор Гілка: математичні операції в Bash  (Прочитано 4691 раз)

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
День добрий ! Підкажіть будь ласка , я на Bash можливо розділити два числа із залишком ? Чи я зовсім того, бо не знайшов як розділити 128020 на 100 та отримати 1280,20 .... Пробував AWK  там також щось монстроподібне ... Дякую !
« Змінено: 2012-04-02 17:49:44 від Tomkat »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: математичні операції в Bash
« Відповідей #1 : 2012-04-02 18:08:46 »
a=22; b=3; printf "%u.%02u\n" $(( a / b )) $(( a * 100 / b % 100 ))

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: математичні операції в Bash
« Відповідей #2 : 2012-04-02 18:16:18 »
bc <<< 'scale=2; 22/3'

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
Re: математичні операції в Bash
« Відповідей #3 : 2012-04-02 20:17:57 »
 :o чому ж так нетрівіально ???? невже сішний компілятор не вміє розділити за одну дію ?

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
Re: математичні операції в Bash
« Відповідей #4 : 2012-04-02 20:25:46 »
другий спосіб більше сподобався , але не вийшло передати змінну у скрипту ....
вийшло першим способом ... я так розумію, тут просто зчеплено результати ділення без остачі, та остача від ділення  ?

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: математичні операції в Bash
« Відповідей #5 : 2012-04-02 21:15:29 »
Який сішний компілятор?? bash використовує gcc для розбору командного рядка? це для мене новина.

Перший спосіб — так, це ділення без остачі, bash нативно вміє лише цілочисельні операції.

Передати змінну скрипту — як аргумент чи як результат? В будь-якому разі:
tsubasa:~$ a=22
tsubasa:~$ b=3
tsubasa:~$ result="$(bc <<END
> scale=2
> $a/$b
> END
> )"
tsubasa:~$ echo $result
7.33
« Змінено: 2012-04-02 21:17:15 від ISBear »

anonymous

  • Гість
Re: математичні операції в Bash
« Відповідей #6 : 2012-04-02 21:25:22 »
Який сішний компілятор?? bash використовує gcc для розбору командного рядка? це для мене новина.
Всяке буває=)
Цитата
echo 'int main(void){int a=75; int b=10; printf("%d %d \n", a / b, a % b); return 0;}' > /tmp/1.c && gcc -include stdio.h /tmp/1.c -o /tmp/1.elf && /tmp/1.elf && rm /tmp/1.elf /tmp/1.c

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
Re: математичні операції в Bash
« Відповідей #7 : 2012-04-02 21:27:09 »
Передати змінну скрипту — як аргумент чи як результат?
як аргумент
щось на зразок  
a=128020
b=100
c= bc <<< 'scale=2; $a/$b'
чи c=` bc <<< 'scale=2; $a/$b'`

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: математичні операції в Bash
« Відповідей #8 : 2012-04-02 21:38:32 »
Тоді просто <<<"...$a...$b..."
Лапки зберігають своє значення в цьому випадку — у одинарних нічого не розкривається, подвійні лише запобігають розділенню аргументу на частини пробілами (на відміну від here-documents — там маркер без лапок (<<END) має ефект подвійних лапок, а маркер з будь-якими лапками (<<'END', <<"END") — одинарних).

P.S. Замість `` краще використовувати "$( )" — так якщо у результаті будуть пробіли, помилки не станеться.
P.P.S. Взагалі кажучи, <<<"..." є башизмом, тому краще використовувати here-documents. Приклад наведено у третьому моєму дописі.
« Змінено: 2012-04-02 21:47:32 від ISBear »

anonymous

  • Гість
Re: математичні операції в Bash
« Відповідей #9 : 2012-04-02 21:59:43 »
P.P.S. Взагалі кажучи, <<<"..." є башизмом, тому краще використовувати here-documents. Приклад наведено у третьому моєму дописі.
Використати пайп, який не є башизмом. І, якщо на те пішло, bc - це утиліта зовнішня. З таким же успіхом можна використовувати awk, вірогідність наявності якого в системі дещо вища. Що, ідеологічно, мало відрізняється від мого варіанту.

Буквальною відповіддю на запитання топікстартера є перший коментар.

//капча "червоноокому"

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
Re: математичні операції в Bash
« Відповідей #10 : 2012-04-03 11:36:43 »
Добре, залишив варіант
a=$summa
b=100
summa=`bc  <<< "scale=2;$a/$b"`
Працює ! Дякую.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: математичні операції в Bash
« Відповідей #11 : 2012-04-03 11:45:33 »
немає потреби створювати зайві змінні:
summa=`bc <<< "scale=2; $summa/100"`

Відсутній Tomkat

  • Кореспондент
  • ***
  • дописів: 160
  • Карма: +0/-0
Re: математичні операції в Bash
« Відповідей #12 : 2012-04-03 12:02:28 »
немає потреби створювати зайві змінні:
summa=`bc <<< "scale=2; $summa/100"`
згоден , це так , для наглядності

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: математичні операції в Bash
« Відповідей #13 : 2012-04-04 21:17:57 »
expr 5 % 3
чи я щось не зрозумів?

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Re: математичні операції в Bash
« Відповідей #14 : 2012-04-04 21:31:07 »
expr 5 % 3
чи я щось не зрозумів?
А тепер спробуйте прочитати перше повідомлення.
« Змінено: 2012-04-04 21:44:27 від Re. »