Как использовать функции в Bash

Как использовать функции в 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 следующие статьи о Баше мы увидим механизмы для использовать параметры в функцияхМы также увидим, как сформулировать возвращаемые данные из них.

Я надеюсь и надеюсь, что этот пост был для вас полезен.


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Комментарий, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован.

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   josea сказал

    Привет,
    очень интересно и очень понятно.
    Просто примечание; $ отсутствует в строке 68 перед переменной EXIT_BAD.
    Обязательно буду продолжать узнавать по вашим статьям.