Команда expr та calc: розв’язання математичних виразів у терміналі

Я один з тих, хто завжди програмує сценарії бити для вирішення повсякденних ситуацій (зламати пароль AP / маршрутизатора, автоматизувати процеси тощо.).

У деяких випадках я бачив необхідність присвоювати значення математичного виразу змінній, або просто працювати з математичними виразами, там я опиняюсь перед проблемою, що bash і математичні вирази, обчислення не дуже зручні. Трапляється, що bash не схожий на python, що вже говорити змінна = 1 + 5/6 (наприклад), в Bash ми повинні використовувати команду експр o Трасування

Команда expr

Іншими словами, команда expr допомагає нам розв’язувати математичні вирази в терміналі, за допомогою нього ми можемо обчислити, що нам потрібно. Наприклад, якщо ми хочемо, щоб з'явився результат 1 + 2 * 8/3, ми поміщаємо в термінал:

expr 1 + 2 \* 8 / 3

Зверніть увагу, що перед зірочкою * я ставлю зворотну косу риску - »\ ... це необхідно, оскільки expr не трактує зірочку як символ множення, якщо

І результат з’явиться на екрані. Ось знімок екрана з кількома прикладами:

screenshot_expr1

Як ви можете бачити в остаточних розрахунках (14/4 і 13/4), 14, поділене на 4, насправді становить 3.5, а 13, поділене на 4, насправді становить 3.25, то як можливо, що воно показує нам 3 в обох випадках? Що відбувається, так це те, що команда expr не показує нам десяткові крапки, тобто те, що слідує після коми, вона не показує, вона показує нам лише ціле число.

У випадку, якщо ми хочемо призначити змінній результат математичного виразу (Приклад: 10/2), це буде так:

variable=`expr 10 / 2`

Потім ми перевіряємо це за допомогою:

echo $variable

Важливо, щоб між кожним символом був пробіл, тобто проміжок між кожним числом, кожним додаванням, відніманням, множенням або діленням

Команда Calc

Цей, на відміну від попереднього, є точним щодо десяткових знаків, приклад:

calc 15 / 4

Це покаже нам: 3.75

Ось знімок екрана з кількома прикладами:

screenshot_calc

На відміну від expr, коли ми використовуємо calc, краще, щоб між кожним символом НЕ було пробілу, тобто щоб між цифрами та символами не було пробілів, як ви бачите на попередньому зображенні. Також їм не потрібно додавати \ перед символом *

Ну, це в основному те, про що я хотів вам розповісти.

Однак для кожної команди (особливо calc) є ще кілька цікавих порад, я рекомендую прочитати керівництво:

man calc

man expr

привіт


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

11 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований.

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   елав - сказав він

    Дуже корисно, хоча точно не було б добре використовувати Bash для математичних обчислень, десяткові знаки рахуються :)

    1.    Вада - сказав він

      Пане Елав, у нас все ще є калькулятор bash 🙂 ми можемо використовувати аргумент -l, щоб використовувати стандартну математичну бібліотеку
      щось таке

      $ echo "(4/8)+(6/9)" | bc -l
      1.166666666666666666666666

      ha

      1.    елав - сказав він

        😀

      2.    eliotime3000 - сказав він

        Відмінно. Таким чином я уникаю клопоту з установкою XCalc при використанні чистого X11.

      3.    KZKG ^ Гаара - сказав він

        О, я цього не знав, чудово !!

  2.   clow_eriol - сказав він

    Дякую, це дуже корисно 😉

    1.    KZKG ^ Гаара - сказав він

      Дякую ^ _ ^

  3.   Ноктуйдо - сказав він

    Дякую. Системний калькулятор є конкурентом для основних операцій.

    1.    KZKG ^ Гаара - сказав він

      Дякуємо вам, що прочитали нас reading

  4.   Хоакін - сказав він

    Гарна порада!

  5.   Педро Лала - сказав він

    Мені це не сподобалося

bool(true)