В этой лекции мы поговорим о функциях. Мы используем функции для организации нашего кода в блоки,
которые впоследствии можно будет повторно использовать. Это полезно, потому что нам нужна лучшая читаемость нашего кода, модульность,
а также экономия времени при разработке и запуске кода.
Функции позволяют нам создавать блоки кода, которые можно легко выполнять много раз, без необходимости
постоянно переписывать или копировать и вставлять этот блок кода. Мы создаем функцию, которая выполняет этот блок
кода, и после этого вызываем функцию.
Обратите внимание, что по сравнению с большинством языков программирования функции bash каким-то образом ограничены.
Я расскажу об основах функций bash и покажу вам, как использовать их в ваших скриптах.
Создать функцию довольно просто.
Существует два разных формата для объявления функции, поэтому функция
(это ключевое слово) и имя функции, скажем print_something, пара круглых скобок и
пара фигурных скобок.
Команды, заключенные в фигурные скобки, представляют собой тело функции и выполняются, когда функция
вызывается, например,
«Я - простая функция».
Мы также можем начать определение функции, присвоив ей имя, например display_something
и echo «Hello functions».
Любой из вышеперечисленных методов указания функции допустим; оба работают одинаково, и у одного нет
преимуществ или недостатков перед другим.
На самом деле это просто личное предпочтение.
Чтобы выполнить тело функции, я должен ее вызвать. Чтобы вызвать функцию, напишите ее имя без
скобок, например print_something. Я только что вызвал первую функцию или display_something
. Была вызвана вторая функция. Давай проверим!
И функции распечатали эти две строки. В других языках программирования
аргументы передаются функции, перечисленной в круглых скобках. В Bash
круглые скобки используются только для украшения, и вы никогда ничего не помещаете в них.
Если вы хотите, чтобы функция обрабатывала некоторые данные, вы отправляете данные функции аналогично
передаче аргументов командной строки сценарию.
Используйте $ 1 для первого аргумента функции, $ 2 для второго и так далее.
Давайте создадим функцию, которая создаст 2 файла, а затем изменим их права доступа.
Имена файлов будут переданы в качестве аргументов функции, поэтому create_files, круглые скобки и фигурные
скобки.
Я распечатываю сообщение для пользователя «Создание $ 1» первым аргументом. Здесь
D $ 1 не является первым аргументом сценария, но это первый аргумент функции, указанной
при вызове функции и касании $ 1.
Я также меняю ее разрешения chmod 400 $ 1 и создаю второй файл.
touch $ 2 chmod 600 $ 2
И я вызываю функцию с двумя аргументами, которые являются файлами, которые будут созданы: create_
files, aa.txt bb.txt Я сохраняю
сценарий и запускаю его в другом терминале.
Проверим, созданы ли файлы!
И смотрите, это первый файл, а это второй.
Поговорим о возвращаемом значении. В большинстве других языков программирования есть концепция возвращаемого значения
функции.
Однако функции bash не позволяют нам возвращать значение. При этом с использованием ключевого слова return мы
фактически устанавливаем статус последней команды, выполненной внутри функции.
Помните, что переменная доллар и вопросительный знак содержат статус возврата ранее
выполненной команды или функции. Обычно нулевой статус возврата указывает, что все прошло успешно,
а ненулевое значение указывает, что произошла ошибка.
Например, внутри этой функции я пишу return 10 и после вызова функции хочу
распечатать статус последней выполненной команды.
Так эхо $? и он распечатает 10.
Если вы хотите получить реальное возвращаемое значение, как в любом другом языке программирования, вы можете попробовать подстановку команд.
Например, следующая функция вернет количество строк в файле, содержащем определенное
строковое значение.
Строка будет первым аргументом функции,
поэтому $ 1 внутри функции, а файл будет вторым аргументом функции,
поэтому внутри него будет $ 2; function
(на этот раз я использую ключевое слово function) lines_in_file
и команду grep-c, она распечатает только количество вхождений $ 1,
$ 1 - это строка, найденная внутри $ 2, которая является файлом. И я называю это так: n =
- и подстановка команд (имя функции, потому что я ее вызываю) lines_in_file
первый аргумент, скажем, "usb" строка и второй аргумент, например файл журнала ,
var / log / dmesg Значит, переменная n будет хранить, сколько раз строка usb встречается в этом файле.
echo $ n
И у меня есть значение 22; если я запустил команду в терминале, я получу то же значение.
Мы сделаем небольшой перерыв, и в следующей лекции мы поговорим об области видимости переменных в функциях.