Работа со скриптами Bash в Kali Linux

Bash Kali Linux

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

Еще по теме: Лучшие hex-редакторы для Kali Linux

Написание и работа со скриптами Bash в Kali Linux

Bash (GNU Bourne-Again Shell ) — это отличный инструмент для написания сценариев. Далее покажу, как писать скрипты Bash и рассмотрю практические примеры. Предполагается, что вы уже знаете, как работать с файлами в Linux (см. Основы работы и команды в терминале Kali Linux).

Bash — один из самых популярных и распространенных интерпретаторов командной оболочки в мире Unix-подобных систем. Он является расширением стандартной оболочки Unix (Bourne shell) и включает множество дополнительных функций, улучшений и возможностей.

Интерпретатор Bash обладает множеством функций, которые делают его мощным инструментом для работы с командной строкой и автоматизации различных задач на Unix-подобных системах.

Введение

Сценарий на Bash — это текстовый файл, содержащий серию команд, которые выполняются так, как если бы они были введены в окне терминала. Обычно сценариям на Bash присваивается расширение .sh  (но их можно выполнять и без расширения), они начинаются с #!/bin/bash и должны иметь соответствующие права доступа на выполнение.

Давайте напишем простой скрипт Hello World! (Привет, мир!) с помощью любого текстового редактора.

Назовите файл hello-world.sh, и запишите в него следующее:

Сохраните и закройте файл. В приведенном выше сценарии мы использовали несколько компонентов:

  • Строка 1: #! — интерпретатор Bash игнорирует. Вторая часть, /bin/bash, представляет собой абсолютный путь к интерпретатору, который используется для выполнения скрипта. Это позволяет определить, что это скрипт на Bash. Существует различные типы оболочек (zsh, C Shell и другие).
  • Строка 2: # — используется для добавления комментария. Символ # будет игнорироваться интерпретатором. Комментарии позволяют делать заметки касаемо сценариев.
  • Строка 3: echo "Hello World!" — использует команду echo Linux для вывода заданной строки в терминал, в данном случае «Hello World!».

Теперь нужно сделать этот сценарий исполняемым:

Права доступа скрипта Bash Kali Linux

Теперь можно запустить скрипт:

Мы видим, что скрипт выводит «Hello World!»:

Вывод Hello Worls! в терминале Kali Linux

Команда chmod с параметром +x используется для присвоения прав доступа на выполнение скрипта Bash. Затем для выполнения используется команда bash вместе с именем файла сценария scriptname.sh. Для запуска сценария можно также использовать ./scriptname.sh.

Это был наш первый скрипт на Bash. Давайте подробнее рассмотрим возможности Bash.

Переменные

Переменные используются для временного хранения данных. Можно объявить переменную для присвоения ей значения или считать переменную, которая будет «раскрываться» до своего сохраненного значения.

Можно объявлять переменные разными способами. Самый простой метод — установить значение напрямую с помощью простой декларации вида name=value.

Следует помнить, что между знаком = и именем переменной не должно быть пробелов.

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

Затем мы выполняем еще одну команду:

Объявление переменной бессмысленно, если мы не можем ее использовать или обратиться к ней. Для этого перед именем переменной ставим символ $. Когда Bash встречает в команде синтаксис $, он, перед выполнением команды, заменяет имя переменной на ее значение. Давайте посмотрим на пример вывода обеих переменных:

На следующем скрине мы видим результат со значениями переменных:

Переменные Bash Kali Linux

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

Bash интерпретирует определенные символы определенным образом. Например, следующее объявление демонстрирует неправильное многозначное объявление переменной:

Неправильное использование переменной Bash Kali Linux

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

Bash обрабатывает одинарные и двойные кавычки по-разному. Когда Bash встречает одинарные кавычки, он интерпретирует каждый заключенный символ буквально. Когда текст заключен в двойные кавычки, все символы рассматриваются буквально, за исключением «$» и «\», что означает, что переменные будут разворачиваться в начальный проход замены в заключенном тексте.

В случае вышеуказанного сценария следующее поможет прояснить:

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

Правильное использование переменной Bash Kali Linux

В приведенном выше примере мы использовали одинарные кавычки ' для переменной. Но когда мы используем переменную hello с чем-то другим, нам нужно использовать двойные кавычки ". Для понимания взгляните на скрине ниже:

Теперь мы видим вывод echo новой переменной $hello2:

Переменные с использованием двойных кавычек Bash Kali Linux

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

Для этого помещаем имя переменной в скобки (), символом $:

Здесь мы присвоили вывод команды whoami переменной user. Затем отобразили ее значение с помощью echo:

Присваивание переменной значения другой переменной в Bash Kali Linux

Альтернативный синтаксис для подстановки команды использует обратные кавычки ``:

Метод с использованием обратных кавычек устарел и обычно не рекомендуется, так как есть различия в том, как работают два метода подстановки команды. Также важно отметить, что подстановка команды выполняется в подоболочке (subshell), и изменения переменных в подоболочке не повлияют на переменные в основном процессе.

Аргументы

Не все сценарии на Bash требуют аргументов. Однако чрезвычайно важно понимать, как они интерпретируются Bash, и как их использовать. Мы уже выполняли команды Linux с аргументами. Для примера, когда мы выполняем команду ls -l /var/log, и -l, и /var/log — это аргументы для команды ls.

Скрипты на Bash также могут принимать аргументы командной строки и использовать их в своих сценариях:

Передача аргументов сценарию на Bash Kali Linux

На скрине выше, мы создали простой скрипт на Bash, назначили ему права на выполнение и затем запустили его с двумя аргументами. Переменные $1 и $2 представляют первый и второй аргументы, переданные в сценарий.

Давайте рассмотрим несколько специальных переменных на Bash:

Переменная Описание
$0 Имя сценария на Bash
$1 — $9 Первые 9 аргументов сценария на Bash
$# Количество аргументов, переданных сценарию на Bash
$@ Все аргументы, переданные сценарию на Bash
$? Статус завершения последнего выполненного процесса
$$ Идентификатор процесса текущего сценария
$USER Имя пользователя, запустившего сценарий
$HOSTNME Имя хоста
$RANDOM Случайное число
$LINENO Текущий номер строки в сценарии

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

Чтение пользовательского ввода

Аргументы командной строки — это форма пользовательского ввода, но мы также можем захватывать интерактивный пользовательский ввод во время выполнения сценария с помощью команды read. Попробуем использовать read для захвата пользовательского ввода и присваивания его переменной:

Чтение пользовательского ввода в сценарии на Bash Kali Linux

Можно изменить поведение команды read различными параметрами. Два часто используемые параметра - -p, который позволяет указать приглашение, и -s, который делает пользовательский ввод без звука/невидимым (может быть полезным для учетных данных).

Чтение пользовательского ввода тихо в сценарии Bash Kali Linux

Условные операторы If Else Elif

Условные операторы If, Else, Elif If, Else, Elif считаются наиболее распространенными условными операторами, которые позволяют выполнять различные действия в зависимости от разных условий.

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

Условный оператор if на Bash Kali Linux

На приведенном выше скрине, если «некоторое утверждение» истинно, сценарий выполнит «некоторое действие», которое может быть любой командой между then и fi. Рассмотрим реальный пример.

Условные операторы Bash If Else Elif

Пример вышеуказанного кода, использующего оператор if, проверяет возраст, введенный пользователем. Если возраст пользователя меньше 12 ( -lt) , сценарий отобразит предупреждение.

Некоторые из часто используемых операторов:

  • -n VAR — истина, если длина VAR больше нуля.
  • -z VAR — истина, если VAR пуст.
  • STRING1 = STRING2 — истина, если STRING1 и STRING2 равны.
  • STRING1 != STRING2 — истина, если STRING1 и STRING2 не равны.
  • INTEGER1 -eq INTEGER2 — истина, если INTEGER1 и INTEGER2 равны.
  • INTEGER1 -gt INTEGER2 — истина, если INTEGER1 больше INTEGER2.
  • INTEGER1 -lt INTEGER2 — истина, если INTEGER1 меньше INTEGER2.
  • INTEGER1 -ge INTEGER2 — истина, если INTEGER1 равно или больше INTEGER2.
  • INTEGER1 -le INTEGER2 — истина, если INTEGER1 равно или меньше INTEGER2.
  • -h FILE — истина, если FILE существует и является символической ссылкой.
  • -r FILE — истина, если FILE существует и доступен для чтения.
  • -w FILE — истина, если FILE существует и доступен для записи.
  • -x FILE — истина, если FILE существует и доступен для выполнения.
  • -d FILE — истина, если FILE существует и является директорией.
  • -e FILE — истина, если FILE существует и является файлом, независимо от типа (узел, директория, сокет и т. д.).
  • -f FILE — истина, если FILE существует и является обычным файлом (не директорией или устройством).

Мы использовали эти операторы в примере оператора if выше и убрали квадратные скобки, используя строку test. Но квадратные скобки делают код более читаемым.

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

Условный оператор else на Bash

Давайте расширим наш предыдущий пример с возрастом, добавив оператор else:

Использование оператора else на Bash

Оператор else был выполнен, когда введенный возраст был не менее 12.

Можно добавить больше аргументов к утверждениям с помощью оператора elif:

Условные операторы if else elif Bash Kali Linux

Расширим наш предыдущий пример с возрастом, используя оператор elif:

Использование оператора elif Bash Kali Linux

На приведенном примере видно, что код немного сложнее по сравнению с операторами if и else. В данном случае, когда пользователь вводит возраст больше 60, будет выполнен оператор elif и выведено приветствие.

Заключение

Мы рассмотрели базовые концепции написания сценариев на Bash, включая создание и выполнение сценариев, использование переменных, аргументов, условных операторов If, Else и Elif. Однако это только начало. Сценарии на Bash могут выполнять множество других операций, включая циклы, обработку строк, обработку файлов и многое другое.

Помимо этого, для выполнения разнообразных задач, вы можете использовать команды, доступные в Linux. Благодаря автоматизации, которую предоставляют сценарии на Bash, вы можете значительно упростить и ускорить свою работу, особенно в области информационной безопасности.

QUASAR

Этичный хакер: компьютерный ниндзя и мастер цифровых тайн.

Добавить комментарий