• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Внешние команды bash для работы с выражениями и выполнения сложных вычислений

Оглавление

Любой язык программирования или командный процессор должны иметь достаточный набор программных инструментов для работы с различными типами выражений и выполнения сложных вычислений. Внутренние команды, как правило, компактны и их набор ограничен. И поэтому выходом из ситуации является использование так называемых внешних или дополнительных команд, которые способны реализовать любую задачу, которая слишком сложна для базового набора. И командный процессор bash не исключение. Рассмотрим наиболее употребительные внешние команды bash и протестируем их возможности на практике.

Предыдущие статьи по теме:

Обзор внешних команд bash для работы с выражениями

Среди внешних команд bash можно выделить те, которые рассчитаны на работу с широким спектром выражений и поэтому являются универсальными. Другие более специализированы и применяются только для определенных типов выражений или отдельных операций.

Наиболее употребительным представителем универсальных внешних средств bash является команда expr. Она работает практически со всеми типами доступных выражений – срочными, целочисленными, логическими и регулярными. Ее использование позволяет значительно расширить возможности оболочки по обработке разных типов данных.

К специализированному средству по работе с регулярными выражениями относится программа grep. Ее применение позволяет расширить границы обработки регулярных выражений по сравнению с внутренним механизмом regex, обработка которого осуществляется в рамках процесса bash.

Для выполнения сложных математических операций существует дополнительный набор специализированных внешних программ, таких, как jot, bc, factor. Они разрешают делать специальные задачки, к примеру, вывод числовых значений в определенной последовательности, как на jot, либо рассчитать значения числовых коэффициентов, как на factor.

Каждое из приведенных программных средств имеет свой собственный синтаксис и правила применения. Их знание поможет сориентироваться в командной среде при необходимости решения определенной задачи. Для этого рассмотрим более подробно работу с ними.

Работа с программой Expr

Как уже отмечалось, программа работает со всеми типами выражений и универсальна. Ее применение, как правило, не вызывает сложностей, тем более что она уже присутствует в большинстве дистрибутивов Linux и доступна для установки из репозитория. Воспользуемся возможностями терминальной работы с нашей системой Ubuntu 20.0 и протестируем программу expr.

В первую очередь, просмотрим описание ее синтаксических конструкций с помощью справочной системы. Для этого введем в терминале следующую команду:

$ expr --help

Просмотр справки по программе Expr

Как можно убедиться, средство способно выполнять математические операции и логику, сравнивать аргументы и использовать шаблоны поиска для регулярных выражений.

Общий синтаксис оператора для операции сборки будет следующим:

expr арг1 + арг2

Введем следующую команду в терминале:

$ expr 25 + 5

Синтаксис сложения в Expr

Команда сразу же выдает результат, в данном случае равна числу 30.

Общий синтаксис оператора для операции вычитания будет следующим:

expr арг1 - арг2

Введем для проверки:

$ expr 35 - 15

Пример операции вычитания

Следовательно, результат операции верен.

Синтаксис оператора для операции умножения:

expr арг1 \* арг2

Проверим это:

$ expr 20 \* 3

Пример операции умножения в Expr

Результат верен, это число 60.

Синтаксис оператора для операции деления:

expr арг1 / арг2

Введем в терминале:

$ expr 21 / 3

Операция деления в Expr

Все верно.

Оператор позволяет организовать процесс инкрементации переменной. Для демонстрации этого выполним несколько предыдущих команд:

$ count_var1=0
$ count_var1=`expr $count_var1 + 1`
$ echo $count_var1

Использование инкременой переменной в Expr

Здесь мы сначала присвоили нулевое значение переменной coun_var1, а затем с помощью оператора expr увеличили его значение на 1. Этот механизм можно применять в дальнейшем при организации обработки данных в сценариях.

Синтаксис оператора для операции сравнения аргументов является следующим:

expr арг1 \> арг2

Результатом работы будет значение 1, если первый аргумент больше второго, и 0, если не больше.

Проверим работоспособность конструкции:

$ expr 15 \> 9

Операция сравнения аргументов в Expr

Получили значениея 1, как и должно біть.

Тепер введемо другие числа:

$ expr 6 \> 9

Операция сравнения аргументов в Expr

Получили нулевой результат, то есть, все верно, поскольку число 6 не может быть больше числа 9.

Для определения равенства аргументов применяется следующая конструкция:

expr арг1 /= арг2

Если аргументы имеют одинаковые значения, то результатом будет являться значение 1, в противном случае – 0.

Введем в терминале:

$ expr 7 \= 12

Определение равенства аргументов в Expr

Возвращено 0, поскольку числа не совпадают.

Изменим числа в команде:

$ expr 7 \= 7

Определение равноства аргументов в Expr

Результатом является значение 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"

Код файла lesson_expr.sh

Сохраним внесенные в файл изменения (ctrl+O, Enter) и выйдем из редактора (ctrl+X).

Сущность работы приведенного кода заключается в обработке разными способами введенных пользователем двух чисел, а также выполнении операции со срочным выражением. Сроковое значение Windows7 присвоено переменной $len. Expr подсчитывает количество символов в указанном строковом значении. Результаты работы всех конструкций фиксируются в переменных под названием $rezultN, где N – номер операции. Затем значения переменных выводятся на экран с помощью оператора echo.

Запустим сценарий на выполнение:

$ bash lesson_expr.sh

Запуск файла lesson_expr.sh

Можно убедиться, что результаты всех операций верны.

Команда Jot

Средство позволяет создавать произвольные списки чисел на основе указанных значений исходного (базового) числа и количества выводимых в списке чисел.

Для работы с указанным программным средством его нужно установить из репозитория. Для этого введем соответствующую команду:

$ sudo apt install athena-jot

Установка jot

Итак, программа athena-jot удачно установлена ??в системе.

Рассмотрим способы использования и синтаксис. Первый вариант использования – вывод заданного количества чисел после базового числа. В этом случае синтаксис конструкции будет смотреться следующим образом:

jot m n

Где n – базовое число; m – количество чисел, выведенные после числа n.

Приведем конкретный пример. Введем в терминале:

$ jot 5 10

Вивод следующий 5 чисел начиная из числа 10

Здесь число 5 – это количество выводимых чисел, а 10 – базовое число. По результатам работы выведены значения с 10 до 14, то есть самое базовое число также включается в общий список.

Второй вариант использования – это организация обратной печати чисел. Синтаксис конструкции в этом случае будет следующим:

jot  m n o

Где n – базовое число; m – количество чисел, предшествующее числу n; o – значение числа, к которому можно выводить список чисел.

Приведем пример:

$ jot 9 10 3

Вивод чисел от 10 до 3

Можно убедиться, что числа выведены в оборотном порядке, начиная с базового. И вывод остановлен на числе 3.

Команды Factor та Bc

Программа factor используется для расчета значений коэффициентов указанного в команде числа.

Синтаксис следующий:

factor number

Приведем пример:

$ factor 14

Расчет коэффициентов числа 14

Как видим, коэффициенты числа 14 рассчитаны верно.

Программа bc полезна при необходимости быстрого выполнения сложных вычислений в bash. Она может рассчитывать на значение тригонометрических функций, получать квадратный корень числа и обрабатывать логические выражения. Такое разнообразие возможностей и скорость работы делает ее очень удобной при использовании в командной строке и сценариях.

Общий синтаксис выглядит следующим образом:

echo "math_expr" | bc

Где math_expr – любое математическое выражение, подлежащее мгновенному расчету.

Приведем пример. Введем в терминале:

$ echo "25/2+10*3" | bc

Математический расчет через команду 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

Редактирование файла test_grep

Сохраним внесенные изменения и закроем файл.

Теперь будем использовать определенные форматы шаблонов для поиска нужных данных.

Введем в терминале:

$ grep "l...s" test_grep

Поиск последовательности символов через 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

Поиск слова которое начинается на te

Ключевым элементом здесь является знак «*», обозначающий любое количество вхождений буквы «k», включая ее отсутствие. Как видно из результатов, таким требованиям отвечают только последовательности вида «te».

Дата-центр FREEhost.UA предлагает в аренду серверы любых конфигураций. У нас Вы найдете серверы для решения любых Ваших задач: размещение небольших сайтов, больших платформ, сервера бухгалтерии 1с, хранение резервных копий, удаленных рабочих столов. Большинство серверов есть в наличии, поэтому сервер будет готов уже через несколько часов после заказа. Более подробно с имеющимися конфигурациями Вы можете ознакомиться по ссылке.

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.

Дата: 18.05.2023
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA