Написание скриптов в Linux Bash
В этой статье мы расскажем, что такое 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
В этом примере мы сохранили результат вывода функции в переменную, а затем вывели эту переменную.
Результат:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊