Як користуватися функціями в Bash

Як користуватися функціями в Bash за допомогою цієї оболонки Unix, сумісної з POSIX, комп'ютерною мовою. Як мова, його функція складається з інтерпретації команд 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


Аналіз сценарію

Визначення

За баш кожен успішно завершений процес повинен мати в якості сигналу код "0". Рядки 12 і 13 визначають оброблені коди помилок EXIT_OK для успіху y EXIT_BAD для виходу при відмові.

У рядках 15 і 16 змінним PATTERN і DIRECTORY присвоюються перший ($ 1) і другий ($ 2) параметри, які з'являються в командному рядку після імені сценарію, як ми побачимо пізніше, коли ми його виконаємо.

В рядок 18 ми створюємо свою першу функцію. Функція під назвою «автор» відображає авторство сценарію коли ми називаємо це аргументом "-a", як ви можете бачити в if на рядках 50 ~ 54. Аргумент "-і" з рядка 23 дозволяє показати послідовність «наступного рядка» шляхом кодування «\ n».

Виклик noparams (рядки 28 ~ 37) відповідає за управління подіями, які повинні відбутися, коли скрипт викликається без будь-яких параметрів. Ми показуємо, правильно укладене між новими кодами рядків, повідомлення про те, що скрипт повинен виконуватися з двома параметрами, тоді показано варіант (рядок 31) для використання зчитування Вам буде запропоновано натиснути "S" або "s", якщо ви хочете показати допомогу. У рядку 32 ми буквально говоримо: "якщо відповідь (яка приходить до нас у змінну $ ВІДПОВІДЬ) містить будь-який із символів, що використовуються у верхньому чи нижньому регістрі ', потім (рядок 33) показує порожній рядок (рядок 34) і виконує функцію довідки (рядки 23 ~ 26).

Функція nodir (рядки 39 ~ 42) буде виконана, коли ми виявимо, що каталог, де здійснюється спроба пошуку, не існує.

Функціональність

З цим ми вже маємо визначено всі необхідні функції для запуску нашої програми, яка фактично починається з рядка 44, перевіряючи, чи першим із параметрів, які отримує скрипт, є "-h", якщо це так, виконайте функцію довідки виходи, що вказує на нормальне закінчення.

Якщо PATTERN (перший параметр, як описано в рядку 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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

      Джозея - сказав він

    Привіт
    дуже цікаво і дуже зрозуміло.
    Просто примітка; у рядку 68 перед змінною EXIT_BAD відсутній символ $.
    Я продовжуватиму напевно вивчати ваші статті.