Что такое bash в Linux? Гайд по созданию bash-скриптов

  Дмитрий Бушуев  | 

  Обновл. 29 Июл 2021  | 

 25189

 ǀ   5 

bash (сокр. от «Bourne-Again shell») — это командная оболочка (или «интерпретатор командной строки»), используемая по умолчанию в операционных системах на базе Unix и Linux, созданная в 1989 году Брайаном Фоксом с целью усовершенствования командной оболочки sh.

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

Что такое терминал?

Терминал — это программа, которая используется для взаимодействия с шеллом. Это просто интерфейс к нему и другим программам командной строки, которые работают внутри нее. Вот как выглядит типичный терминал (Konsole) в Debian 11 (окружение рабочего стола — KDE Plasma):

Типичный терминал в Linux

Всякий раз, когда мы открываем окно терминала, мы видим приглашение шелла — имя_пользователя@имя_машины:~$. Символ $ означает, что мы работаем под учетной записью обычного пользователя, а символ ~ (тильда) означает, что в данный момент мы находимся в домашнем каталоге /home/<имя_пользователя>.

Команды в bash


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

Команда echo — возвращает всё, что вы вводите в командной строке:

Пример использования команды echo

Команда date — отображает текущее время и дату:

Пример использования команды date

Команда pwd (сокр. от «print working directory») — указывает на текущий рабочий каталог, в котором команды шелла будут искать файлы.

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

Пример использования команды pwd

Команда ls (сокр. от «lis) — отображает содержимое каталога. Обычно, команда ls начинает с просмотра нашего домашнего каталога. Это означает, что если мы просто напечатаем ls, то данная команда выведет содержимое текущего каталога, которым в нашем примере является домашний каталог /home/diego:

Пример использования команды ls

Команда cd (сокр. от «change directory») — изменяет текущую директорию на заданную пользователем. Рассмотрим некоторые примеры использования данной команды:

   cd <директория> — меняет текущую директорию на заданную. Давайте попробуем с помощью команды ls перейти к корневому каталогу / и ознакомимся с его содержимым. Обратите внимание, что мы также можем использовать точку с запятой ; для записи двух команд в одной строке.

Пример объединения двух команд в одной строке

   cd .. — вернуться в родительский каталог.

   cd — вернуться в домашний каталог.

Команда mkdir (сокр. от «make directory») создает новый каталог.

Команда mv (сокр. от «mov) — перемещает один или несколько файлов/каталогов из одного места в другое (заданное пользователем). Для этого нужно указать, что мы хотим переместить (т.е. источник), и куда мы хотим переместить (т.е. пункт назначения).

В качестве примера я создам новый каталог Ravesli в своей домашней директории и перемещу в него все .txt-файлы (ну как «все», у меня там только один файл — Адреса.txt) из /home/diego/Документы/ с помощью двух вышеприведенных команд:

Перемещение файлов с помощью команды mv

Команда touch — создает новые пустые файлы (а также изменяет временные метки в существующих файлах и каталогах). Вот как мы можем создать пустой файл под названием foo.txt в папке Ravesli из домашнего каталога:

Создание файла с помощью команды touch

Команда rm (сокр. от «remove») — удаляет файлы/каталоги. По умолчанию, команда rm НЕ удаляет каталоги, но если используется как rm -r * внутри заданного каталога, то каждый подкаталог и файл внутри заданного каталога — удаляются.

Давайте удалим ранее созданный файл foo.txt:

Удаление файла с помощью команды rm

Команда rmdir (сокр. от «remove directory») — удаляет каталоги.

Давайте удалим созданный ранее каталог /home/diego/Ravesli:

Удаление каталогов с помощью команды rmdir

Команда cat (сокр. от «concatenate») — считывает файл и выводит его содержимое. Она может работать с несколькими файлами, объединяя их вывод в единый поток (отсюда и происходит её название). У меня в домашнем каталоге есть папка untitled с файлами С++/Qt-проекта, и ниже я использую команду cat для просмотра содержимого файла main.cpp из untitled:

Пример использования команды cat

Чтобы просмотреть несколько файлов, укажите друг за другом (через пробел) имена требуемых файлов после команды cat, например:

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

Команда man (сокр. от «manual») — отображает справочные страницы, которые являются руководством пользователя, встроенным по умолчанию во многие дистрибутивы Linux и большинство систем Unix. Например, команда man bash отобразит руководство пользователя, а команда man ls отобразит справку по команде ls.

Отображение справочной информации с помощью команды man

Редактор nano

nano — это маленький, простой, консольный текстовый редактор *nix-подобных операционных систем, впервые увидевший свет в далеком 1999 году. Для запуска редактора достаточно ввести в терминале всего одну команду — nano. Если же нужно отредактировать какой-то конкретный файл, то применяется команда nanо /<путь_к_файлу/<имя_файла>. Отличительной чертой данного редактора является то, что он управляется сочетаниями клавиш. Например, для сохранения текущего документа применяется сочетание Ctrl+O, для вызова меню поиска — Ctrl+W, для выхода из редактора — Ctrl+X, а для получения всего списка доступных сочетаний клавиш — Ctrl+G.


Гайд по созданию bash-скриптов


Наш шелл, это не только промежуточное звено между пользователем и системой, но еще и мощный язык программирования. Программы, написанные на языке шелла, называются shell-скриптами (или shell-сценариями) и имеют соответствующее расширение файлов — .sh. Сам язык содержит полный набор утилит и команд, доступных в *nix-системах, а также циклы, условные операторы, объявление переменных и пр. Такие скрипты будут очень полезными там, где не требуется использование полноценных языков программирования, например, в задачах администрирования операционной системы.

Создание bash-скрипта

Чтобы создать новый файл bash-скрипта, откройте в любом редакторе текстовый файл и сохраните его с расширением .sh. Все дальнейшие эксперименты я будут проводить в Debian Linux, с применением текстового редактора nano.

Давайте создадим новый файл ravesli.sh:

diego@debian:~$ touch ravesli.sh
diego@debian:~$ ls -l
-rw-r--r-- 1 diego diego    0 мар  9 14:59  ravesli.sh
diego@debian:~$

Чтобы выполнить файл bash-скрипта, нужно изменить права доступа к файлу и сделать его исполняемым. Разрешение, как вы наверняка помните из предыдущих уроков, изменяется командой chmod +x <имя_файла>:

diego@debian:~$ chmod +x ravesli.sh
diego@debian:~$ ls -l
итого 40
drwxr-xr-x 2 diego diego 4096 фев 27 00:23  build-untitled-Desktop-Debug
-rwxr-xr-x 1 diego diego    0 мар  9 14:59  ravesli.sh

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

Файл bash-скрипта может быть запущен двумя способами:

   Способ №1: bash <имя_файла>. Чтобы выполнить скрипт, просто напишите в терминале команду bash, а затем (через пробел) имя файла и нажмите Enter.

   Способ №2: ./<имя_файла>. Чтобы выполнить скрипт введите команду ./<имя_файла> и нажмите Enter.

Команда echo

Команда echo — это самая фундаментальная и базовая команда в bash-скриптах. Её основное предназначение заключается в выводе любой информации на экран. Давайте откроем c помощью nano (или любого другого текстового редактора) файл ravesli.sh и попробуем применить команду echo для вывода некоторого текста в терминале.

Далее, нажимаем Ctrl+O для сохранения изменений и Ctrl+X для выхода из nano.

Примечание: Каждый bash-скрипт всегда должен начинаться со строки:

В данной строке после #! указывается путь к командной оболочке bash. Если у вас bash находится в другом месте, то с помощью команды whereis bash вы можете узнать, где именно, и указать свой путь.

Запустим наш файл и увидим:

diego@debian:~$ ./ravesli.sh
Привет, Ravesli !
Эта команда была выполнена с помощью bash-скрипта
diego@debian:~$


Комментарии

Комментарии — это важная часть компьютерных программ. Они являются неисполняемыми строками, улучшающими читабельность кода и помогающими понять его назначение. В файле bash-скрипта мы можем добавлять однострочные и многострочные комментарии:

   однострочные комментарии начинаются с символа #;

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

Давайте рассмотрим простой пример применения комментариев в bash-скриптах:

Результат:


Объявление и использование переменных

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

Давайте объявим и применим переменную в нашем файле bash-скрипта:

Результат:


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

Условные операторы в bash используются для принятия решений. В условных операторах вычисляется конкретное условие. Если условие истинно (true), то выполняется первый блок кода. В противном случае (false) выполняется второй блок кода.

Мы можем вычислить одно или несколько условий внутри блока if с помощью операторов OR (||) и AND (&&). В bash блок if начинается с ключевого слова if и заканчивается ключевым словом fi. Если заданное условие ложно, то выполняется блок else.

Давайте посмотрим, как выполняются условные операторы в bash. Мы объявили переменную, а затем вычисляем её и принимаем решение на основе её значения. При этом, для проверки по типу «меньше, чем» применяется запись –lt, для «больше, чем» — запись -gt, а для проверки на «равно» — запись -eq:

Результат:

Вывод показывает, что Число меньше 10, потому что значение переменной равно 7, что явно меньше 10. В данном примере выполняется условие.

Аналогично, мы можем использовать условие OR (||) и AND (&&) внутри блока if для вычисления нескольких условий. Давайте рассмотрим пример оператора OR:

Результат:

Теперь давайте реализуем оператор AND внутри условия if. В операторе AND оба условия должны быть истинными.

Результат:


Оператор else if

Оператор else if используется для вычисления нескольких условий. Чтобы определить оператор else if, применяется ключевое слово elif.

Давайте рассмотрим пример с пользовательским вводом (ключевое слово read используется для получения входных данных от пользователя):

Результат:


Цикл while

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

while [условие]
do
выражения_и_команды
done

Если [условие] истинно, то выполняется блок do.

Ниже представлен пример цикла while. Цикл продолжает выполнение до тех пор, пока значение переменной не станет меньше 10. Внутри блока do мы увеличиваем значение переменной на 1 в каждой итерации. Цикл завершается, когда условие становится ложным.

Результат:

Цикл for

Цикл for также применяется для многократного выполнения одного и того же блока кода. Синтаксис цикла for в bash выглядит следующим образом:

for ((объявление_переменных; условие; инкремент/декремент_счетчика))
do
выражения_и_команды
done

Рассмотрим пример цикла for, в котором будем увеличивать значение переменной и выводить его в каждой итерации:

Результат:

Заключение

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


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (38 оценок, среднее: 4,97 из 5)
Загрузка...

Комментариев: 5

  1. Андрей:

    Не понял, когда в операторе elif нужнa в конце "точка с запятой", а когда нет. Поясните, пожалуйста.

  2. man:

    Продолжайте в том же духе,очень помогаете 🙂

    1. Фото аватара Дмитрий Бушуев:

      Постараемся 🙂

      1. Алексей:

        Добрый день, в статье вы используете Debian10? Это скорее опечатка у вас.

        1. Фото аватара Дмитрий Бушуев:

          В статье используется тестовая ветка Debian 10, которую сами разработчики именуют Debian 11 ("bullseye").

          P.S.: Более того, ниже я прикрепил скриншот, на котором даже стартовый экран загрузки системы прозрачно намекает о версии дистрибутива 🙂
          https://ibb.co/PjybcmC

Добавить комментарий для Алексей Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *