Найти в Дзене
Я, Golang-инженер

#76. Пишем Bash-скрипт и алиасы для автоматизации рутинной работы программиста

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением. Хой, джедаи и амазонки! Супер-краткое содержание, если лень читать всю публикацию: - Скрипт - это программа на языке оболочки, например - bash; - Скрипты нужны, чтобы одной простой командой запускать серию сложных команд в терминале - это полезно, когда постоянно выполняешь серию одинаковых команд; - В начале файла скрипта пишется #!/bin/bash, а далее - сами команды; - Файлу нужно назначить разрешение на выполнение через chmod; - Для удобства, можно назначить алиас скрипту. Работа backend-разработчика - это частично работа с терминалом. Я заметил тенденцию, что когда включаю компьютер, делаю в терминале одни и те же действия: запуск определённых программ, переход в определённый каталог, хочу получить вывод некоторой информации в терминал. Я трачу на это не больше минуты, но стало интересно автоматизировать процесс. Скажем, чтобы процесс занимал
Оглавление

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.

Хой, джедаи и амазонки!

Супер-краткое содержание, если лень читать всю публикацию:
- Скрипт - это программа на языке оболочки, например - bash;
- Скрипты нужны, чтобы одной простой командой запускать серию сложных команд в терминале - это полезно, когда постоянно выполняешь серию одинаковых команд;
- В начале файла скрипта пишется #!/bin/bash, а далее - сами команды;
- Файлу нужно назначить разрешение на выполнение через chmod;
- Для удобства, можно назначить алиас скрипту.

Работа backend-разработчика - это частично работа с терминалом. Я заметил тенденцию, что когда включаю компьютер, делаю в терминале одни и те же действия: запуск определённых программ, переход в определённый каталог, хочу получить вывод некоторой информации в терминал. Я трачу на это не больше минуты, но стало интересно автоматизировать процесс. Скажем, чтобы процесс занимал не 50 секунд, а 15.

"Что? С 50 секунд до 15? О чём вообще речь, вот если бы с получаса до 15 секунд - другое дело", - можете сказать вы. Всё так, и зачастую программист тратит время на отлов непонятных багов десятки часов. Но если есть возможность что-то автоматизировать, почему бы это не сделать?

И посчитаем выгоду, скажем, за год: (50-15 сек) х 5 дней/нед х 4 нед/мес х 11 мес/год = 7700 сек/год ≈ 128,3 мин ≈ 2 часа экономии в год. Уже интереснее.

А представьте, что вы миддл и научили этому трёх своих стажёров. Итого за год вы вчетвером экономите: 2 часа х 4 чел = 8 час/год. Полноценный рабочий день. Поехали разбираться, как это реализовать.

1. Что такое скрипт в IT?

Bash-скрипт - это программа, выполняемая командной оболочкой операционной системы; в данном случае - оболочкой bash.

Есть и другие оболочки; программы, написанные на языке этих оболочек - это сценарии командной строки или сценарии командной оболочки, по-английски shell script.

Во всех трёх Linux что я использовал, была bash. Поэтому разбираться будем с ней.

По сути, оболочки - это одновременно и программы, и языки; но не языки программирования как Go, или языки разметки как HTML, или языки запросов как SQL, а языки сценариев; т.е. языки скриптов.

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

Кстати, о разнице терминала, оболочке и CLI можно почитать здесь в параграфе 2.2.1 статьи о конфигурировании приложения: *клик*.

Технически, в скрипте может быть только одна команда. Но обычно их больше.

Рассмотрим комбинацию команд без файла-скрипта, а просто в терминале:

Терминал
Терминал

Мы ввели три команды, используя разделитель точка с запятой. Фактически - это прообраз скрипта, когда мы запустили последовательность команд.

Поскольку bash - язык интерпретируемый, то работа этого прообраза скрипта строится на обработке каждой отдельной команды и её исполнении поэтапно:

  1. Выполняется команда cd go - переход в каталог go;
  2. Команда ls отображает содержимое каталога;
  3. Команда pwd показывает полный путь к текущему рабочему каталогу терминала.

Вот мы прописали три команды в строку. Но что если нам по какой-то причине нужно часто использовать эту комбинацию команд? Удобнее сделать из этой комбинации простой скрипт и запускать его.

2. Bash-скрипт

2.1. Пишем простой скрипт

Напишем эти команды в виде полноценного скрипта. Для этого создадим файл:

Терминал
Терминал

Строка #!/bin/bash - особая, она говорит интерпретатору bash, что данный файл - это скрипт и какую программу нужно использовать для его интерпретирования.

Последовательность решётка+восклицательный знак называется шебанг. Последовательность после шебанга - путь к файлу-интерпретатора скрипта, в данном случае - это оболочка bash.

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

Терминал
Терминал

Можно команды также через точку с запятой писать, а можно каждую команду с новой строки - это как удобнее будет.

Сохраняем файл:

Терминал
Терминал

Расширение .sh не обязательно ставить, можно вообще без расширения.

Далее нужно дать разрешение файлу скрипта для выполнения его содержимого ОС:

Терминал
Терминал

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

Терминал
Терминал

Скрипт запущен.

Однако интересная штука - рабочий каталог почему-то не изменился.

Когда скрипт запускается, он наследует текущий рабочий каталог от родительского процесса (оболочки, из которой он запущен). При исполнении скрипта запускается новый процесс, и команда cd go меняет рабочий каталог внутри оболочки этого дочернего процесса. А при передаче управления родительскому процессу, его оболочка ничего не знает что там было установлено в дочернем.

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

Терминал
Терминал

Вот, теперь рабочий каталог в терминале изменился.

Для удобства запуска скрипта, можем создать алиас.

2.2. Алиас на скрипт

Алиас - это сокращение, которое обычно заменяет более длинную команду или последовательность команд для удобства использования.

Алиас прописываются в файлы конфигурации оболочки. Пример такого файла - это ~/.bashrc. В него можно добавить команду запуска скрипта:

alias smp="source ~/simple.sh"

Пишется всё без пробелов.

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

Теперь нужно чтобы оболочка заново считала конфигурацию из файла ./bashrc. Это делается двумя способами: запускается новая оболочка, либо вновь через команду source. Я воспользуюсь вторым способом. Результат:

Терминал
Терминал

С алиасом и скриптом разобрались. Какие ещё могут быть команды?

2.3. Запуск файлов

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

Я добавил это в баш-скрипт и у меня этот файл запускается автоматически вместе с остальными командами. Команда выглядит примерно так:

xdg-open /path_to_file/Памятка.txt

Удобно!

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

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

3. Выводы

Мы познакомились с основами создания скриптов на языке bash. Это вспомогательный инструмент повышения собственной эффективности, а не то, что превратит вас в программистов.

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

Если интересно узнать о других инструментах программиста, посмотрите мою подборку об этом: *клик*

На этом у меня всё, благодарю, что дочитали публикацию до конца. Успехов, и будем на связи.

https://ru.freepik.com/free-ai-image/view-ancient-paper-scroll-writing-documenting_273777376.htm
https://ru.freepik.com/free-ai-image/view-ancient-paper-scroll-writing-documenting_273777376.htm

Бро, ты уже здесь? 👉 Подпишись на канал для начинающих IT-специалистов «Войти в IT» в Telegram, будем изучать IT вместе 👨‍💻👩‍💻👨‍💻