Bash-скрипты: Руководство по Функциям Bash с Примерами

Bash — одна из самых популярных скриптовых оболочек, доступных в Unix. Её полное название звучит как «Bourne Again Shell». Любой пользователь Linux, умеющий работать в командной строке, или системный администратор согласится, что bash и bash-скрипты — мощный инструмент. В этом руководстве мы покажем, как ими пользоваться!

В Unix есть 2 основных типа оболочек.

  • Bourne shell
  • C shell

Bourne shell имеет такие разновидности:

  • Korn shell (ksh)
  • Bourne shell (sh)
  • POSIX shell (sh)
  • Bourne Again shell (bash)

C shell имеет такие вариации:

  • C shell (csh)
  • TENEX (TOPS) C shell (tcsh)

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

Bash доступен практически во всех версиях Linux и не требует отдельной установки. Список доступных оболочек можно проверить, введя следующую команду:

cat /etc/shells

Вывод покажет что-то вроде этого:

/bin/bash
/bin/sh
/bin/tcsh
/bin/csh

Зачем Использовать Функции Bash?

Функция Bash — это по сути набор команд, которые можно вызывать множество раз. Цель функции — помочь вам сделать ваши bash-скрипты более читабельными и избежать повторного написания одного и того же кода. Bash-функции могут:

  • Устранить повторяющиеся задачи
  • Сэкономить время
  • Дать хорошо структурированную, модульную и отформатированную последовательность действий
  • Предоставить возможность задавать динамические значения командам, используя аргументы командной строки
  • Упростить сложные команды, заменив их на один работающий блок
  • Создана единожды, функция может быть запущена неограниченное количество раз.
  • Быть использованы для построения логических потоков
  • Bash-функции могут быть выполнены при запуске сервера или добавлении запланированного cron-задания
  • Команды могут быть отлажены
  • Включать команды, которые вводятся в интерактивном режиме оболочки

Bash, безусловно, отличный инструмент, способный значительно облегчить рабочий процесс. Возможности его использования безграничны, поэтому в этом руководстве мы разберёмся только с основами. Итак, приготовитесь написать ваш первый скрипт!

Bash-скрипты: Подготовка к Работе

Прежде чем мы сможем начать, вам нужно подключиться к VPS-серверу через SSH. Если в процессе у вас возникнут какие-либо вопросы, загляните в это полезное руководство.

Чтобы ознакомится з базовыми опциями bash, вызовите справку:

man bash

В общем-то суть сценариев, или bash-скриптов заключается в том, чтобы записать все повторяющиеся команды в один файл. И вместо того, чтобы постоянно вводит эти команды, начинать их выполнение простым вызовом файла. Таким образом, сначала нам нужно создать файл .sh. Для этого мы будем использовать редактор VIM. Чтобы создать файл, введите следующую команду:

vim primerScripta.sh

Теперь мы перейдём к файлу .sh, где сможем его редактировать.

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

#!/bin/bash

Команда ниже покажет путь к bash-сценарию.

which bash

Как результат этой команды вывод покажет:

/bin/bash

Общий синтаксис bash:

функция имяФункции {
первая команда
вторая команда
}

Также это можно записать так:

имяФункции (){
первая команда
вторая команда
}

Или в одну строку:

имяФункции() { первая команда; вторая команда; }
caca

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

sampleFunction () {
mkdir -p $1
cd $1
}

$1 означает переменную, которая вставлена ​​в функцию. Bash может создавать динамические переменные внутри команды. Чтобы проверить эту функцию, сделайте следующее:

sampleFunction myDir

Здесь myDir является допустимым именем каталога, который будет создан. Если вы проверите текущий рабочий каталог с помощью команды pwd, то увидите, что вы находитесь в только что созданном myDir.

Точно так же любая часто используемая команда может быть добавлена как функция bash.

Если вы закончили редактировать файл .sh в редакторе VIM, нажмите ESC, чтобы перейти в командный режим, а затем :wq, чтобы сохранить и выйти.

Основные Bash-функции

Ниже показан один из основных примеров функции bash:

#!/bin/bash
testfunction(){
   echo "Моя первая функция"
}
testfunction

Если вы сохраните этот скрипт в testFunction.sh и выполните его как ./testFunction.sh, в выводе вы увидите:

Моя первая функция

Функция echo выводит результат в консоли. Если вы поменяете местами определение функции с вызовом, появится сообщение об ошибке. Приведённый ниже фрагмент кода выдаст ошибку.

#!/bin/bash
testfunction
testfunction(){
   echo "Моя первая функция"
}

Сначала вам нужно определить функцию, а затем вызвать её.

Функции bash могут принять любое количество параметров. Пример ниже принимает два параметра:

#!/bin/bash
testfunction(){
   echo $1
   echo $2
}
testfunction "Hello" "World"

Вы также можете использовать интерактивный ввод и выполнять функции bash. Один из таких примеров показан ниже:

#!/bin/bash
addition(){
   sum=$(($1+$2))
   return $sum
}
read -p "Enter a number: " int1
read -p "Enter a number: " int2
add $int1 $int2
echo "The result is : " $?

В приведённом выше примере значение сложения присваивается в переменной sum, и оно возвращается из функции. Интерактивный ввод осуществляется с использованием read для обоих чисел. Наконец, результат печатается с использованием параметра $?, который хранит возвращаемое значение $sum из функции.

Функции Bash всегда возвращают одно значение.

Вы можете оставить комментарии к файлу, добавив значок #.

Bash-скрипты поддерживают:

  • Цикл while
  • Цикл for
  • Стейтмент if
  • Логическое И
  • Логическое Или
  • Стейтмент else if
  • Оператор case

Ниже приведён пример цикла while.

#!/bin/bash
isvalid=true
count=1
while [ $isvalid ]
do
echo $count
if [ $count -eq 5 ];
then
break
fi
((count++))
done

В примере используются операторы while и if. Это выполняет цикл while 5 раз перед выходом после проверки условного оператора if.

Вот результат:

1
2
3
4
5

Цикл for может использоваться как для увеличения, так и для уменьшения счетчиков. Один из таких примеров цикла for показан ниже:

#!/bin/bash
for (( count=10; count>0; count-- ))
do
echo -n "$count "
done

А вот вывод этого цикла:

10 9 8 7 6 5 4 3 2 1

В Bash && обозначает логическое И, в то время как || представляет логическое ИЛИ.

С помощью операторов If мы также можем определить Else if. Один из таких примеров показан ниже:

#!/bin/bash
echo "Enter a valid number"
read n
if [ $n -eq 101 ];
then
echo "This is first number"
elif [ $n -eq 510 ];
then
echo " This is second number "
elif [ $n -eq 999 ];
then
echo " This is third number "
else
echo "No numbers over here"
fi

А теперь похожий пример, но с оператором case:

#!/bin/bash
echo " Enter a valid number"
read n
case $n in
101)
Echo " This is the first number " ;;
510)
echo " This is the second number " ;;
999)
echo " This is the third number " ;;
*)
echo " No numbers over here " ;;
esac

В стейтментах case ;; означает конец case.

Итоги

На этом мы завершаем наш обзор основных функций bash. Bash-скрипты — действительно мощный инструмент, и его легко освоить. Это руководство должно стать для вас отправной точкой  для изучения возможностей и потенциала Bash. Удачи!

Author
Автор

Olha L.

Ольга вже близько восьми років працює менеджером у сфері IT, три з яких вона займається SEO. Написання технічних завдань та інструкцій — один з її основних обов'язків. Її хобі — дізнаватися щось нове і створювати цікаві та корисні статті про сучасні технології, веброзробку, мови програмування, пошукову оптимізацію сайтів та багато іншого.