Sådan skriver og bruger du brugerdefinerede skalfunktioner og biblioteker


I Linux hjælper shell-scripts os på så mange forskellige måder, herunder udførelse eller endda automatisering af bestemte systemadministrationsopgaver, oprettelse af enkle kommandolinjeværktøjer og mange flere.

I denne vejledning viser vi nye Linux-brugere, hvor de pålideligt kan gemme brugerdefinerede shell-scripts, forklare, hvordan man skriver tilpassede shell-funktioner og -biblioteker, bruge funktioner fra biblioteker i andre scripts.

Hvor skal man opbevare shell-scripts

For at køre dine scripts uden at skrive en fuld/absolut sti, skal de gemmes i et af telefonbøgerne i $ PATH-miljøvariablen.

For at kontrollere din $ PATH skal du udstede kommandoen nedenfor:

$ echo $PATH

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

Normalt, hvis biblioteksbakken findes i et brugernes hjemmekatalog, inkluderes den automatisk i hans/hendes $ PATH. Du kan gemme dine shell-scripts her.

Opret derfor bin-biblioteket (som også kan gemme Perl-, Awk- eller Python-scripts eller andre programmer):

$ mkdir ~/bin

Opret derefter et bibliotek kaldet lib (forkortelse af biblioteker), hvor du opbevarer dine egne biblioteker. Du kan også gemme biblioteker til andre sprog som C, Python og så videre. Under det skal du oprette en anden mappe kaldet sh; dette vil især gemme dig shell-biblioteker:

$ mkdir -p ~/lib/sh 

Opret dine egne skalfunktioner og biblioteker

En shell-funktion er en gruppe kommandoer, der udfører en særlig opgave i et script. De fungerer på samme måde som procedurer, underrutiner og funktioner på andre programmeringssprog.

Syntaksen for at skrive en funktion er:

function_name() { list of commands }

For eksempel kan du skrive en funktion i et script for at vise datoen som følger:

showDATE() {date;}

Hver gang du vil vise datoen, skal du blot påkalde funktionen ovenfor ved hjælp af dens navn:

$ showDATE

Et shell-bibliotek er simpelthen et shell-script, men du kan skrive et bibliotek for kun at gemme dine funktioner, som du senere kan ringe til fra andre shell-scripts.

Nedenfor er et eksempel på et bibliotek kaldet libMYFUNCS.sh i min ~/lib/sh-bibliotek med flere eksempler på funktioner:

#!/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
}

Gem filen, og gør scriptet eksekverbart.

Sådan påberåbes funktioner fra et bibliotek

For at bruge en funktion i en lib skal du først og fremmest inkludere lib i shell-scriptet, hvor funktionen vil blive brugt, i nedenstående form:

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

Så du vil bruge funktionen printUSERDETS fra lib ~/lib/sh/libMYFUNCS.sh i et andet script som vist nedenfor.

Du behøver ikke at skrive en anden kode i dette script for at udskrive en bestemt brugers detaljer, bare ring til en eksisterende funktion.

Åbn en ny fil med navnet test.sh:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

Gem det, gør derefter scriptet eksekverbart og kør det:

$ chmod 755 test.sh
$ ./test.sh 

I denne artikel viste vi dig, hvor du skal gemme shell-scripts pålideligt, hvordan du skriver dine egne shell-funktioner og biblioteker, påberåbe sig funktioner fra biblioteker i normale shell-scripts.

Dernæst vil vi forklare en ligefrem måde at konfigurere Vim på som en IDE til Bash-scripting. Indtil da skal du altid være forbundet med TecMint og også dele dine tanker om denne guide via feedbackformularen nedenfor.