Как использовать функции в Bash с помощью этого POSIX-совместимого компьютерного языка, основанного на оболочке Unix. Как язык, его функция состоит в интерпретации команд Linux, что позволяет нам автоматизировать наши повторяющиеся процессы, а также создавать команды из команд операционной системы. В этой статье мы рассмотрим как использовать функции в bash. Рекомендую прочитать статью как создавать свои собственные скрипты с помощью bash.
В предлагаемом нами скрипте мы используем язык Bash для поиска файла, зная его имя. Для этого воспользуемся найти команду но с помощью функций, ранее определенных в указанном скрипте. Вы должны принять во внимание особенность или ограничение Bash, которое присутствует не во всех языках: чтобы вызвать функцию, она должна быть определена ранее.
Определить функции
Есть два способа определения функций: с объявлением функции или без него:
function nombre_funcion () { # codigo }
или этот другой, который я использую, как вы увидите позже.
nombre_funcion () { # codigo }
также Bash также предоставляет метод для передачи параметров и возврата результатов. что мы увидим в следующих статьях.
#!/usr/bin/env bash # ~/.bin/encontrar # encuentra archivos a partir de la descripción de su nombre en un directorio específico # # Por Pedro Ruiz Hidalgo # version 1.0.0 # Copyright © enero 2017 # # EXIT_OK=0 EXIT_BAD=66 PATRON=$1 DIRECTORIO=$2 autor () { echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n" } ayuda () { echo -e "\nencontrar [PATRON] [DIRECTORIO]\n" } noparams () { echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n" read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r if [[ $REPLY =~ ^[Ss]$ ]]; then echo "" ayuda fi } nodir () { echo -e "\nDirectorio no Existe\n" } if [[ $PATRON == "-h" ]]; then ayuda exit $EXIT_OK fi if [[ $PATRON == "-a" ]]; then autor exit $EXIT_OK fi if [ $# -lt 2 ]; then noparams else if [ -d $DIRECTORIO ]; then echo "" find $DIRECTORIO -name $PATRON* echo "" exit $? else nodir exit EXIT_BAD fi fi
Анализ скрипта
Определения
Для bash каждый успешно завершенный процесс должен иметь код "0" в качестве сигнала.. Строки 12 и 13 определяют обрабатываемые коды ошибок. EXIT_OK на успех y EXIT_BAD для выхода при ошибке.
В строках 15 и 16 переменным PATTERN и DIRECTORY присваиваются первый ($ 1) и второй ($ 2) параметры, которые появляются в командной строке после имени сценария, как мы увидим позже, когда мы его выполним.
En la 18 онлайн мы создаем нашу первую функцию. Функция с названием «автор» отображает авторство сценария когда мы вызываем его с аргументом «-a», как вы можете видеть в if в строках 50 ~ 54. Аргумент "-и" из строки 23 позволяет показать последовательность «следующей строки» в кодировке «\ n».
Вызов noparams (строки 28 ~ 37) отвечает за управление событиями, которые должны произойти, когда скрипт вызывается без каких-либо параметров. Мы показываем, правильно заключенное между кодами новой строки, сообщение, указывающее, что сценарий должен быть выполнен с двумя параметрами, затем показывается опция (строка 31) для использования читать Он предлагает вам нажать «S» или «s», если вы хотите показать справку. В строке 32 мы буквально говорим: 'если ответ (который приходит к нам в переменной $ ОТВЕТИТЬ) содержит любой из символов верхнего или нижнего регистра ', затем (строка 33) показывает пустую строку (строка 34) и выполняет функцию справки (строки 23 ~ 26).
Функция nodir (строки 39 ~ 42) будет выполнена, когда мы обнаружим, что каталог, в котором выполняется попытка поиска, не существует.
Функциональность
При этом у нас уже есть определены все необходимые функции для выполнения нашей программы, которая фактически запускается в строке 44, проверяя, является ли первый из параметров, которые получает сценарий, "-h", если это правда, выполнить функцию справки и выходы, указывающие на нормальное завершение.
Если ШАБЛОН (первый параметр, как описано в строке 15) - «-a», автор отображается в соответствии с тем же механизмом, который описан в предыдущем абзаце для параметра «-h».
На линии 56 контролируется, что мы не получили менее двух параметровВ этом случае выполняется функция noparams, тогда в if строки 60 находим если каталог, в котором мы хотим выполнить поиск, существует, если он существует, отображается пустая строка, найти команду с адресом каталога, в котором мы хотим выполнить поиск, за которым следует шаблон (начало имени файла, который мы ищем), новая пустая строка и использование выход $? мы доверяем вывод нашего скрипта результату, полученному с помощью find. В случае, если условие существование каталога неверно (строка 67) мы вызываем функцию nodir и мы выходим, указывая на ненормальное завершение.
Выполнение и тестирование
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En следующие статьи о Баше мы увидим механизмы для использовать параметры в функцияхМы также увидим, как сформулировать возвращаемые данные из них.
Я надеюсь и надеюсь, что этот пост был для вас полезен.
Привет,
очень интересно и очень понятно.
Просто примечание; $ отсутствует в строке 68 перед переменной EXIT_BAD.
Обязательно буду продолжать узнавать по вашим статьям.