Hoe functies in Bash te gebruiken met behulp van deze Unix-shell-gebaseerde, POSIX-compatibele computertaal. Als taal bestaat zijn functie uit de interpretatie van Linux-commando's, waardoor we onze repetitieve processen kunnen automatiseren en ook commando's kunnen creëren vanuit de commando's van het besturingssysteem. In dit artikel zullen we bespreken hoe functies te gebruiken in bash​ Ik raad aan om het artikel te lezen hoe maak je eigen scripts met bash.
In het script dat we voorstellen, gebruiken we de Bash-taal om naar een bestand te zoeken, waarbij we de naam kennen. Hiervoor gebruiken we de vind commando maar met behulp van de functies die eerder in het genoemde script zijn gedefinieerd. U moet rekening houden met een eigenaardigheid of beperking van Bash die niet in alle talen aanwezig is: om een ​​functie aan te roepen, moet deze worden gedefinieerd eerder.
Definieer functies
Er zijn twee manieren om functies te definiëren: met of zonder de functiedeclaratie:
function nombre_funcion ()
{
# codigo
}
of deze andere, die ik gebruik, zoals je later zult zien.
nombre_funcion ()
{
# codigo
}
ook Bash biedt ook een methode om parameters door te geven en resultaten te retourneren. die we in toekomstige artikelen zullen zien.
#!/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
Script analyse
definities
Voor bash elk succesvol afgerond proces moet de code "0" als signaal hebben​ Regels 12 en 13 definiëren de afgehandelde foutcodes EXIT_OK voor succes y EXIT_BAD voor afsluiten bij mislukking.
In regel 15 en 16 krijgen de variabelen PATTERN en DIRECTORY de eerste ($ 1) en tweede ($ 2) parameters toegewezen die op de opdrachtregel verschijnen na de naam van het script, zoals we later zullen zien wanneer we het uitvoeren.
In de regel 18 we creëren onze eerste functie. De functie genaamd «auteur» geeft de script auteurschap wanneer we het noemen met het "-a" argument zoals je kunt zien in de if op regels 50 ~ 54. Het argument "-en" vanaf regel 23 maakt het mogelijk om de volgorde van «volgende regel» weer te geven door «\ n» te coderen.
De aanroep naar noparams (regels 28 ~ 37) is verantwoordelijk voor het beheer van de gebeurtenissen die moeten plaatsvinden wanneer het script wordt aangeroepen zonder parameters. We tonen, correct ingesloten tussen nieuwe regelcodes, een bericht dat aangeeft dat het script moet worden uitgevoerd met twee parameters, waarna een optie (regel 31) wordt getoond om te gebruiken dit artikel lezen Het vraagt ​​u om op "S" of "s" te drukken voor het geval u hulp wilt tonen. In regel 32 zeggen we letterlijk: 'als het antwoord (dat komt bij ons in de variabele $ ANTWOORD) bevat elk van de tekens die hoofdletters of kleine letters bevatten ', dan toont (regel 33) een lege regel (regel 34) en voert de helpfunctie uit (regel 23 ~ 26).
De nodir-functie (regels 39 ~ 42) wordt uitgevoerd wanneer we detecteren dat de directory waarin de zoekopdracht wordt uitgevoerd, niet bestaat.
Functionaliteit
Hiermee hebben we al definieerde alle noodzakelijke functies om ons programma uit te voeren, dat eigenlijk begint op regel 44, te controleren of de eerste van de parameters die het script ontvangt "-h" is, als het waar is, voer dan de help-functie uit en uitgangen die een normale beëindiging aangeven.
Als PATROON (eerste parameter zoals beschreven in regel 15) "-a" is, wordt de auteur weergegeven volgens hetzelfde mechanisme als uitgelegd in de vorige paragraaf voor de "-h" optie.
Op de lijn 56 wordt gecontroleerd dat we niet minder dan twee parameters hebben ontvangenIn dit geval wordt de functie noparams uitgevoerd, en in de if van regel 60 komen we erachter als de directory waarin we willen zoeken bestaat, indien aanwezig, wordt een lege regel getoond, de vind commando met het adres van de directory waarin we de zoekopdracht willen uitvoeren gevolgd door het patroon (begin van de naam van het bestand dat we zoeken) een nieuwe lege regel en gebruik verlaat $? we vertrouwen de output van ons script toe aan het resultaat geproduceerd door find. In het geval de conditie van directory-bestaan ​​is vals (regel 67) bellen we naar de nodir-functie en we sluiten af ​​wat een abnormale beëindiging aangeeft.
Uitvoering en testen
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En volgende artikelen over Bash we zullen de mechanismen zien voor gebruik parameters in functiesWe zullen ook zien hoe articuleren retourgegevens daarvan.
Ik hoop en hoop dat dit bericht nuttig voor je is geweest.