Чӣ тавр истифода бурдани функсияҳо дар bash

Тарзи истифодаи функсияҳо дар Bash бо истифода аз ин забони компютерии дар асоси ниҳонӣ, ба 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


Таҳлили скрипт

Таърифҳо

Барои bash ҳар як раванди бомуваффақият анҷомёфта бояд рамзи "0" -ро ҳамчун сигнал дошта бошад. Дар сатрҳои 12 ва 13 рамзҳои хатогии коркардшуда муайян карда мешаванд EXIT_OK барои муваффақият y EXIT_BAD барои баромадан дар нокомӣ.

Дар сатрҳои 15 ва 16 ба тағирёбандаҳои PATTERN ва DIRECTORY параметрҳои якум ($ 1) ва дуюм ($ 2) таъин карда мешаванд, ки пас аз номи скрипт дар сатри фармон пайдо мешаванд, чунон ки мо баъдтар ҳангоми иҷрои он мебинем.

Дар он сатри 18 мо вазифаи аввалини худро меофарем. Функсия бо номи «муаллиф» намоиш медиҳад муаллифии сенария вақте ки мо онро бо далели "-а" меномем, чунон ки шумо дар сатрҳои 50 ~ 54 мебинед. Далел "ва" аз сатри 23 имкон медиҳад, ки пайдарпайии "сатри оянда" бо рамзгузории "\ n" нишон дода шавад.

Занг ба noparams (сатрҳои 28 ~ 37) масъули идоракунии ҳодисаҳое мебошад, ки ҳангоми даъват кардани скрипт бидуни ягон параметр бояд рух диҳад. Мо нишон медиҳем, ки дар байни рамзҳои сатри нав дуруст пӯшонида шудааст, паёме нишон медиҳад, ки скрипт бояд бо ду параметр иҷро карда шавад, пас варианти (сатри 31) барои истифода нишон дода мешавад хондан Он шуморо водор мекунад, ки "S" ё "s" -ро пахш кунед, агар шумо мехоҳед кӯмак нишон диҳед. Дар сатри 32 мо ба маънои аслӣ мегӯем: 'агар ҷавоб (ки дар тағирёбанда ба мо мерасад) $ ҶАВОБ) ягон аломатеро дар бар мегирад, ки ҳарфҳои калон ё хурд 'дошта бошанд, пас (сатри 33) сатри холиро нишон медиҳад (сатри 34) ва функсияи ёрирасониро иҷро мекунад (сатрҳои 23 ~ 26).

Функсияи nodir (сатрҳои 39 ~ 42) вақте иҷро карда мешавад, ки директорияе, ки дар он кӯшиши ҷустуҷӯ карда мешавад, вуҷуд надорад.

Функсияҳо

Бо ин мо аллакай дорем тамоми вазифаҳои заруриро муайян кард барои иҷрои барномаи мо, ки воқеан аз сатри 44 оғоз мешавад, санҷида, ки параметрҳои аввалини скрипт "-h" -ро мегиранд ё не, агар ин дуруст бошад, вазифаи кӯмакро иҷро кунед ва баромадҳо бо нишон додани қатъкунии муқаррарӣ.

Агар PATTERN (параметри аввал, ки дар сатри 15 тасвир шудааст) "-а" бошад, муаллиф пас аз ҳамон механизме, ки дар параграфи пешин барои опсияи "-h" шарҳ дода шудааст, нишон дода мешавад.

Дар хат 56 назорат карда мешавад, ки мо камтар аз ду параметрро нагирифтаемДар ин ҳолат, функсияи noparams иҷро карда мешавад, пас, агар дар сатри 60 пайдо кунем агар директорияе, ки мо мехоҳем онро ҷустуҷӯ кунем, вуҷуд дошта бошад, агар он вуҷуд дошта бошад, сатри холӣ нишон дода мешавад, фармонро ёбед бо суроғаи директория, ки мо мехоҳем ҷустуҷӯро анҷом диҳем ва пас аз он намуна (аввали номи файлро ҷустуҷӯ кунем) сатри нави холӣ ва бо истифода аз он баромадан $? мо баромади скрипти худро ба натиҷаи ба даст овардашуда месупорем. Дар сурати ҳолати мавҷудияти директория нодуруст аст (сатри 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.   Хосеа Диго

    Салом,
    хеле ҷолиб ва хеле возеҳ.
    Танҳо ёддошт; $ дар хати 68 дар пеши тағирёбандаи EXIT_BAD гум шудааст.
    Ман минбаъд низ бо мақолаҳои худ ҳатман меомӯзам.