Cum să scrieți și să utilizați funcții și biblioteci personalizate Shell


În Linux, scripturile shell ne ajută în atât de multe moduri diferite, inclusiv efectuarea sau chiar automatizarea anumitor sarcini de administrare a sistemului, crearea de instrumente simple de linie de comandă și multe altele.

În acest ghid, vom arăta noilor utilizatori Linux unde să stocheze în mod fiabil scripturile shell personalizate, vom explica cum să scrieți funcții și biblioteci shell personalizate, cum să folosiți funcțiile din biblioteci în alte script-uri.

Unde să stocați scripturile Shell

Pentru a rula scripturile fără a introduce o cale completă/absolută, acestea trebuie să fie stocate într-unul dintre directoarele din variabila de mediu ` PATH.

Pentru a vă verifica ` PATH, lansați comanda de mai jos:

echo $PATH

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

În mod normal, dacă directorul bin există într-un director principal al utilizatorilor, acesta este inclus automat în ` PATH. Vă puteți stoca scripturile shell aici.

Prin urmare, creați directorul bin (care poate stoca și scripturi Perl, Awk sau Python sau orice alte programe):

mkdir ~/bin

Apoi, creați un director numit lib (prescurtare de la biblioteci) în care vă veți păstra propriile biblioteci. De asemenea, puteți păstra biblioteci pentru alte limbi, cum ar fi C, Python și așa mai departe, în el. Sub acesta, creați un alt director numit sh; aceasta vă va stoca în special bibliotecile shell:

mkdir -p ~/lib/sh 

Creați-vă propriile funcții Shell și biblioteci

O funcție shell este un grup de comenzi care efectuează o sarcină specială într-un script. Ele funcționează în mod similar cu procedurile, subrutinele și funcțiile din alte limbaje de programare.

Sintaxa pentru scrierea unei funcții este:

function_name() { list of commands }

De exemplu, puteți scrie o funcție într-un script pentru a afișa data după cum urmează:

showDATE() {date;}

De fiecare dată când doriți să afișați data, pur și simplu invocați funcția de mai sus folosind numele acesteia:

showDATE

O bibliotecă shell este pur și simplu un script shell, cu toate acestea, puteți scrie o bibliotecă pentru a stoca doar funcțiile pe care le puteți apela ulterior din alte script-uri shell.

Mai jos este un exemplu de bibliotecă numită libMYFUNCS.sh în directorul meu ~/lib/sh, cu mai multe exemple de funcții:

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

Salvați fișierul și faceți scriptul executabil.

Cum să invocați funcții dintr-o bibliotecă

Pentru a utiliza o funcție într-o lib, trebuie să includeți în primul rând lib în scriptul shell în care va fi utilizată funcția, în forma de mai jos:

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

Deci, ați folosi funcția printUSERDETS din lib ~/lib/sh/libMYFUNCS.sh într-un alt script, așa cum se arată mai jos.

Nu trebuie să scrieți alt cod în acest script pentru a imprima detaliile unui anumit utilizator, pur și simplu apelați o funcție existentă.

Deschideți un fișier nou cu numele test.sh:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

Salvați-l, apoi faceți scriptul executabil și rulați-l:

chmod 755 test.sh
./test.sh 

În acest articol, v-am arătat unde să stocați în mod fiabil scripturile shell, cum să scrieți propriile funcții și biblioteci shell, cum să invocați funcții din biblioteci în scripturile shell normale.

În continuare, vom explica o modalitate simplă de a configura Vim ca IDE pentru scripting Bash. Până atunci, rămâneți mereu conectat la TecMint și, de asemenea, împărtășiți-vă părerile despre acest ghid prin intermediul formularului de feedback de mai jos.