В этой статье мы расскажем, что такое Bash script и как его написать.
Что такое Bash
Bash (Bourne-Again SHell) — это командная оболочка, которая используется Uinx-подобных в операционных системах. Она была разработана как альтернатива оригинальной оболочке Bourne shell и является оболочкой по умолчанию в большинстве дистрибутивов Linux. Bash позволяет пользователям взаимодействовать с операционной системой, вводя команды в окне терминала. Также с помощью интерпретатора Bash можно выполнять скрипты, что позволяет автоматизировать повторяющиеся задачи.
Bash-скрипт — это файл с последовательностью команд, которые по очереди считываются и выполняются интерпретатором Bash. Сценарии Bash универсальны и могут использоваться для автоматизации различных задач, таких как системное администрирование, управление файлами и процессами.
Выбор текстового редактора
Для написания скриптов на Bash можно использовать любой текстовый редактор. Чаще всего используют:
- Nano — самый простой и удобный вариант. По умолчанию установлен на большинство дистрибутивов Linux;
- Vim — популярный редактор с гибкими настройками и широким функционалом. Подойдет более опытным пользователями, новичкам будет тяжело разобраться в нем;
- Emacs — многофункциональный текстовый редактор. Его главное преимущество — возможность запустить интерпретатор Bash прямо в редакторе. Так вы сможете протестировать сценарий, не закрывая редактор.
Шебанг
Любой скрипт в Unix-подобных системах начинается со строчки под названием шебанг (shebang). В ней мы указываем интерпретатор, который используется для выполнения скрипта. Шебанг начинается с символов #!, после которых прописывают путь до интерпретатора. Shebang для Bash выглядит следующим образом:
#!/bin/bash
Комментарии
Для удобства при написании скрипта вы можете добавлять комментарии. Любой комментарий начинается с символа #. Интерпретатор при выполнении сценария игнорирует комментарии. Как правило, их используют для описания функций кода. Пример комментария:
# Комментарий
Как создать скрипт
Прежде всего необходимо создать пустой файл скрипта. Сделать это можно при помощи команды touch. Например, чтобы создать файл myscript.sh, нужно ввести команду:
touch myscript.sh
Далее необходимо открыть файл с помощью текстового редактора. К примеру, если вы хотите открыть файл в редакторе nano, нужно ввести команду:
nano myscript.sh
Теперь можно приступить к написанию скрипта. В первой строке нужно указать шебанг. Затем необходимо прописать команды Bash в той последовательности, в которой они должны выполняться. Например, скрипт для вывода на экран фразы «Hello, World!» будет выглядеть следующим образом:
#!/bin/bash
echo "Hello, World!"
После необходимо сохранить изменения. Чтобы сохранить изменения и выйти из редактора nano, нужно нажать Ctrl+X, Y, Enter.
Запуск скрипта
Чтобы запустить script в Linux, ему нужно дать права на выполнение. Сделать это можно с помощью команды chmod. Например, чтобы сделать исполняемым файл myscript.sh, нужно ввести команду:
chmod +x myscript.sh
Теперь скрипт можно запустить. Чтобы выполнить скрипт myscript.sh, нужно ввести в терминале:
./myscript.sh
Результат выполнения скрипта:
Аргументы
Аргументы — это параметры, которые передаются программе при ее выполнении. Допустим, вы хотите посмотреть ресурсные записи домена example.com с помощью утилиты host. Для этого нужно будет ввести команду host example.com. В этом примере example.com — аргумент, который вы передали программе host.
В Bash аргументы обозначаются следующим образом: $1 — первый аргумент, $2 — второй аргумент, $3 — третий аргумент и так далее.
В качестве примера создадим скрипт со следующим содержимым:
#!/bin/bash
echo "Hello, $1"
Затем запустим скрипт, передав ему аргумент:
./myscript.sh Ivan
И увидим следующий вывод:
Также вы можете использовать специальные параметры:
$0
— имя скрипта,$#
— количество параметров, переданных скрипту,$*
— список всех переданных параметров в виде строки,$@
— список всех переданных параметров в виде массива данных,$?
— код завершения скрипта. Код 0 означает успешное выполнение, а любое число, отличное от 0, указывает на сбой.
Например, создадим скрипт, в котором будут выводиться 2 аргумента и список всех переданных аргументов:
#!/bin/bash
echo "Your first name: $1"
echo "Your last name: $2"
echo "Hello, $*"
Запустим скрипт, передав ему 2 аргумента:
./myscript.sh Ivan Ivanov
И получим такой вывод:
Переменные
Переменные в Bash используют для хранения различных типов данных, например, строк или чисел. Чтобы создать переменную, необходимо присвоить ей значение с помощью знака равно (=).
Важно
Между названием переменной, знаком равно (=) и значением переменной не должно быть пробелов. Значение переменной указывается в кавычках.
Пример:
name=”Ivan”
Чтобы вывести значение переменной, укажите ее название после команды echo со знаком $:
echo $name
Если вы хотите, чтобы скрипт запрашивал значение переменной у пользователя, используйте команду read. Например:
#!/bin/bash
echo "Enter your first name"
read firstname
echo "Enter your last name"
read lastname
echo "Hello, $firstname $lastname"
Этот скрипт запрашивает имя и фамилию пользователя, сохраняет их в качестве переменных, а затем выводит значения переменных:
Также в скриптах можно использовать переменные окружения — это специальные переменные, которые определяются оболочкой и используются программами во время выполнения. К ним относятся такие переменные, как $PWD, $PATH, $HOME.
Кроме того, переменные можно использовать для передачи значений между различными командами и скриптами. К примеру, если необходимо передать значение переменной из одного скрипта в другой, нужно использовать команду export:
export имя_переменной
Условные операторы
Условные операторы в сценариях Bash используются для выполнения определенных действий в зависимости от истинности или ложности заданного условия. Эти операторы заключаются в скобки и передаются в команду if.
Синтаксис условных операторов:
if [ условие ]
then
команды, которые должны быть выполнены, если указанное условие окажется верным
fi
Внимание
При использовании условных конструкций важно ставить пробелы вокруг операторов сравнения. Если этого не сделать, то скрипт будет воспринимать ее как одиночную строку, а не как операцию сравнения.
Пример:
#!/bin/bash
echo "Enter the number: "
read num
if (( $num % 2 == 0 ))
then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
Этот скрипт определяет, четное число или нечетное, путем деления введенного вами числа на 2.
Также в условных конструкциях можно использовать следующие операторы сравнения:
- -gt — больше,
- -lt — меньше,
- -eq — равно,
- -ne — не равно,
- -ge — больше или равно,
- -le — меньше или равно.
Пример:
#!/bin/bash
echo "Enter the first number: "
read num1
echo "Enter the second number: "
read num2
if [ $num1 -lt $num2 ]
then
echo "$num1 is less than $num2"
fi
if [ $num1 -gt $num2 ]
then
echo "$num1 is greater than $num2"
fi
if [ $num1 -eq $num2 ]
then
echo "$num1 is equal to $num2"
fi
Этот скрипт сравнивает 2 числа и выводит информацию о том, больше, меньше или равно первое число второму.
Конструкция switch-case
Конструкция switch-case в сценариях Bash упрощает задачу создания условных операторов, которые сравнивают переменные с несколькими возможными значениями.
Синтаксис конструкции switch-case выглядит следующим образом:
case variable in
condition1)
command
;;
condition2)
command
;;
*)
default command
;;
esac
где:
variable
— переменная, которую необходимо проверить,condition
— возможное значение, которое необходимо проверить,command
— команды, которые необходимо выполнить в зависимости от значения переменной,*
— обработчик, который будет использоваться, если ни одно из значений не соответствует переменной.
Пример скрипта, который определяет официальный язык страны по ее названию:
#!/bin/bash
echo -n "Enter the name of a country: "
read COUNTRY
echo -n "The official language of $COUNTRY is "
case $COUNTRY in
Russia)
echo -n "Russian"
;;
Kazakhstan)
echo -n "Kazakh"
;;
Italia)
echo -n "Italian"
;;
*)
echo -n "unknown"
;;
esac
Скрипт попросит вас ввести страну. Например, если вы наберете «Russia», это будет соответствовать первому значению, и команда echo выведет следующее:
Если вы введете страну, которая не соответствует ни одному значению, вывод будет следующим:
Циклы
Циклы в Bash используются для выполнения определенных частей кода заданное количество раз. Существует два вида циклов: for и while.
Синтаксис цикла for:
for переменная in список
do
команды
done
В этом случае переменная принимает значение элемента из списка, после чего для каждого отдельного элемента выполняются команды, указанные между «do» и «done».
Пример:
#!/bin/bash
for i in {1..5}
do
echo "Number $i"
done
В этом скрипте переменная будет принимать значение от 1 до 5. Для каждого значения будет выполняться команда echo.
Цикл while используется для непрерывного выполнения команд до тех пор, пока условие не станет ложным.
Синтаксис цикла while:
while [ условие ]
do
команды
done
Условие, указанное в квадратных скобках, проверяется перед каждой итерацией цикла. Команды будут выполняться повторно до тех пор, пока условие остается истинным.
Пример:
#!/bin/bash
x=1
while [ $x -le 5 ]
do
echo "Count $x"
x=$(( $x + 1 ))
done
В этом скрипте значение х увеличивается на 1 после каждой итерации. Цикл завершается, когда х становится равен 5.
При помощи while можно сделать бесконечный цикл:
while true
do
echo "infinite loops"
done
Это может понадобиться, когда какое-то значение нужно проверять постоянно, либо если нужно запускать что-то чаще, чем позволяет cron.
Функции
Функции Bash — это набор команд, объединенных в группы, которые можно вызывать множество раз. Назначение функций — помочь вам сделать ваши bash-скрипты более читабельными и избежать повторного написания одного и того же кода. Функции можно вызывать из скрипта с помощью названия функции.
Синтаксис функции:
название_функции () {
команды
}
Пример:
#!/bin/bash
hello_world () {
echo “Hello, world!”
}
hello_world #Вызов функции
Здесь мы создали функцию hello_world, добавили в нее команду echo «Hello, world!», а затем вызвали эту команду с помощью функции.
Результат:
Функции также можно передавать любые аргументы. Пример функции с аргументами:
#!/bin/bash
hello_world () {
echo “Hello, $1”
}
hello_world Ivan #Вызов функции
Вывод:
Кроме того, функции могут возвращать значения. Для этого нужно использовать ключевое слово return и аргумент $?. Пример:
#!/bin/bash
my_function () {
echo "some result"
return 100
}
my_function #Вызов функции
echo $? #Вывод
Результат:
Есть и другой способ возврата значения из функции. Пример:
#!/bin/bash
my_function () {
local func_result="some result"
echo "$func_result"
}
func_result="$(my_function)"
echo $func_result
В этом примере мы сохранили результат вывода функции в переменную, а затем вывели эту переменную.
Результат:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊