Litvek - онлайн библиотека >> Автор неизвестен >> Linux и др. >> Bash-скрипты, руководство в 11 частях

Bash-скрипты, руководство в 11 частях


Bash-скрипты: начало


Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.


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


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


pwd ; whoami

На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.


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


getconf ARG_MAX

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

Как устроены bash-скрипты


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


#!/bin/bash

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


Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:


#!/bin/bash

# This is a comment

pwd

whoami

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

Установка разрешений для файла сценария


Сохраните файл, дав ему имя myscript, и работа по созданию bash-скрипта почти закончена. Сейчас осталось лишь сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied.


Bash-скрипты, руководство в 11 частях. Иллюстрация № 1

Попытка запуска файла сценария с неправильно настроенными разрешениями

Сделаем файл исполняемым:


chmod +x ./myscript

Теперь попытаемся его выполнить:


./myscript

После настройки разрешений всё работает как надо.

Bash-скрипты, руководство в 11 частях. Иллюстрация № 2

Успешный запуск bash-скрипта

Вывод сообщений


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


#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Вот что получится после запуска обновлённого скрипта.


Bash-скрипты, руководство в 11 частях. Иллюстрация № 3

Вывод сообщений из скрипта

Теперь мы можем выводить поясняющие надписи, используя команду echo. Если вы не знаете, как отредактировать файл, пользуясь средствами Linux, или раньше не встречались с командой echo, взгляните на этот материал.

Использование переменных


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


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


Существуют два типа переменных, которые можно использовать в bash-скриптах:


   • Переменные среды

   • Пользовательские переменные

Переменные среды


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


#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

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


Bash-скрипты, руководство в 11 частях. Иллюстрация № 4

Использование переменной среды в сценарии

А что если надо вывести на экран значок доллара? Попробуем так:

echo "I have $1 in my pocket"

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


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


echo "I have \$1 in my pocket"


Теперь сценарий выведет именно то, что ожидается.


Bash-скрипты, руководство в 11 частях. Иллюстрация № 5

Использование управляющей последовательности для вывода знака доллара

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


В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.


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


#!/bin/bash

# testing variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"


Вот что получится после запуска такого сценария.


Bash-скрипты, руководство в 11 частях. Иллюстрация № 6

Пользовательские переменные в сценарии

Подстановка команд


Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её
Litvek: лучшие книги месяца
Топ книга - Аристономия [Борис Акунин] - читаем полностью в LitvekТоп книга - Разумный инвестор  [Бенджамин Грэхем] - читаем полностью в LitvekТоп книга - Лавр [Евгений Германович Водолазкин] - читаем полностью в LitvekТоп книга - Сила воли. Как развить и укрепить [Келли Макгонигал] - читаем полностью в LitvekТоп книга - Физика невозможного [Мичио Каку] - читаем полностью в LitvekТоп книга - Пробуждение Левиафана [Джеймс С. А. Кори] - читаем полностью в LitvekТоп книга - Технический анализ фьючерсных рынков: Теория и практика [Мэрфи Джон Дж] - читаем полностью в LitvekТоп книга - Счастливый брак по-драконьи. Поймать пламя [Александра Черчень] - читаем полностью в Litvek