Стаття також доступна російською (перейти до перегляду).
Вступ
- Огляд зовнішніх команд bash для роботи з виразами
- Робота з програмою Expr
- Команда Jot
- Команди Factor та Bc
- Команда Grep
Будь-яка мова програмування чи командний процесор повинні мати достатній набір програмних засобів для роботи з різними типами виразів та виконання складних обчислень. Внутрішні команди, зазвичай, є компактними і їх набір обмежений. І тому, виходом із ситуації є використання, так званих, зовнішніх або додаткових команд, котрі здатні реалізувати будь-яке завдання, яке є надто складним для базового набору. І командний процесор bash не є винятком. Розглянемо найбільш вживані зовнішні команди bash та протестуємо їх можливості на практиці.
Попередні статті за темою:
- Використання циклів та виразів у сценаріях Bash;
- Організація обробки даних в сценаріях Bash;
- Мовні конструкції та внутрішні змінні Bash;
- Командна оболонка Bash – поняття, команди та використання.
Огляд зовнішніх команд bash для роботи з виразами
Серед зовнішніх команд bash можна виділити ті, котрі розраховані на роботу із широким спектром виразів, і тому є універсальними. Інші є більш спеціалізованими і застосовуються лише для певних типів виразів або окремих операцій.
Найбільш вживаним представником універсальних зовнішніх засобів bash є команда expr. Вона працює практично з усіма типами доступних виразів – строковими, цілочисельними, логічними та регулярними. Її використання дозволяє значно розширити можливості оболонки по обробці різних типів даних.
До спеціалізованого засобу по роботі із регулярними виразами відноситься програма grep. Її застосування дозволяє розширити межі обробки регулярних виразів порівняно із внутрішнім механізмом regex, обробка котрого здійснюється у рамках процесу bash.
Для виконання складних математичних операцій існує додатковий набір спеціалізованих зовнішніх програм, таких, наприклад, як jot, bc, factor. Вони дозволяють виконувати специфічні завдання, наприклад, вивід числових значень у певній послідовності, як у jot, чи розрахувати значення числових коефіцієнтів, як у factor.
Кожен із наведених програмних засобів має свій власний синтаксис та правила застосування. Їх знання допоможе зорієнтуватися у командному середовищі у разі необхідності вирішення певного завдання. І тому, розглянемо більш детально роботу з ними.
Робота з програмою Expr
Як вже зазначалося, програма працює зі всіма типами виразів і є універсальною. Її застосування, як правило, не викликає складнощів, тим паче, що вона вже присутня у більшості дистрибутивів Linux і доступна для встановлення з репозиторію. Скористаємося можливостями термінальної роботи з нашою системою Ubuntu 20.0 та протестуємо програму expr.
Насамперед, переглянемо опис її синтаксичних конструкцій за допомогою довідкової системи. Для цього введемо у терміналі наступну команду:
$ expr --help
Як можна переконатися, засіб здатний виконувати математичні операції та логіку, здійснювати порівняння аргументів та використовувати шаблони пошуку для регулярних виразів.
Загальний синтаксис оператора для операції складання буде наступним:
expr арг1 + арг2
Введемо наступну команду у терміналі:
$ expr 25 + 5
Команда одразу ж видає результат, у даному випадку дорівнює числу 30.
Загальний синтаксис оператора для операції віднімання буде таким:
expr арг1 - арг2
Введемо для перевірки:
$ expr 35 - 15
Отже, результат операції вірний.
Синтаксис оператора для операції множення:
expr арг1 \* арг2
Перевіримо це:
$ expr 20 \* 3
Результат вірний, це число 60.
Синтаксис оператора для операції ділення:
expr арг1 / арг2
Введемо у терміналі:
$ expr 21 / 3
Все вірно.
Оператор дозволяє організувати процес інкрементації змінної. Для демонстрації цього виконаємо кілька попередніх команд:
$ count_var1=0 $ count_var1=`expr $count_var1 + 1` $ echo $count_var1
Тут ми спочатку присвоїли нульове значення змінній coun_var1, а потім за допомогою оператора expr збільшили її значення на 1. Цей механізм можна застосовувати у подальшому при організації обробки даних у сценаріях.
Синтаксис оператора для операції порівняння аргументів є наступним:
expr арг1 \> арг2
Результатом роботи буде значення 1, якщо перший аргумент більше другого, і 0, якщо не більше.
Перевіримо працездатність конструкції:
$ expr 15 \> 9
Отримали значення 1, як і повинно бути.
Тепер введемо інші числа:
$ expr 6 \> 9
Отримали нульовий результат, тобто, все вірно, оскільки число 6 не може бути більшим за число 9.
Для визначення рівності аргументів застосовується наступна конструкція:
expr арг1 /= арг2
Якщо аргументи мають однакові значення, то результатом буде значення 1, у протилежному випадку – 0.
Введемо у терміналі:
$ expr 7 \= 12
Повернуто 0, оскільки числа не співпадають.
Змінимо числа у команді:
$ expr 7 \= 7
Результатом є значення 1, тому що числа однакові.
Продемонструємо синтаксис і роботу розглянутих та інших конструкцій програми expr безпосередньо у сценарії. Для цього створимо файл сценарію із ім'ям lesson_expr та введемо в нього наведений нижче код:
$ nano lesson_expr.sh
Код сценарію:
#!/bin/bash len=Windows7 read -p "Будь ласка уведіть перше число: " n1 read -p "Будь ласка уведіть друге число: " n2 rezult1=`expr $n1 + $n2` rezult2=`expr $n1 \= $n2` rezult3=`expr $n1 \< $n2` rezult4=`expr $n1 \| $n2` rezult5=`expr length $len` echo "Сума двох чисел: $rezult1" echo "Перевірка чи рівні два числа: $rezult2" echo "Перевірка чи менше перше число ніж друге: $rezult3" echo "Перевірка чи є якесь із виразів істинним: $rezult4" echo "Довжина строки є: $rezult5"
Збережемо внесені у файл зміни (ctrl+O, Enter) та вийдемо з редактора (ctrl+X).
Сутність роботи наведеного коду полягає у обробці різними способами введених користувачем двох чисел, а також у виконанні операції зі строковим виразом. Строкове значення Windows7 присвоєне змінній $len. Expr підраховує кількість символів у вказаному строковому значенні. Результати роботи всіх конструкцій фіксуються у змінних із назвою $rezultN, де N – номер операції. Потім значення вказаних змінних виводяться на екран за допомогою оператора echo.
Запустимо сценарій на виконання:
$ bash lesson_expr.sh
Можна переконатися, що результати всіх операцій є вірними.
Команда Jot
Засіб дозволяє створювати довільні списки чисел на основі вказаних значень початкового (базового) числа та кількості чисел, котрі виводяться у списку.
Для роботи із вказаним програмним засобом, його треба встановити із репозиторію. Для цього введемо відповідну команду:
$ sudo apt install athena-jot
Отже, програма athena-jot успішно встановлена у системі.
Розглянемо способи її використання та синтаксис. Перший варіант використання – це вивід заданої кількості чисел після базового числа. У цьому разі синтаксис конструкції буде виглядати наступним чином:
jot m n
Де n – базове число; m – кількість чисел, котрі будуть виведені після числа n.
Наведемо конкретний приклад. Введемо у терміналі:
$ jot 5 10
Тут число 5 – це кількість чисел, що виводяться, а 10 – базове число. За результатами роботи виведені значення з 10 до 14, тобто, саме базове число також включається у загальний список.
Другий варіант використання – це організація зворотного друку чисел. Синтаксис конструкції у цьому випадку буде наступним:
jot m n o
Де n – базове число; m – кількість чисел, що передує числу n; o – значення числа, до котрого можна виводити список чисел.
Наведемо приклад:
$ jot 9 10 3
Можна переконатися, що числа виведені у зворотному порядку, починаючи з базового. І вивід зупинено на числі 3.
Команди Factor та Bc
Програма factor використовується для розрахунку значень коефіцієнтів вказаного у команді числа.
Синтаксис наступний:
factor number
Наведемо приклад:
$ factor 14
Як бачимо, коефіцієнти числа 14 розраховані вірно.
Програма bc корисна у випадку необхідності швидкого виконання складних обчислень у bash. Вона може розраховувати значення тригонометричних функцій, отримувати квадратний корінь числа та обробляти логічні вирази. Таке різноманіття можливостей та швидкість роботи робить її дуже зручною при застосуванні у командній строчці і у сценаріях.
Загальний синтаксис має наступний вигляд:
echo "math_expr" | bc
Де math_expr – будь-який математичний вираз, котрий підлягає миттєвому розрахунку.
Наведемо приклад. Введемо у терміналі:
$ echo "25/2+10*3" | bc
Можна переконатися, що значення вказаного у конструкції виразу розраховано вірно.
Команда Grep
Засіб призначений для організації роботи із регулярними виразами, котрі є наборами символів, що задають шаблон пошуку даних. Програму можна використовувати для пошуку та заміни даних, для перевірки умов при вході та інших важливих цілей.
Загальний синтаксис програми виглядає так:
grep ххх file
Де ххх – шаблон для пошуку у форматі regex, file – повна назва файлу, у котрому необхідно виконати пошук чи заміну даних.
Для можливості демонстрації роботи із засобом та для виконання повноцінних запитів, створимо файл із ім'ям test_grep, у котрий введемо наступний текст (скорочений варіант):
Counting the number of lines in terminal output is a simple yet useful task that can help us in many .................................... will explore various ways to count the number of lines in terminal output.
Викличемо редактор nano
$ nano test_grep
Збережемо внесені зміни та закриємо файл.
Тепер будемо застосовувати певні формати шаблонів для пошуку потрібних даних.
Введемо у терміналі:
$ grep "l...s" test_grep
Ключовим елементом виразу є символ «.», котрим позначається відсутній у текстовій строчці символ. У даному випадку, будуть шукатися послідовності символів, котрі починаються з букви «l», посередині можуть мати три будь-яких символи і закінчуються буквою «s». Результат роботи конструкції показаний вище. Як видно зі скриншоту, виділяються послідовності не тільки у межах одного слова, але й з різних слів, котрі знаходяться поруч. Також добре видно, що символом «.» позначаються не тільки існуючі букви, але й пусті символи.
Тепер використаємо наступний шаблон пошуку:
$ grep "C[oui]g" test_grep
Ключовим елементом тут є квадратні дужки []. Ними позначаються діапазони позицій символів у шаблонах. У нашому випадку, буде відбуватися пошук всіх послідовностей символів, котрі починаються з символу «С», закінчуються символом «g» та можуть мати посередині комбінацію лише з трьох латинських букв: o, u та i. Тобто, ці символи є допустимими, а всі інші – ні.
Розглянемо наступний пошуковий шаблон:
$ grep "Mb[^1-6]v" test_grep
Ключовим елементом тут є квадратні дужки із спеціальним символом у середині: [^]. Сутність його використання полягає у пошуку будь-яких знаків, окрім тих, що вказані у дужках. У нашому випадку, будуть шукатися послідовності, котрі починаються із «Mb», закінчуються буквою «v», а посередині допустимі всі символи, окрім цифр від 1 до 6.
$ grep "tek*" test_grep
Ключовим елементом тут є знак «*», котрим позначається будь-яка кількість входжень букви «k», включаючи її відсутність. Як видно з результатів, таким вимогам відповідають лише послідовності виду «te».
Дата-центр FREEhost.UA пропонує в оренду сервери будь-яких конфігурацій. У нас Ви знайдете сервери для вирішення любих Ваших завдань: розміщення невеликих сайтів, великих платформ, сервера бухгалтерії 1с, зберігання резервних копій, віддалених робочих столів. Більшість серверів є в наявності тому сервер буде готовий вже через кілька годин після замовлення. Детальніше з наявними конфігураціями Ви можете ознайомитися за посиланням.
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
Дата: 18.05.2023 Автор: Євген
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus