Zoeken op website

Hoe u aangepaste shell-functies en bibliotheken schrijft en gebruikt


In Linux helpen shellscripts ons op zoveel verschillende manieren, waaronder het uitvoeren of zelfs automatiseren van bepaalde systeembeheertaken, het maken van eenvoudige opdrachtregelhulpmiddelen en nog veel meer.

In deze handleiding laten we nieuwe Linux-gebruikers zien waar ze op betrouwbare wijze aangepaste shell-scripts kunnen opslaan, leggen we uit hoe ze aangepaste shell-functies en -bibliotheken kunnen schrijven en kunnen we functies uit bibliotheken in andere scripts gebruiken.

Waar Shell-scripts kunnen worden opgeslagen

Om uw scripts uit te voeren zonder een volledig/absoluut pad te typen, moeten ze worden opgeslagen in een van de mappen in de omgevingsvariabele ` PATH.

Om uw ` PATH te controleren, voert u de onderstaande opdracht uit:

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Normaal gesproken, als de map bin bestaat in de thuismap van een gebruiker, wordt deze automatisch opgenomen in zijn/haar ` PATH. Hier kunt u uw shellscripts opslaan.

Maak daarom de map bin aan (die ook Perl-, Awk- of Python-scripts of andere programma's kan opslaan):

mkdir ~/bin

Maak vervolgens een map met de naam lib (afkorting van bibliotheken) waarin u uw eigen bibliotheken bewaart. Je kunt er ook bibliotheken voor andere talen in bewaren, zoals C, Python enzovoort. Maak daaronder nog een map met de naam sh; dit zal met name je shell-bibliotheken opslaan:

mkdir -p ~/lib/sh 

Creëer uw eigen shell-functies en bibliotheken

Een shellfunctie is een groep opdrachten die een speciale taak in een script uitvoeren. Ze werken op dezelfde manier als procedures, subroutines en functies in andere programmeertalen.

De syntaxis voor het schrijven van een functie is:

function_name() { list of commands }

U kunt bijvoorbeeld als volgt een functie in een script schrijven om de datum weer te geven:

showDATE() {date;}

Elke keer dat u datum wilt weergeven, roept u eenvoudigweg de bovenstaande functie op met de naam ervan:

showDATE

Een shellbibliotheek is eenvoudigweg een shellscript. U kunt echter een bibliotheek schrijven waarin u alleen uw functies opslaat die u later vanuit andere shellscripts kunt aanroepen.

Hieronder staat een voorbeeld van een bibliotheek genaamd libMYFUNCS.sh in mijn map ~/lib/sh met meer voorbeelden van functies:

#!/bin/bash 

#Function to clearly list directories in PATH 
showPATH() { 
        oldifs="$IFS"   #store old internal field separator
        IFS=:              #specify a new internal field separator
        for DIR in $PATH ;  do echo $DIR ;  done
        IFS="$oldifs"    #restore old internal field separator
}

#Function to show logged user
showUSERS() {
        echo -e “Below are the user logged on the system:\n”
        w
}

#Print a user’s details 
printUSERDETS() {
        oldifs="$IFS"    #store old internal field separator
        IFS=:                 #specify a new internal field separator
        read -p "Enter user name to be searched:" uname   #read username
        echo ""
       #read and store from a here string values into variables using : as  a  field delimiter
    read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep   "^$uname")"
       #print out captured values
        echo  -e "Username is            : $username\n"
        echo  -e "User's ID                 : $uid\n"
        echo  -e "User's GID              : $gid\n"
        echo  -e "User's Comments    : $comments\n"
        echo  -e "User's Home Dir     : $homedir\n"
        echo  -e "User's Shell             : $shell\n"
        IFS="$oldifs"         #store old internal field separator
}

Sla het bestand op en maak het script uitvoerbaar.

Hoe u functies uit een bibliotheek kunt oproepen

Om een functie in een lib te gebruiken, moet je eerst de lib opnemen in het shellscript waarin de functie zal worden gebruikt, in de onderstaande vorm:

./path/to/lib
OR
source /path/to/lib

U zou dus de functie printUSERDETS uit de lib ~/lib/sh/libMYFUNCS.sh in een ander script gebruiken, zoals hieronder weergegeven.

U hoeft in dit script geen nieuwe code te schrijven om de gegevens van een bepaalde gebruiker af te drukken; u kunt eenvoudigweg een bestaande functie aanroepen.

Open een nieuw bestand met de naam test.sh:

#!/bin/bash 

#include lib
.  ~/lib/sh/libMYFUNCS.sh

#use function from lib
printUSERDETS

#exit script
exit 0

Sla het op, maak het script uitvoerbaar en voer het uit:

chmod 755 test.sh
./test.sh 

In dit artikel hebben we u laten zien waar u shell-scripts betrouwbaar kunt opslaan, hoe u uw eigen shell-functies en -bibliotheken kunt schrijven en hoe u functies uit bibliotheken in normale shell-scripts kunt aanroepen.

Vervolgens zullen we een eenvoudige manier uitleggen om Vim te configureren als een IDE voor Bash-scripting. Blijf tot die tijd altijd verbonden met TecMint en deel ook uw mening over deze handleiding via het onderstaande feedbackformulier.