Как использовать функции в 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.
    Обязательно буду продолжать узнавать по вашим статьям.