Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Обзор внешних команд 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