Что и зачем писать сценарии с помощью Bash

Добро пожаловать в раздел «что и почему» в сценариях bash. В этой главе вы узнаете о типах оболочек в Linux и о том, почему мы выбрали bash. Вы узнаете, что такое bash, как написать свой первый bash-скрипт и как его запустить. Кроме того, вы узнаете, как настроить редакторы Linux, такие как vim и nano, для ввода кода.

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

Наконец вы увидите, как визуально отлаживать свой код с помощью Visual Studio Code.

В этой статье мы рассмотрим следующие темы:

  • Типы оболочек Linux
  • Что такое сценарии bash?
  • Иерархия команд bash
  • Создание и выполнение скриптов
  • Установить переменную среды
  • Запуск скрипта с аргументами
  • Использование встроенной тестовой оболочки
  • Создание условных операторов с помощью оператора If
  • Проверить команду с оператором If
  • UNIX/Linux: как заблокировать или отключить учетную запись пользователя
  • Решение проблемы первого реального применения в отрасли — создание вашего первого сценария оболочки bash для автоматизации.
  • Решение второго реального отраслевого варианта использования сценариев, используемых аналитиком данных для создания модели данных для повышения производительности веб-сайта/веб-приложения
  • Начало работы с AWK Command для повышения уровня.
  • Создание и удаление нескольких файлов с помощью команд сценариев оболочки Bash
  • В чем разница между функцией и командой?
  • Как создать функцию в оболочке, например, «Функция оболочки»?
  • Оболочка Linux — дело… Заявление esac.
  • Дополнительная информация: команда Set в Linux.

Типы оболочек Linux

Как вы знаете, Linux состоит из нескольких основных частей, таких как ядро, оболочка и графический интерфейс (Gnome, KDE и т. д.).

Оболочка переводит ваши команды и отправляет их в систему. Большинство дистрибутивов Linux поставляются с множеством оболочек.

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

  • Оболочка Sh. Она называется оболочкой Bourne. Она была разработана в AT&T Labs в 70-х годах человеком по имени Стивен Борн. Эта оболочка предлагает множество функций.
  • Оболочка Bash: также называемая оболочкой Bourne Again, она очень популярна и совместима со сценариями оболочки sh, поэтому вы можете запускать свои сценарии sh, не изменяя их. Мы будем использовать эту оболочку в этой статье.
  • Оболочка Ksh: также называемая оболочкой Korn, она совместима с sh и bash. Ksh предлагает некоторые улучшения по сравнению с оболочкой Bourne.
  • Csh и tcsh: Linux был построен с использованием языка C, что побудило разработчиков из Университета Беркли разработать оболочку в стиле C, в которой синтаксис похож на язык C. Tcsh добавляет несколько незначительных улучшений в csh.

Теперь мы знаем типы оболочек и знаем, что будем использовать bash, так что же такое сценарии bash?

Что такое bash-скрипты?

Основная идея сценариев bash заключается в выполнении нескольких команд для автоматизации определенной работы.

Как вы, возможно, знаете, вы можете запускать несколько команд из оболочки, разделяя их точкой с запятой (;):

лс; пароль

Предыдущая строка — это мини-скрипт bash.

Выполняется первая команда, за которой следует результат второй команды.

Каждое ключевое слово, которое вы вводите в сценарии bash, на самом деле является двоичным файлом (программой) Linux, даже оператором if, циклами else или while. Все это исполняемые файлы Linux.

Можно сказать, что оболочка — это связующее звено между этими командами.

Иерархия команд bash

При работе с оболочкой bash, когда вы удобно сидите в командной строке и с нетерпением ждете ввода команды, вы, скорее всего, почувствуете, что это просто вопрос ввода и нажатия клавиши Enter . Вы должны знать лучше, чем думать об этом, поскольку вещи никогда не бывают такими простыми, как мы себе представляем.

Тип команды

Например, если мы напечатаем и введем ls для отображения списка файлов, разумно предположить, что мы выполнили команду. Это возможно, но мы часто будем использовать псевдоним. Псевдонимы существуют в памяти как ярлыки для команд или команд с параметрами; эти псевдонимы используются еще до того, как мы проверим наличие файла. Здесь нам может помочь встроенная в Bash команда type. Команда type отображает тип команды для данного слова, введенного в командной строке. Типы команд перечислены ниже:

  • Псевдоним
  • Функция
  • Встроенная оболочка
  • Файл ключевых слов

Этот список также отражает порядок поиска. Как видим, не до самого конца ищем исполняемый файл ls.

ПУТЬ команды

Linux будет проверять наличие исполняемых файлов в среде PATH, только если указан полный или относительный путь к программе. Как правило, текущий каталог не ищется, если только он не указан в PATH. Наш текущий каталог можно включить в PATH, добавив каталог в переменную PATH. Это показано в следующем примере команды:

$ экспорт PATH=$PATH:

Это добавит текущий каталог к ​​значению переменной PATH; каждый элемент в PATH отделяется двоеточием. Теперь ваш PATH был обновлен, чтобы включить текущий рабочий каталог, и каждый раз, когда вы меняете каталоги, сценарии могут быть легко выполнены. В общем, организация сценариев в структурированную иерархию каталогов, вероятно, является отличной идеей. Рассмотрите возможность создания подкаталога с именем bin в вашем домашнем каталоге и добавления сценариев в эту папку. Добавление $HOME/bin к переменной PATH позволит вам находить скрипты по имени и без пути к файлу.

Следующий список командной строки создаст каталог, только если он еще не существует:

$ test -d $HOME/bin || mkdir $HOME/bin

Хотя приведенный выше список командной строки не является строго обязательным, он показывает, что сценарии в bash не ограничиваются фактическим сценарием, и мы можем использовать условные операторы и другой синтаксис непосредственно в командной строке. С нашей точки зрения, мы знаем, что предыдущая команда будет работать независимо от того, есть у вас каталог bin или нет. Использование переменной $HOME гарантирует, что команда будет работать без учета текущего контекста файловой системы.

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

Создание и выполнение скриптов

Настроив и подготовив наши редакторы, мы можем быстро перейти к созданию и выполнению скриптов. Вы можете использовать любой совместимый редактор вашей системы Linux, например Gedit, Vim.

Привет мир!

Как вы знаете, для начала почти обязателен сценарий Hello World, и мы вас не разочаруем. Мы начнем с создания нового скрипта $HOME/bin/hello1.sh. Содержимое файла должно выглядеть так, как показано на следующем снимке экрана:

Мы надеемся, что вы не слишком мучились с этим; в конце концов, это всего лишь три строчки. Мы рекомендуем вам просматривать примеры во время чтения, чтобы действительно помочь вам усвоить информацию на практике.

#!/bin/bash: Обычно это всегда первая строка скрипта, известная как шебанг. Шебанг начинается с комментария, но система по-прежнему использует эту строку. Комментарий в сценарии оболочки имеет символ #. Шебанг инструктирует интерпретатор системы выполнить сценарий. Мы используем bash для сценариев оболочки и можем использовать PHP или Perl для других сценариев, если это необходимо. Если мы не добавим эту строку, то команды будут выполняться в текущей оболочке; это может вызвать проблемы, если мы запустим другую оболочку.

echo «Hello World»: команда echo будет принята во встроенной оболочке и может использоваться для записи стандартного вывода STDOUT; по умолчанию это экран. Информация для печати заключена в двойные кавычки; подробнее о цитатах будет позже.

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

Выполнение скрипта

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

$ bash $HOME/bin/hello1.sh

Мы должны быть вознаграждены текстом Hello World, отображаемым на наших экранах. Это не долгосрочное решение, так как нам нужно, чтобы скрипт находился в каталоге $HOME/bin, в частности, чтобы упростить запуск скрипта из любого места без ввода полного пути. Нам нужно добавить разрешения на выполнение, как показано в следующем коде:

$ chmod +x $HOME/bin/hello1.sh

Теперь мы можем просто запустить скрипт, как показано на следующем снимке экрана:

dj@lucifer ~ $ chmod +x $HOME/bin/hello1.sh

dj@lucifer ~ $ hello1.sh

Привет, мир

dj@lucifer ~ $

Установить переменную среды

Теперь, если вы хотите использовать свой файл bash из другой папки или из другого терминала, например, команду date, нам нужно добавить PATH в переменную среды.

$ echo $PATH — список всех путей, установленных в вашей системе Linux.

Чтобы добавить путь: $ PATH = $PATH:‹ Путь к папке, в которой хранится ваш файл bash ›

Чтобы сделать его исполняемым: $ chmod +x hello1.sh

Теперь посмотрите, ваш файл будет действовать как команда.

$ hello1.sh

Привет, мир

Чтобы сделать этот путь постоянным или постоянным —

$ vim /root/.bashrc (Добавьте свой путь в этот файл, чтобы сделать его постоянным.)

PATH = $PATH:‹ Путь к папке, в которой хранится ваш файл bash ›

Здравствуйте Ученики!

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

Запуск скрипта с аргументами

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

$0 — имя самого скрипта, которое часто используется в инструкциях по использованию.

$1 — позиционный аргумент, который является первым аргументом, передаваемым сценарию.

${10} — две или более цифры необходимы для представления позиции аргумента. Скобки скобки используются для отделения имени переменной от любого другого содержимого. Ожидаются однозначные цифры.

$# — счетчик аргументов особенно полезен, когда нам нужно установить количество аргументов, необходимых для правильного выполнения скрипта.

$@ — относится ко всем аргументам.

Запустите скрипт сейчас; мы можем указать аргумент, как показано ниже:

Ученик $ hello2.sh

Теперь в выводе должно быть написано Hello Learner. Если мы не укажем аргумент, то переменная будет пустой и просто напечатает Hello. Вы можете обратиться к следующему снимку экрана, чтобы увидеть аргумент выполнения и вывод:

dj@lucifer ~ $ chmod +x $HOME/bin/hello2.sh

dj@lucifer ~ $ hello2.sh Learner

Здравствуйте, учащийся

dj@lucifer ~ $

Если мы настроим скрипт на использование $*, все аргументы будут напечатаны. Мы увидим Hello, а затем список всех предоставленных аргументов. Отредактируйте скрипт и замените эхо-строку следующим образом:

Эхо "Привет, $*"

Это запустит скрипт со следующими аргументами:

dj@lucifer ~ $ chmod +x $HOME/bin/hello2.sh

dj@lucifer ~ $ hello2.sh Эта статья для учащихся создана Dhyey Joshi

Эта статья Hello Learner создана Dhyey Joshi

dj@lucifer ~ $

Если мы хотим напечатать Hello ‹name› с каждым именем в отдельной строке, нам нужно будет немного подождать, пока мы не покроем зацикленные структуры. Цикл for — хороший способ добиться этого.

Использование встроенной тестовой оболочки

Наверное, нам пора съехать на обочину скриптовой магистрали и еще немного взглянуть на командный тест. Это и встроенная оболочка, и самостоятельный исполняемый файл. Конечно, сначала нам придется нажать встроенную команду, если только мы не укажем полный путь к файлу.

Если тестовая команда запускается без каких-либо выражений для оценки, тест возвращает значение false. Таким образом, если мы запустим тест, как показано в следующей команде, статус выхода будет равен 1, даже если вывод ошибки не будет показан:

$ тест

Команда test всегда будет возвращать либо True, либо False, либо 0 или 1 соответственно. Основной синтаксис теста следующий:

$ test ВЫРАЖЕНИЕ

Если нам нужно включить несколько выражений, это можно сделать с помощью И или ИЛИ вместе, используя параметры -a и -o соответственно:

$ test ВЫРАЖЕНИЕ - ВЫРАЖЕНИЕ

$ test ВЫРАЖЕНИЕ -o ВЫРАЖЕНИЕ

Мы также можем написать это как сокращенную версию, заменив тест квадратными скобками, чтобы окружить выражение, как показано в следующем примере:

$ [ ВЫРАЖЕНИЕ ]

Проверка целых чисел

Помимо тестирования строковых значений скриптов bash, мы можем тестировать целые значения и целые числа. Еще один способ проверить входные данные скрипта — подсчитать количество позиционных параметров, а также проверить, превышает ли число значение 0:

тест $# -gt 0

Или с помощью скобок, как показано ниже:

[ $# -gt 0 ]

В отношениях верхние позиционные параметры переменной $# представляют количество параметров, переданных скрипту.

Для чисел можно провести множество тестов:

  • число1 -eq число2: проверяет, равно ли число1 числу2.
  • число1 -ge число2: проверяет, больше или равно число1 числу2.
  • число1 -gt число2: проверяет, больше ли число1 числа2.
  • число1 -le число2: проверяет, меньше ли число1 числа 2 или равно ему.
  • число1 -lt число2: проверяет, меньше ли число1 числа2.
  • число1 -ne число2: проверяет, не равно ли число1 числу2.

Тестирование типов файлов

Во время проверки значений мы можем проверить существование файла или типа файла. Например, мы можем захотеть удалить файл только в том случае, если это символическая ссылка. Мы используем это при компиляции ядра. Каталог /usr/src/linux должен быть символической ссылкой на последний исходный код ядра. Если мы загружаем более новую версию перед компиляцией нового ядра, нам нужно удалить существующую ссылку и создать новую ссылку. На всякий случай, если кто-то создал каталог /usr/src/linux, мы можем проверить, есть ли в нем ссылка, прежде чем удалять его:

# [ -h /usr/src/linux ] &&rm /usr/src/linux

Опция -h проверяет наличие ссылки на файл. Другие варианты включают следующее:

  • -d: показывает, что это каталог
  • -e: показывает, что файл существует в любой форме
  • -x: показывает, что файл является исполняемым
  • -f: это показывает, что файл является обычным файлом
  • -r: показывает, что файл доступен для чтения
  • -p: показывает, что файл является именованным каналом
  • -b: показывает, что файл является блочным устройством.
  • файл1 -nt файл2: проверяет, является ли файл1 более новым, чем файл2
  • файл1 -ot файл2: проверяет, старше ли файл1, чем файл2
  • -O файл: проверяет, является ли авторизованный пользователь владельцем файла
  • -c: показывает, что файл является символьным устройством

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

Создание условных операторов с использованием оператора If

Как мы уже видели, можно создавать простые условия с помощью списков командной строки. Эти условные операторы могут быть написаны как с проверкой, так и без нее. По мере увеличения сложности задач становится проще создавать операторы с использованием if. Это, безусловно, упростит как читабельность сценария, так и логическую структуру. В какой-то степени это также соответствует тому, как мы думаем и говорим; это семантика в нашем разговорном языке так же, как в скрипте bash.

Несмотря на то, что он займет больше одной строки в скрипте, с

если мы можем добиться большего и сделать сценарий более разборчивым. При этом давайте рассмотрим создание условий if. Ниже приведен пример скрипта с оператором if:

#!/bin/bash

# Сценарий приветствия для отображения сообщения пользователям при входе в систему — Имя файла: hello3.sh

# Автор: Дхей Джоши

if [ $# -lt 1 ] ; затем

echo "Использование: $0 ‹имя›"

выход 1

fi

Эхо "Привет, $1"

выход 0

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

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

dj@lucifer ~ $ hello3.sh

Использование: /HOME/bin/hello2.sh ‹name›

dj@lucifer ~ $ hello3.sh Дхей

Привет, Дхей!

dj@lucifer ~ $

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

если условие; затем

утверждение 1

утверждение 2

fi

Отступы в коде не требуются, но они улучшают читаемость и настоятельно рекомендуются. Добавление оператора then в ту же строку, что и оператора if, опять же повышает удобочитаемость кода, а точка с запятой требуется для отделения if от then.

Расширение if с else

Когда сценарий должен продолжаться независимо от результата условия if, часто необходимо иметь дело с обоими условиями оценки, что делать, когда оно истинно, а также ложно. Здесь мы можем использовать ключевое слово else. Это позволяет выполнять один блок кода, когда условие истинно, и другой, когда условие оценивается как ложное. Псевдокод для этого показан ниже:

если условие; затем

утверждение

еще

утверждение

fi

Тестовая команда с оператором If

Вы видели, как использовать команду test или ее короткую версию [ ]. Этот тест возвращает ноль (истина) или ненулевое значение (ложь).

Вы увидите, как проверить возвращаемый результат с помощью команды if.

Проверка строк

Давайте рассмотрим несколько примеров, объясняющих, как работают операторы if:

#!/bin/bash

если [ "dhyey" = "Dhyey" ], то

echo "Строки идентичны"

еще

echo "Строки не идентичны"

fi

dj@lucifer ~ $ hello4.sh

Строки не идентичны

dj@lucifer ~ $

Проверка файлов и каталогов

Аналогичным образом вы можете проверять файлы и каталоги с помощью оператора if.

Давайте рассмотрим пример:

#!/bin/bash mydir=/home/mydir

если [ -d $mydir ], то

echo "Каталог $mydir существует".

еще

echo «Каталог $mydir не найден».

fi

Мы использовали тест -d, чтобы проверить, является ли путь каталогом.

Остальные тесты работают так же.

Проверка номеров

Кроме того, таким же образом мы можем проверять числа с помощью теста и if

команды.

#!/bin/bash

если [ 12 -gt 10 ], то

Эхо "число1 больше, чем число2"

еще

Эхо "число1 меньше числа2"

fi

dj@lucifer ~ $ hello5.sh

число1 больше числа2

dj@lucifer ~ $

Как и ожидалось, 12 больше 10.

Все остальные числовые тесты работают одинаково.

UNIX/Linux: как заблокировать или отключить учетную запись пользователя

- Заблокировать пароль

Чтобы заблокировать учетную запись пользователя, используйте команду usermod -L или passwd -l. Обе команды добавляют восклицательный знак («!») во второе поле файла /etc/passwd. Например:

# passwd -l ‹username›: учетная запись пользователя будет заблокирована.

Команда Tar в Linux для создания резервных копий

Тар в Linux означает ленточный архив, который используется большим количеством системных администраторов Linux/Unix для резервного копирования ленточных накопителей. Команда tar используется для копирования набора файлов и каталогов в сильно сжатые архивные файлы, обычно называемые tarball или tar, gzip и bzip в Linux. Команда tar является наиболее широко используемой командой для создания сжатых архивных файлов, которую можно легко перемещать с одного диска на другой или с одной машины на другую.

В приведенном ниже примере команда создаст архивный файл tar ‹имя файла›-(дата или время).tar для каталога /home/bin в текущем рабочем каталоге. Посмотрите пример команды в действии.

tar -cvf Jack-14-09-12.tar /home/bin/

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

  1. c — создает новый файл архива .tar.
  2. v — подробно показать ход выполнения файла .tar.
  3. f — тип имени файла архивного файла.

Давайте просто создадим пример сценария, используя все концепции, которые мы обсуждали ранее. Сценарий сначала попросит вас добавить пользователей, затем запросит пароль, если он уже существует, то выдаст сообщение об ошибке + Аутентифицированные пользователи заблокированы + Одновременное создание резервных копий каждой учетной записи пользователя в файле tar.

Код:

#! /usr/bin/bash

ts=$(date +%F)
read -p «Добавить пользователя: введите имя пользователя: « user
для j в $user
do
useradd $j< br /> echo "Здравствуйте, $j!!"
read -p "Введите пароль ${j}: " пароль
echo $password | passwd — стандартный ввод $j
выполнено

read -p "Введите существующее имя пользователя для блокировки и резервного копирования: " user

if [ -z $user ]
then
echo "Имя пользователя не указано.."
else
if id $user &› /dev/null
then
passwd -l $user
Homedir=$(grep ^${user}: /etc/passwd | cut -d ":" -f6)

echo $Homedir
if [ -d "${Homedir}" ]
then
echo " Домашний каталог существует.."
tar -cvf ${user}- ${ts}.tar $Homedir
echo "Резервные копии файлов пользователя ${user} !!"
echo "Резервная копия успешно создана для пользователя ${user} !!"
fi
exit 0
else
echo "Указанный пользователь $user не существует.."
fi
fi

Вывод :

Реальный пример использования сценариев, используемых аналитиком данных для создания модели данных для повышения производительности веб-сайта / веб-приложения

Предположим, у вас есть веб-сайт/веб-приложение, размещенное на AWS, и вы находитесь на своем локальном компьютере, но вы хотите знать каждую деталь этого веб-сайта/веб-приложения, например, общее количество подключенных клиентов, их IP-адреса и время, которое они посещают. нашу страницу, а также какую страницу посещают чаще, а также с какими ошибками они сталкиваются при просмотре нашего веб-сайта/веб-приложения и многое другое…

Шаг 1. Запустите веб-сервер — Запустите веб-сайт — Дайте общедоступный IP-адрес вашего веб-сайта клиенту, чтобы он мог подключиться и делать все, что захочет.

Пример веб-сайта, который я создал в облаке…

Шаг 2. Перейдите в /var/log/httpd — откройте файл access_log, в котором записываются все действия, связанные с вашим веб-сайтом.

Шаг 3. Используйте эту команду, чтобы подсчитать количество посещений вашего веб-сайта клиентами — # wc -l access_log

Шаг 4. Теперь предположим, что вы хотите управлять всем с вашего локального Linux-компьютера. Не заходя в учетную запись AWS из браузера, а напрямую подключите локальный компьютер к своей учетной записи AWS с помощью интерфейса командной строки, т. е. под названием «Удаленный вход».

Успешно войдите в свою учетную запись AWS !!

Давайте изучим еще одну новую концепцию написания сценариев оболочки, а именно «команду Awk».

Команда АВК

Команда awk используется для обработки текста в Linux. Хотя команда sed также используется для обработки текста, у нее есть некоторые ограничения, поэтому команда awk становится удобной опцией для обработки текста. Он обеспечивает мощный контроль над данными.

Awk — это мощный язык сценариев, используемый для написания текстовых сценариев. Он ищет и заменяет тексты, а также сортирует, проверяет и индексирует базу данных.

Это один из наиболее широко используемых инструментов для программистов, так как они пишут уменьшенную эффективную программу в форме оператора для определения шаблонов и рисунков текста.

Особенности команды AWK

Различные функции команды Awk:

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

Синтаксис:

Команда Awk используется следующим образом:

# awk options ‘selection _criteria {action }’ input-file › output-file

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

  • -f файлы программ: читает исходный код скрипта, написанного командой awk
  • -F fs: используется как разделитель полей ввода.

Встроенные переменные в команде AWK

Команда Awk поддерживает множество встроенных переменных, включая $1, $2 и т. д., которые разбивают содержимое файла на отдельные сегменты.

NR: используется для отображения текущего количества строк. Команда awk выполняет действие один раз для каждой строки. Эти строки называются записями.

NF: используется для подсчета количества полей в текущей базе данных.

FS: используется для создания символа-разделителя полей для разделения полей на строки ввода.

OFS: используется для хранения разделителя выходных полей. Он разделяет поля вывода.

ORS: используется для хранения разделителя выходных записей. Он разделяет выходные записи. Он автоматически печатает содержимое команды ORS.

Особенности команды Awk

Создайте файл, а затем сохраните в нем произвольные данные.

  • Вывести количество строк в файле.

  • Вывести количество строк и вывести все данные файла.

  • Подсчитайте количество полей или слов в строке в файле, разделенных пробелами. Где [ 0 ] → Пустое место.

  • Печатать последнее поле или слово файла.

  • Печатать предпоследнее поле или слово файла.

  • Напечатать последнюю строку файла.

  • Удаление пустых пространств из файла.

  • Использование ключевого слова BEGIN в Awk.

Создание и удаление нескольких файлов с помощью команд сценариев оболочки Bash

  • Создание нескольких текстовых файлов за один раз, здесь мы создали 13 пустых текстовых файлов.

#touch {1..13}.txt

  • Удаление нескольких текстовых файлов за один раз, здесь мы удалили 13 пустых текстовых файлов.

#rm -f {1..13}.txt

Вы также можете использовать концепцию цикла for для печати имен файлов и любой информации, которую вы можете создать с помощью цикла for. Пример:

#for i в {10..13}.txt; сделать ls -l $i ; сделано | awk ‘{print $6}’

Эта команда перейдет к длинному списку файлов от 10 до 13 текстовых файлов и напечатает 6-е поле записи. Многое другое можно отформатировать с помощью цикла Shell For.

Поиск и замена текста в файле с помощью команды AWK

AWK, будучи утилитой для обработки текста, вполне подходит для такой задачи. Он может выполнять как простые замены, так и гораздо более сложные, основанные на регулярных выражениях. Он обеспечивает две функции: sub() и gsub(). Первый заменяет только первое вхождение, а второй - заменяет вхождения во всей строке. Например, если у нас есть строка one potato two potato , результат будет таким:

$ echo "одна картошка, две картошки" | awk ‘{gsub(/potato/»,banana”)}1’
один банан, два банана

$ echo "одна картошка, две картошки" | awk ‘{sub(/potato/»,banana”)}1’
один банан два картофеля

AWK может принимать входной файл в качестве аргумента, поэтому сделать то же самое с input.txt было бы легко:

awk ‘{sub(/blue/”azure”)}1’ input.txt

Теперь давайте продолжим анализ нашего веб-сайта…

Шаг 5. Используйте различные функции команды awk для просмотра выходных данных или данных в определенном структурированном порядке.

  • Чтобы просмотреть только IP-адреса клиента из файла access_log.

# awk ‘{print $1}’ access_log

  • Чтобы получить уникальные IP-адреса клиентов из файла access_log, который находится на вашем веб-сайте.

# awk ‘{print $1}’ access_log | сортировать | уникальный | туалет -l

  • Чтобы получить общее количество клиентов на ваш веб-сайт на каждый IP-адрес.

# awk ‘{print $1}’ access_log | сортировать | уникальный -c | сортировать -n -k1

  • Чтобы выполнить анализ данных вашего сервера за день или за год, используйте эту команду.

# grep $(date +%e/%b/%G) access_log | awk ‘{print $1’ →” $4 }’ | уникальный -c | сортировать -n -k1

Теперь… вы видите, что написание каждой команды — это скучный процесс, поэтому давайте создадим сценарий, содержащий все команды, и запустим этот сценарий удаленно из системы Linux в учетную запись AWS и вернем вывод обратно на ваш экран, даже не войдите в свою учетную запись AWS. В этом сила Bash Shell Scripting, т. е. «автоматизация».

Код:

#! /usr/bin/bash
# Чтобы просмотреть только IP-адреса клиента из файла access_log.
awk '{print $1}' /var/log/httpd/access_log
# Чтобы получить уникальные IP-адреса клиентов из файла access_log, который попадает на ваш веб-сайт.
awk '{print $1}' /var/log/httpd/access_log | сортировать | уникальный -c | wc -l
# Чтобы получить общее количество клиентов, посещающих ваш сайт, на каждый IP-адрес.
awk ‘{print $1}’ /var/log/httpd/access_log | сортировать | уникальный -c | sort -n -k1
# Чтобы выполнить анализ данных вашего сервера за день или за год, используйте эту команду.
grep $(date +%e/%b/%G) / вар/журнал/httpd/access_log | awk ‘{print $1’ →” $4 }’ | уникальный -c | sort -n -k1
# Показать все записи, содержащие ошибку 404, а также показать, какую страницу они посетили с уникальным IP-адресом, и подсчитать, сколько раз они посетили эту страницу в отсортированном порядке
awk '$9==404{print $1 “ — -›” $7}' /var/log/httpd/access_log | сортировать | уникальный -c | сортировать -n

Удаленный запуск этого скрипта в учетной записи AWS и вывод результатов на мой экран (локальный компьютер):

# scp -i shell_scripting.pem web_analysis.sh [email protected]:/tmp
результат: web_analysis.sh 100% 775 21,2 КБ/с 00:00 [Передача моего сценария web_analysis.sh Bash в мой аккаунт AWS]

Удаленный запуск сценария Bash:

# ssh -l ec2-user -i shell_scripting.pem 65.2.152.14 sudo bash /tmp/web_analysis.sh

Вывод:

Все данные анализируются за один раз... в этом сила BASH SHELL SCRIPTING.

В чем разница между функцией и командой?

Различия с точки зрения оболочки:

При выполнении команды оболочка создает новый дочерний процесс для команды и указывает операционной системе выполнить инструкции, найденные в соответствующем двоичном файле. Как правило, оболочка ожидает завершения этого процесса, а затем возвращается приглашение для вашей следующей команды (за исключением случаев, когда вы запускаете программу в фоновом режиме. Это можно сделать, добавив «&» к команде.).

Но при вызове функции оболочка просто считывает команды в функции и выполняет их. Это может создать множество процессов во время выполнения функции. Таким образом, вы можете определить функцию в похожем на оболочку bash для выполнения некоторой задачи, требующей выполнения нескольких строк команд в оболочке. Функция длится только в течение сеанса процесса оболочки, если вы не записываете ее в файл и не импортируете ее каждый раз. Функция, определенная в одном процессе оболочки (терминале), не будет доступна в другом процессе оболочки.

Когда вы скомпилируете файл C/C++ и поместите его в /usr/bin, это будет команда. Использование функции в сценарии оболочки позволяет избежать копирования кода и сохранить чистоту сценария оболочки.

Как создать функцию в оболочке, т.е. «Функция оболочки»?

Создание функций

Чтобы объявить функцию, просто используйте следующий синтаксис —

имя_функции () {
список команд
}

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

Оболочка UNIX/Linux — дело… Заявление esac

Вы можете использовать несколько операторов if…elif для выполнения многостороннего перехода. Однако это не всегда лучшее решение, особенно когда все ветви зависят от значения одной переменной.

Shell поддерживает оператор case…esac, который обрабатывает именно эту ситуацию, и делает это более эффективно, чем повторяющиеся операторы if…elif.

Синтаксис

случайное слово в
шаблон1)
Оператор(ы), которые должны быть выполнены, если шаблон1 соответствует
;;
шаблон2)
Оператор(ы), которые должны быть выполнены, если шаблон2 соответствует
;;
шаблон3)
Оператор(ы), которые должны быть выполнены, если шаблон3 соответствует
;;
*)
Условие по умолчанию для выполнения< br /> ;;
esac

Здесь строковое слово сравнивается с каждым шаблоном, пока не будет найдено совпадение. Оператор(ы), следующие за соответствующим шаблоном, выполняются. Если совпадений не найдено, оператор case завершает работу без выполнения каких-либо действий.

Максимального количества шаблонов нет, но минимальное — один.

При выполнении части операторов команда ;; указывает, что поток программы должен перейти к концу всего оператора case

Хорошим применением оператора case является оценка аргументов командной строки следующим образом:

Код:

#!/bin/sh

option="${1}"
case ${option} in
-f) FILE="${2}"
echo "Имя файла $FILE"
;;
-d) DIR="${2}"
echo "Имя каталога $DIR"
;;
*)
echo “`базовое имя ${0}`: использование: [-f файл] | [-d каталог]”
exit 1 # Команда выхода из программы со статусом 1
;;
esac

Вывод:

$./test.sh
test.sh: использование: [ -f имя файла ] | [ -d каталог ]
$ ./test.sh -f index.htm
$ vi test.sh
$ ./test.sh -f index.htm
Имя файла is index.htm
$ ./test.sh -d linux
Имя каталога — linux
$

Дополнительная информация

При создании скрипта вы также можете использовать различные параметры с первой строкой скрипта, т. е. использование #!/usr/bin/env NAME заставляет оболочку искать первое совпадение NAME в переменной окружения $PATH. Это может быть полезно, если вы не знаете абсолютный путь или не хотите его искать. Если сценарии оболочки начинаются с #!/bin/bash, они всегда будут запускаться с bash из /bin.

#!/usr/bin/bash -x [ -x: используется для последовательного вывода команд и их аргументов (по мере их выполнения). ]

#!/usr/bin/bash -e [ -e: используется для немедленного выхода, если команда завершается с ненулевым статусом. ]

#!/usr/bin/bash -v [ -v: используется для вывода строк ввода оболочки. ]

и многое другое. То же самое можно сделать, используя встроенную переменную оболочки, например «set [Option]».

Команда установки Linux

Команда Linux set используется для установки и снятия определенных флагов или настроек в среде оболочки. Эти флаги и настройки определяют поведение определенного скрипта и помогают выполнять задачи без каких-либо проблем. Значения атрибутов и параметров оболочки можно изменить или отобразить с помощью команды set.

Синтаксис:

установить [параметры]

Параметры. Команда set поддерживает следующие параметры:

  • -a: используется для пометки переменных, которые были изменены или созданы для экспорта.
  • -b: используется для немедленного уведомления о прекращении задания.
  • -e: используется для немедленного выхода, если команда завершается с ненулевым статусом.
  • -f: используется для отключения генерации имени файла (подстановки).
  • -h: используется для сохранения местоположения команд, где они искались.
  • -k: используется для помещения всех аргументов присваивания в переменную окружения команды, за исключением тех, которые предшествуют имени команды.
  • -m: используется для включения управления заданиями.
  • -n: используется для чтения команд.
  • -o: используется для имени опции.
  • -p: используется для отключения обработки файла ‘$ENV’ и импорта функций оболочки. Он включается всякий раз, когда реальный и эффективный идентификаторы пользователей не совпадают. Отключение этого параметра может привести к тому, что рабочие uid и gid будут установлены как авторизованные uid и gid.
  • -t: используется для выхода из команды после выполнения одной команды.
  • -u: используется для обработки неустановленных переменных как ошибки при замене.
  • -v: используется для вывода строк ввода оболочки.
  • -x: используется для последовательного вывода команд и их аргументов (по мере их выполнения).
  • -B: используется для раскрытия фигурной скобки в командной консоли.
  • -C: используется, чтобы запретить перезапись существующих обычных файлов путем перенаправления вывода.
  • -E: используется, если ловушка ERR наследуется функциями оболочки.
  • -H: используется для включения подстановки истории стилей. По умолчанию он включен, когда оболочка интерактивна.
  • -P: используется, если мы не хотим переходить по символическим ссылкам при выполнении команд.
  • -T: если этот флаг установлен, ловушка DEBUG наследуется функциями оболочки.

Чтобы включить отладочную информацию:

установить -x

Чтобы отключить отладочную информацию:

установить +x

Отключите поведение Bash по умолчанию.

Чтобы отключить поведение Bash по умолчанию, выполните команду следующим образом:

установить -C

Немедленно остановить скрипт.

Чтобы немедленно остановить скрипт, выполните следующую команду:

установить -e

Получение справки

Если вы застряли во время использования команды set, вы можете получить доступ к справочной документации с вашего терминала. Чтобы получить доступ к справочному руководству, выполните следующую команду:

установить [-][-] справку

Надеюсь, вам понравилась статья!

Я хотел бы поблагодарить вас. Я попытался охватить все о Bash Shell Scripting в одной статье. Спасибо, что читаете и помогаете мне расти как техническому писателю.

Особая благодарность мистеру. Сэр, Вимал Дага, за очень хорошее объяснение сценариев оболочки bash!!

С любовью,
Дхей Джоши