Главная страница
Навигация по странице:

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

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

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

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

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

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

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

  • Математические операции Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)): Управляющая конструкция if-then

  • Управляющая конструкция if-then-else

  • Bash скрипты. Bash скрипты


    Скачать 1.46 Mb.
    НазваниеBash скрипты
    Дата22.10.2022
    Размер1.46 Mb.
    Формат файлаpptx
    Имя файлаBash скрипты.pptx
    ТипДокументы
    #748704
    Bash скрипты

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

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

    Создайте пустой файл с использованием команды “TOUCH” В его первой строке нужно указать, какую именно оболочку мы собираемся использовать. Нас интересует “BASH” , поэтому первая строка файла будет такой:
    В других строках этого файла символ решётки используется для обозначения комментариев, которые оболочка не обрабатывает. Однако, первая строка — это особый случай, здесь решётка, за которой следует восклицательный знак (эту последовательность называют ШЕБАНГ ) и путь к “BASH” , указывают системе на то, что сценарий создан именно для “BASH”
    Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:
    Тут, так же, как и в командной строке, можно записывать команды в одной строке, разделяя точкой с запятой. Однако, если писать команды на разных строках, файл легче читать. В любом случае оболочка их обработает.

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

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

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

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

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

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

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

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


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

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

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

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

    Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.
    Сделать это можно двумя способами.
    С помощью значка обратного апострофа «`»
    С помощью конструкции $()
    Используя первый подход, проследите за тем, чтобы вместо обратного апострофа не ввести одиночную кавычку. Команду нужно заключить в два таких значка:
    При втором подходе то же самое записывают так:
    А скрипт, в итоге, может выглядеть так:
    В ходе его работы вывод команды pwdбудет сохранён в переменной mydir, содержимое которой, с помощью команды echo, попадёт в консоль.

    Математические операции

    Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)):

    Управляющая конструкция if-then

    В некоторых сценариях требуется управлять потоком исполнения команд. Например, если некое значение больше пяти, нужно выполнить одно действие, в противном случае — другое. Подобное применимо в очень многих ситуациях, и здесь нам поможет управляющая конструкция if-then. В наиболее простом виде она выглядит так:
    А вот рабочий пример:


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

    В данном случае, если выполнение команды pwdзавершится успешно, в консоль будет выведен текст «it works».
    Воспользуемся имеющимися у нас знаниями и напишем более сложный сценарий. Скажем, надо найти некоего пользователя в /etc/passwd, и если найти его удалось, сообщить о том, что он существует.


    В этом примере, если пользователь найден, скрипт выведет соответствующее сообщение. А если найти пользователя не удалось? В данном случае скрипт просто завершит выполнение, ничего нам не сообщив. Хотелось бы, чтобы он сказал нам и об этом, поэтому усовершенствуем код.
    Управляющая конструкция if-then-else

    Если первая команда возвратит ноль, что означает её успешное выполнение, условие окажется истинным и выполнение не пойдёт по ветке else. В противном случае, если будет возвращено что-то, отличающееся от нуля, что будет означать неудачу, или ложный результат, будут выполнены команды, расположенные после else.


    Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией if-then-else. Вот как она устроена:


    Напишем такой скрипт:


    Его исполнение пошло по ветке else.


    Что если надо проверить не одно условие, а несколько? Например, если нужный пользователь найден, надо вывести одно сообщение, если выполняется ещё какое-то условие — ещё одно сообщение, и так далее. В подобной ситуации нам помогут вложенные условия. Выглядит это так:


    Если первая команда вернёт ноль, что говорит о её успешном выполнении, выполнятся команды в первом блоке then, иначе, если первое условие окажется ложным, и если вторая команда вернёт ноль, выполнится второй блок кода.



    написать администратору сайта