Omörite gabyk funksiýalaryny we kitaphanalaryny nädip ýazmaly we ulanmaly


Linux-da gabyk skriptleri bize dürli ulgam usullaryny ýerine ýetirmek ýa-da awtomatlaşdyrmak, ýönekeý buýruk setir gurallaryny döretmek we başga-da köp dürli kömek edýär.

Bu gollanmada, ýörite Linux skriptlerini ygtybarly saklamaly, ýörite gabyk funksiýalaryny we kitaphanalary nädip ýazmalydygyny, beýleki skriptlerdäki kitaphanalardan funksiýalary nädip ulanmalydygyny düşündirjek täze Linux ulanyjylaryny görkezeris.

Gabyk skriptlerini nirede saklamaly

Ripazgylaryňyzy doly/mutlak ýol ýazmazdan işletmek üçin, PATH gurşaw üýtgeýjisindäki kataloglaryň birinde saklanmalydyr.

PATH-yňyzy barlamak üçin aşakdaky buýrugy berýär:

$ echo $PATH

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

Adatça, ulanyjylaryň öý bukjasynda katalog binasy bar bolsa, awtomatiki usulda PATH-a goşulýar. Gabyk skriptleriňizi şu ýerde saklap bilersiňiz.

Şonuň üçin bin bukjasyny dörediň (Perl, Awk ýa-da Python skriptlerini ýa-da başga programmalary hem saklap biler):

$ mkdir ~/bin

Ondan soň, öz kitaphanalaryňyzy saklar ýaly lib (kitaphanalar üçin gysga) atly katalog dörediň. Şeýle hem, C, Python we ş.m. ýaly beýleki diller üçin kitaphanalary saklap bilersiňiz. Onuň aşagynda sh atly başga bir katalog dörediň; bu esasanam size gabyk kitaphanalaryny saklar:

$ mkdir -p ~/lib/sh 

Öz gabyk funksiýalaryňyzy we kitaphanalaryňyzy dörediň

Gabyk funksiýasy, skriptde aýratyn bir işi ýerine ýetirýän buýruklar toparydyr. Beýleki programmirleme dillerindäki proseduralara, subroutinalara we funksiýalara meňzeş işleýärler.

Funksiýa ýazmagyň sintaksisidir:

function_name() { list of commands }

Mysal üçin, senäni aşakdaky ýaly görkezmek üçin skriptde bir funksiýa ýazyp bilersiňiz:

showDATE() {date;}

Her gezek senäni görkezmek isläniňizde, adyny ulanyp ýokardaky funksiýany çagyryň:

$ showDATE

Gabyk kitaphanasy diňe bir gabyk skriptidir, ýöne diňe beýleki gabyk skriptlerinden jaň edip boljak funksiýalaryňyzy saklamak üçin kitaphana ýazyp bilersiňiz.

Aşakda has köp funksiýa mysallary bolan ~/lib/sh katalogymda libMYFUNCS.sh atly kitaphananyň mysaly bar:

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

Faýly ýazdyryň we skripti ýerine ýetirip bilersiňiz.

Kitaphanadan funksiýalary nädip çagyrmaly

Lib-de bir funksiýany ulanmak üçin ilki bilen libiň aşakdaky görnüşde funksiýanyň ulanyljak gabyk skriptine girizilmegi zerur:

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

Şeýlelik bilen, lib ~/lib/sh/libMYFUNCS.sh-den printUSERDETS funksiýasyny aşakda görkezilişi ýaly başga bir skriptde ulanarsyňyz.

Belli bir ulanyjynyň jikme-jikliklerini çap etmek üçin bu skriptde başga bir kod ýazmak hökman däl, diňe bar bolan funksiýa jaň ediň.

Test.sh ady bilen täze faýl açyň:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

Saklaň, soňra skripti ýerine ýetirip, işlediň:

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

Bu makalada, gabyk skriptlerini nirede ygtybarly saklamalydygyny, öz gabyk funksiýalaryňyzy we kitaphanalaryňyzy nädip ýazmalydygyny, adaty gabyk skriptlerinde kitaphanalardan funksiýalary ulanmagyňyzy görkezdik.

Indiki, Vim-i Baş skripti üçin IDE hökmünde düzmegiň göni öňe gidiş usulyny düşündireris. Oňa çenli hemişe TecMint bilen baglanyşykda boluň we aşakdaky gollanma formasy arkaly bu gollanma baradaky pikirleriňizi paýlaşyň.