Основы автоматизации и сценариев Bash (часть 1)
Автоматизация повторяющихся задач, как правило, приносит радость разработчику Bash: вместо того, чтобы снова и снова вводить бесконечные команды, скрипт просто повторяет работу. Bash идеально подходит для такой автоматизации. Эта серия поможет вам начать!
Что такое автоматизация Bash?
Оболочка Bash — это мощная оболочка Linux, позволяющая глубоко автоматизировать повторяющиеся задачи. Мало того, что оболочка Bash Linux является лучшим выбором для DevOps, инженеров по базам данных и инженеров по тестированию, каждый день пользователи могут извлечь выгоду из постепенно приобретаемых, постоянно совершенствующихся навыков Bash. Bash также является языком сценариев и программирования, который растет на вас. Я активно программирую на Bash с 2012 года и использую его гораздо дольше.
Bash также подходит для множества различных областей применения и вариантов использования. Например, вы можете легко использовать его для обработки больших данных, и, как ни странно, он очень хорошо подходит для этой задачи благодаря множеству инструментов обработки текста, доступных в нем или доступных в виде простых для установки пакетов. Он также очень подходит для резервного копирования и планирования и обслуживания баз данных, а также для обработки больших файловых хранилищ, автоматизации веб-серверов и многого другого.
Одна вещь, которую я обнаружил, заключается в том, что всякий раз, когда появляется следующая проблема, небольшое исследование в поисковой системе или на различных веб-сайтах Stackoverflow быстро дает не только решение проблемы, но и возможность расти и учиться. Это очень похоже на опыт человека, изучающего редактор vi
, где то же самое; всякий раз, когда возникает проблема, решение рядом.
Это мини-серия, состоящая из трех частей, из которых первая, и в ней мы рассмотрим автоматизацию Bash и основы написания скриптов.
Шебанг!
Вам может быть интересно, что это за титул. И вы были бы правы, если бы вы не разговаривали с опытным разработчиком Linux. В лучшем случае они улыбнутся. Это потому, что две первые буквы хорошо написанного сценария Bash всегда будут, ну, Shebang!
Есть два символа, а именно #!
, которые можно поместить в начало скрипта, которые указывают оболочке, что интерпретатор может, должен и будет использовать для обработки данного скрипта. Так получилось, что этот символ в целом называется Шебанг в целом.
Таким образом, расширяя наше предыдущее утверждение: первая строка хорошо написанного сценария Bash должна начинаться с #!/bin/bash
, чтобы указать оболочке (какая бы оболочка ни использовалась, она может быть например bash
или sh
или zsh
), который нам нужен двоичный /bin/bash
(наша оболочка Bash) чтобы выполнить этот код.
Давайте применим это на практике, определив небольшой скрипт test.sh
следующим образом:
#!/bin/bash echo 'Hello CloudSavvyIT Readers!'
Вы можете создать этот скрипт с помощью вашего любимого текстового редактора, который предпочтительно должен быть редактором, использующим только моноширинные шрифты, такие как vi, vim, nano или любой простой текстовый редактор на вашем рабочем столе Linux, и желательно избегать таких вещей, как текстовый процессор, такой как OpenOffice Writer и т. д., поскольку они могут записать дополнительные нежелательные двоичные данные или символы в наш сценарий. Другими словами; нам нужно использовать обычный текст.
Как только этот скрипт определен, мы делаем его исполняемым, выполнив chmod +x test.sh
в командной строке. Затем мы можем запустить скрипт, просто вызвав его имя с префиксом ./
: ./test.sh
Входные параметры
Как только вы начнете писать сценарии, вы, вероятно, обнаружите, что хотите передать входные параметры сценарию. Один из способов сделать это — использовать простые позиционные параметры, доступные в Bash по умолчанию. Давайте посмотрим на пример скрипта test2.sh
, который мы определяем следующим образом:
#!/bin/bash echo "${1}"
Здесь мы использовали позиционный параметр $ {1}
. Эта переменная будет отражать первое слово (по умолчанию через пробел), которое было передано нашему скрипту, если только не используются кавычки. Давайте посмотрим, как это работает:
После того, как наш скрипт снова станет исполняемым с помощью chmod +x test2.sh
, мы выполняем то же самое и передаем одно слово hello
в качестве первого позиционного параметра ($ { 1
). В результате нам возвращается hello
.
Это связано с тем, что при запуске сценария переменной $ {1}
(или $1
, хотя я рекомендую всегда заключать имена переменных в кавычки) было присвоено значение первого позиционного параметра; первое слово или строка в кавычках после имени скрипта.
Затем мы передали hello world
, однако это вернуло нам только hello
. Причина проста; второе слово (по умолчанию отделенное пробелом) рассматривается как второй позиционный параметр и поэтому инициализируется как $ {2}
в скрипте, а не $ {1
.
Мы обошли это поведение, заключая входные данные в кавычки при передаче Hello CloudSavvyIT Readers!
. И одинарные, и двойные кавычки сработали бы, хотя их работа отличается, подробнее об этом в следующей части этой серии. В результате наш первый позиционный параметр $ {1}
устанавливается равным полному тексту Hello CloudSavvyIT Readers!
, и, таким образом, нам возвращается то же самое.
Если вы хотите узнать больше о переменных, наши статьи Bash Functions and Local Variables и Exporting Variables in Bash: Why and How также могут вас заинтересовать.
Подведение итогов
В этой статье мы рассмотрели первый набор основ автоматизации и сценариев Bash. Мы узнали, что такое автоматизация Bash и Shebang, и как начать передавать входные переменные в наши скрипты.
В Bash Automation and Scripting Basics (Часть 2) мы рассмотрим заключение переменных в кавычки и многое другое. наслаждайтесь!