Unsaon Pagsulat ug Paggamit sa Custom Shell Functions ug Libraries


Sa Linux, ang mga script sa shell makatabang kanato sa daghang lain-laing mga paagi lakip na ang paghimo o bisan ang pag-automate sa pipila ka mga buluhaton sa pagdumala sa sistema, paghimo og yano nga mga himan sa command line ug daghan pa.

Sa kini nga giya, ipakita namon ang mga bag-ong tiggamit sa Linux kung diin kasaligan nga magtipig sa mga custom nga script sa shell, ipasabut kung giunsa pagsulat ang naandan nga mga function sa shell ug mga librarya, gamita ang mga gimbuhaton gikan sa mga librarya sa ubang mga script.

Kung asa ibutang ang mga Shell Script

Aron mapadagan ang imong mga script nga wala mag-type sa usa ka bug-os/hingpit nga agianan, kini kinahanglan nga tipigan sa usa sa mga direktoryo sa PATH environment variable.

Aron masusi ang imong PATH, i-isyu ang sugo sa ubos:

$ echo $PATH

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

Kasagaran, kung ang directory bin naa sa usa ka direktoryo sa balay sa mga tiggamit, awtomatiko kini nga gilakip sa iyang PATH. Mahimo nimong tipigan ang imong mga script sa shell dinhi.

Busa, paghimo sa direktoryo sa bin (nga mahimo usab nga magtipig sa mga script sa Perl, Awk o Python o bisan unsang ubang mga programa):

$ mkdir ~/bin

Sunod, paghimo og direktoryo nga gitawag og lib (mubo alang sa mga librarya) diin imong tipigan ang imong kaugalingong mga librarya. Mahimo usab nimong tipigan ang mga librarya alang sa ubang mga pinulongan sama sa C, Python ug uban pa, niini. Ubos niini, paghimo og laing direktoryo nga gitawag og sh; kini labi nga magtipig kanimo mga librarya sa shell:

$ mkdir -p ~/lib/sh 

Paghimo sa Imong Kaugalingong Shell Function ug Library

Ang function sa shell usa ka grupo sa mga sugo nga naghimo sa usa ka espesyal nga buluhaton sa usa ka script. Nagtrabaho sila parehas sa mga pamaagi, subroutine ug mga gimbuhaton sa ubang mga programming language.

Ang syntax sa pagsulat sa usa ka function mao ang:

function_name() { list of commands }

Pananglitan, mahimo kang magsulat og function sa usa ka script aron ipakita ang petsa sama sa mosunod:

showDATE() {date;}

Matag higayon nga gusto nimong ipakita ang petsa, gamita lang ang function sa ibabaw gamit ang ngalan niini:

$ showDATE

Ang shell library kay usa lang ka shell script, pero, pwede ka magsulat ug library para lang tipigan ang imong mga function nga pwede nimo tawagan sa ulahi gikan sa ubang shell scripts.

Sa ubos usa ka pananglitan sa usa ka librarya nga gitawag libMYFUNCS.sh sa akong ~/lib/sh nga direktoryo nga adunay daghang mga pananglitan sa mga gimbuhaton:

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

I-save ang file ug himoa nga executable ang script.

Giunsa Pagtawag ang mga Function Gikan sa usa ka Library

Aron magamit ang usa ka function sa usa ka lib, kinahanglan nimo una sa tanan nga ilakip ang lib sa script sa shell kung diin gamiton ang function, sa porma sa ubos:

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

Busa imong gamiton ang function printUSERDETS gikan sa lib ~/lib/sh/libMYFUNCS.sh sa laing script sama sa gipakita sa ubos.

Dili nimo kinahanglan nga magsulat og lain nga code niini nga script aron maimprinta ang mga detalye sa usa ka partikular nga user, tawagan lang ang usa ka kasamtangan nga function.

Ablihi ang usa ka bag-ong file nga adunay ngalan nga test.sh:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

I-save kini, dayon himoa nga ma-executable ang script ug padagana kini:

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

Sa kini nga artikulo, gipakita namon kanimo kung asa masaligan ang pagtipig sa mga script sa shell, kung giunsa pagsulat ang imong kaugalingon nga mga function sa shell ug mga librarya, paghangyo sa mga gimbuhaton gikan sa mga librarya sa mga normal nga script sa shell.

Sunod, ipasabut namon ang usa ka tul-id nga paagi sa pag-configure sa Vim ingon usa ka IDE alang sa pag-script sa Bash. Hangtud niana, kanunay magpabilin nga konektado sa TecMint ug ipaambit usab ang imong mga hunahuna bahin sa kini nga giya pinaagi sa porma sa feedback sa ubos.