Основы Bash

Bash (Bourne Again Shell) – это программа-оболочка, которая предоставляет  пользователям среду для ввода команд и запуска других приложений. Когда вы открываете терминал в большинстве дистрибутивов Linux, вы по умолчанию используете оболочку Bash.

Пользователи могут вводить команды в интерфейсе командной строки (CLI) Bash для навигации по файлам, управления процессами, установки программного обеспечения и выполнения практически любых операций, которые поддерживают ОС.

Преимущества сценариев Bash

IT-специалисты широко используют Bash для выполнения широкого спектра задач, в том числе:

  • Выполнение команд. Интерфейс командной строки Bash позволяет пользователям управлять запущенными процессами, перемещаться по файловой системе, запускать приложения и управлять файлами и каталогами.
  • Сценарии. Программисты пишут сценарии Bash и выполняют последовательности команд для автоматизации рабочих процессов и создания новых инструментов и функций.
  • Обработка данных. Bash поддерживает использование пайп (|) для передачи вывода одной команды в другую, позволяя последовательно применять цепочку операций к данным. Например, специалисты по обработке данных и аналитики могут использовать пайпы Bash для быстрой обработки данных.
  • Настройка среды. Файлы конфигурации (.bashrc и .bash_profile) позволяют пользователям настраивать среду Bash, псевдонимы, переменные среды и запросы.
  • Планирование задач. Скрипты Bash можно запланировать для запуска в определенное время или через определенные промежутки времени. Например, администраторы баз данных используют Bash для планирования резервного копирования или оптимизации БД.
  • Программирование и разработка. Разработчики используют Bash для компиляции и запуска программного обеспечения, управления зависимостями проекта или автоматизации рабочих процессов разработки.
  • Системное администрирование. Системные администраторы используют Bash для настройки служб, мониторинга ресурсов, развертывания приложений и выполнения соответствующих задач по управлению системой.
  • Сеть. Сетевые администраторы используют команды Bash ssh и netstat, чтобы облегчить передачу данных и удаленное управление системой.
  • Интерактивные рабочие процессы. Bash может запрашивать у пользователей ввод данных – это очень удобно для создания управляемых рабочих процессов. Например, специалисты службы поддержки могут разрабатывать управляемые рабочие процессы для устранения распространенных проблем вместо того, чтобы лично проводить конечного пользователя через весь процесс.

Основные команды Bash 

Вот список некоторых из наиболее часто используемых команд в среде Bash:

Команда Значение
cd Изменяет текущий каталог на другой.
ls Выводит список содержимого текущего каталога.
mkdir Создает новый каталог.
touch Создает новый файл.
rm Удаляет файл или каталог.
cp Копирует файл или каталог.
mv Перемещает или переименовывает файл или каталог.
echo Выводит текст в терминал.
cat Конкатенирует и выводит содержимое файла.
grep Ищет шаблон в файле.
chmod Изменяет права доступа к файлу или каталогу.
sudo Запускает команду с административными привилегиями.
df Отображает доступное дисковое пространство.
history Показывает список ранее выполненных команд.
ps Отображает информацию о работающих процессах.

а так-же

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным
return заставляет функцию оболочки выйти с указанным значением

shift

перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

 

Синтаксис Bash-скриптов

Bash-скрипты – это текстовые файлы, которые можно создать в любом текстовом редакторе. 

Важно! Эти скрипты обязательно должны иметь права на выполнение. 

Давайте рассмотрим некоторые из наиболее популярных текстовых редакторов, которые помогут вам при создании Bash-скриптов:

  • Nano. Простой текстовый редактор, который включен в большинство дистрибутивов Linux. Он отличается простым и интуитивно понятным интерфейсом, а также имеет дополнительные полезные функции – например, подсветку синтаксиса.
  • Vim. Это одним из самых популярных текстовых редакторов для Linux. Он предлагает множество функций, которые ускоряют процесс написания кода – подсветку синтаксиса, автодополнение и макросы. Однако некоторым начинающим пользователям он может показаться сложным.
  • Emacs. Еще один популярный текстовый редактор для Linux. Emacs также обладает множеством функций, которые значительно упрощают процесс написания кода. Одной из его главных особенностей является возможность запуска интерпретатора Bash прямо внутри редактора, что упрощает тестирование скриптов без выхода из него.

Каждый Bash-скрипт должен начинаться со строки, называемой «шебанг», которая указывает операционной системе, какой интерпретатор следует использовать для выполнения скрипта. 

Шебанг начинается с символа решетки (#), за которым следует восклицательный знак (!), а затем указывается путь к интерпретатору. 

Например, для использования интерпретатора Bash пропишите:

Вы также можете добавлять комментарии к своим скриптам, начиная строку с символа решетки. Комментарии предоставляют описание функциональности скрипта и не выполняются интерпретатором.

Например:

Как запустить Bash-скрипт

Для запуска Bash-скрипта в операционной системе Linux вам нужно предоставить ему разрешение на выполнение. Это можно сделать с помощью команды «chmod». Она позволяет изменять права доступа к файлам и директориям в системе.

Синтаксис команды «chmod» выглядит следующим образом:

chmod опции права_доступа файл

Где:

  • «опции» – дополнительные параметры, которые можно указать для команды «chmod».
  • «права_доступа» – специальный код, который определяет права доступа к файлу или директории.
  • «файл» – путь к файлу или директории, права доступа к которой вы хотите изменить.

Чтобы сделать файл исполняемым, вам нужно добавить бит исполнения («x») к правам доступа к файлу. 

Например, давайте предположим, что у нас есть файл с именем «sweb.sh», и мы хотим сделать его исполняемым. Мы можем использовать следующую команду:

Эта команда добавит бит исполнения для текущего пользователя. 

Теперь, чтобы выполнить Bash-скрипт в Linux, вы можете вызвать его из терминала, указав путь к скрипту:

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

Параметры командной строки

Параметры командной строки предоставляют возможность передавать аргументы скрипту Linux при его выполнении. 

Эти аргументы могут быть обращены внутри скрипта через специальные переменные: $1, $2, $3…, где $1 – это первый параметр, $2 – второй и так далее.

Давайте напишем простой скрипт:

Теперь запустим скрипт, передав ему аргумент, в данном случае, имя пользователя (параметр $USER):

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

Встроенные параметры

Кроме того, вам доступны и другие специальные переменные командной строки:

$DIRSTACK содержимое вершины стека каталогов
$EDITOR текстовый редактор по умолчанию
$EUID Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как…
$UID …содержит реальный идентификатор, который устанавливается только при логине.
$FUNCNAME имя текущей функции в скрипте.
$GROUPS  массив групп к которым принадлежит текущий пользователь
$HOME домашний каталог пользователя
$HOSTNAME ваш hostname
$HOSTTYPE архитектура машины.
$LC_CTYPE внутренняя переменная, котороя определяет кодировку символов
$OLDPWD прежний рабочий каталог
$OSTYPE тип ОС
$PATH путь поиска программ
$PPID идентификатор родительского процесса
$SECONDS время работы скрипта(в сек.)
$# общее количество параметров переданных скрипту
$* все аргументы переданыне скрипту(выводятся в строку)
$@ тоже самое, что и предыдущий, но параметры выводятся в столбик
$! PID последнего запущенного в фоне процесса
$$ PID самого скрипта

Например, чтобы вывести на экран количество переданных параметров, можно использовать следующий код:

Переменные

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

Для создания переменной в Bash необходимо использовать оператор присваивания (=). 

Например:

Чтобы получить значение переменной, используйте ее имя с символом доллара ($), после команды «echo». Например:

Также вы можете присваивать значения переменным, считывая их с клавиатуры с помощью команды «read». 

Переменные не имеют типа (число, строка, массив и так далее) и действуют, как нужно в данный момент: как строка, команда, число, несколько чисел и так далее. Они могут даже интерпретироваться как несколько ключевых слов, если в вашей «строке» есть пробелы.

Например, следующий сценарий запрашивает у пользователя ввод имени и сохраняет его в переменной:

или

Область видимости

Понимание области видимости крайне важно, чтобы избежать ошибок.

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

Имя глобальной переменной должно быть ЗАГЛАВНЫМИ буквами. Чтобы сделать переменную доступной для всего терминала, используйте export VAR=»value».

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

Локальные переменные — это обычные переменные внутри одного сценария. Они не доступны другим программам и сценариям, которые запускаются с этой оболочки. Объявляются переменные с помощью символа = (обратите внимание на то, что перед и после = нет пробелов), а к их значениям обращаются с помощью символа $:

name="Петро Петрович"
echo $name # вывод значения
unset name # вывод переменной

акже можно создать локальную переменную внутри функции, которая будет доступна только в теле этой функции:

local локальная_переменная=значение

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

export глобальная_переменная=значение

В bash есть много переменных окружения, которые достаточно часто встречаются в сценариях, например:

  • HOME — путь к домашнему каталогу пользователя;
  • PATH — список каталогов, в которых оболочка ищет исполняемые файлы;
  • PWD — путь к рабочему каталогу;
  • RANDOM — формирует целое случайное число;
  • HOSTNAME — имя компьютера, на котором выполняется оболочка;

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

Условные операторы в Bash-скриптах позволяют выполнить определенные действия в зависимости от того, выполняется ли какое-то условие или нет. В Bash, условия заключаются в квадратные скобки и передаются в команду «if».

Вот как выглядит синтаксис оператора «if»:

if [условие]

then
пропишите команды, которые необходимо выполнить, если условие верно
fi

Здесь условие обязательно записывается в квадратных скобках, и если оно истинно, то команды, указанные между «then» и «fi», будут выполнены.

Прведу список логических операторов, которые используются для конструкции if-then-else-fi:

 

Вот приблизительная схема

[ — синоним команды test
[[ — расширенная версия «[» (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), & (и). Долна иметь закрывающуб скобку «]]»
(( )) — математическое сравнение.
для построения многоярусных условий вида:
if ...
  then ....
else
  if ....
    then....
  else ....

Циклы

Циклы в Bash позволяют выполнять одни и те же команды несколько раз. Существует два основных типа циклов: цикл «for» и цикл «while».

Цикл «for» 

Используется при выполнении команд для каждого элемента из определенного списка.

Синтаксис цикла «for» следующий:

Здесь «переменная» последовательно принимает значения из «списка», и для каждого значения выполняются указанные команды между ключевыми словами «do» и «done».

вывод

Цикл «while»

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

Синтаксис цикла «while» выглядит следующим образом:

Здесь команды, указанные между «do» и «done», будут выполняться, пока «условие» остается истинным. Условие проверяется перед каждой итерацией цикла.

например

вывод

Из цикла можно выйти с помощью команды break (работает также и для for):

Вывод:

Функции

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

  1. Создание функции

Синтаксис создания функции выглядит следующим образом:

имя_функции () {
 команды_и_выражения
}
  1. Аргументы функции

Функции могут принимать аргументы, которые передаются внутри круглых скобок при вызове функции. Внутри функции аргументы доступны через специальные переменные, такие как $1, $2…, где $1 представляет первый аргумент, $2 – второй и так далее:

my_function аргумент1 аргумент2

Например:

Работа с файлами и директориями

Bash-скрипты предоставляют средства для выполнения различных действий с файлами и директориями в операционной системе Linux. 

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

Если файл существует, то эта команда вернет значение 0. В противном случае она вернет ненулевое значение. 

Как создать скрипт в Linux

  1. Откройте ваш текстовый редактор и создайте файл с именем hello.sh. В этом примере мы будем использовать nano:

  1. Скопируйте и вставьте следующие строки в новый файл:

  1. Перейдите в каталог, где находится ваш скрипт myscript.sh, и сделайте его исполняемым:

  1. Теперь вы готовы выполнить ваш первый скрипт на Bash:

или

или

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

Hello World

 
 

Добавить комментарий

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