Как да използвам функциите в 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   josea каза той

    Здравейте,
    много интересно и много ясно.
    Само бележка; на ред 68 пред променливата EXIT_BAD липсва $.
    Ще продължа да се уча със сигурност с вашите статии.