Bash gidoiak: hasteko

Bash gidoiak: hasteko
Bash Scripts 2. zatia: begiztak
Bash scriptak, 3. zatia: komando-lerroko aukerak eta etengailuak
Bash scriptak, 4. zatia: sarrera eta irteera
Bash script-ak, 5. zatia: seinaleak, atzeko planoko zereginak, gidoien kudeaketa
Bash Scripts, 6. zatia: funtzioak eta liburutegien garapena
Bash script-ak, 7. zatia: sed eta testu-prozesatzea
Bash Scripts, 8. zatia: awk Datuak prozesatzeko lengoaia
Bash Scripts 9. zatia: Adierazpen erregularrak
Bash Scripts 10. zatia: Adibide praktikoak
Bash scriptak, 11. zatia: erabilgarritasun interaktiboen espero eta automatizazioa

Gaur bash scriptei buruz hitz egingo dugu. Hau - komando lerroko scriptak, bash shell-erako idatzia. Beste shell batzuk daude, hala nola zsh, tcsh, ksh, baina bash-en zentratuko gara. Material hau guztientzako pentsatuta dago, baldintza bakarra lan egiteko gaitasuna da komando lerroa Linux.

Bash gidoiak: hasteko

Komando-lerroko script-ak teklatutik sar daitezkeen komando bereko multzoak dira, fitxategietan bildu eta helburu komun batzuekin bateratuak. Aldi berean, taldeen lanaren emaitzek balio independentea izan dezakete edo beste taldeentzako sarrera gisa balio dezakete. Scriptak maiz egiten diren ekintzak automatizatzeko modu indartsua dira.

Bash gidoiak: hasteko

Beraz, komando-lerroari buruz hitz egiten badugu, hainbat komando aldi berean exekutatzeko aukera ematen du, puntu eta koma batekin sartuz:

pwd ; whoami

Izan ere, zure terminalean hau probatu baduzu, bi komando erabiltzen dituen zure lehen bash script-a idatzita dago jada. Honela funtzionatzen du. Lehen taldea pwd uneko lan-direktorioari buruzko informazioa bistaratzen du, ondoren komandoa whoamisaioa hasita zauden erabiltzaileari buruzko informazioa erakusten du.

Ikuspegi hau erabiliz, nahi adina komando konbina ditzakezu lerro batean, muga programara pasa daitezkeen argumentu kopuru maximoa baino ez da. Muga hau komando honekin defini dezakezu:

getconf ARG_MAX

Komando-lerroa tresna bikaina da, baina komandoak sartu behar dituzu behar dituzun bakoitzean. Zer gertatzen da fitxategi batean komando multzo bat idazten badugu eta fitxategi horri deitzen badiogu horiek exekutatzeko? Izan ere, hitz egiten ari garen fitxategiari komando lerroko script deitzen zaio.

Nola funtzionatzen duten bash scriptek

Sortu fitxategi huts bat komandoa erabiliz touch. Bere lehen lerroan, zein shell erabiliko dugun zehaztu behar duzu. Interesatzen zaigu bash, beraz, fitxategiaren lehen lerroa hau izango litzateke:

#!/bin/bash

Fitxategi honetako beste leku batzuetan, hash ikurra erabiltzen da shell-ak prozesatzen ez dituen iruzkinak adierazteko. Hala ere, lehenengo lerroa kasu berezia da, libra zeinua da eta ondoren harridura-puntua (sekuentzia honi deitzen zaio shebang) eta bidea bash, adierazi sistemari scripta berariaz sortu dela bash.

Shell komandoak lerro berri batez bereizten dira, iruzkinak libra zeinu batez bereizten dira. Hona hemen nolakoa den:

#!/bin/bash
# This is a comment
pwd
whoami

Hemen, komando-lerroan bezala, komandoak lerro batean idatzi ditzakezu, puntu eta komarekin bereiziz. Hala ere, komandoak lerro ezberdinetan idazten badituzu, fitxategia errazago irakurtzen da. Nolanahi ere, shellak prozesatu egingo ditu.

Script fitxategi batean baimenak ezartzea

Gorde fitxategia izena emanez myscript, eta bash script-a ia amaituta dago. Orain fitxategi hau exekutagarria izatea besterik ez da geratzen, bestela, exekutatzen saiatzen zarenean, errore bat aurkituko duzu Permission denied.

Bash gidoiak: hasteko
Gaizki konfiguratutako baimenekin script-fitxategi bat exekutatzen saiatzea

Egin dezagun fitxategia exekutagarria:

chmod +x ./myscript

Orain saia gaitezen exekutatzen:

./myscript

Baimenak ezarri ondoren, dena behar bezala funtzionatzen du.

Bash gidoiak: hasteko
Exekutatu bash script-a behar bezala

Mezuen irteera

Testua Linux kontsolara inprimatzeko, erabili komandoa echo. Erabili dezagun gertakari honen ezagutza eta editatu gure scripta, dagoeneko bertan dauden komandoak ateratzen dituzten datuei azalpenak gehituz:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Hona hemen eguneratutako scripta exekutatu ondoren gertatzen dena.

Bash gidoiak: hasteko
Gidoi batetik mezuak ateratzea

Orain azalpen-etiketak bistaratu ditzakegu komandoa erabiliz echo. Ez badakizu nola editatu fitxategi bat Linux tresnak erabiliz, edo aurretik komandoa ikusi ez baduzu echo, begiratu hau material.

Aldagaiak erabiltzea

Aldagaiek script fitxategi batean informazioa gordetzeko aukera ematen dute, komandoen emaitzak adibidez, beste komando batzuek erabiltzeko.

Ez dago gaizki komando indibidualak beren lanaren emaitzak gorde gabe exekutatzeko, baina ikuspegi honen aukerak oso mugatuak dira.

Bash scriptetan erabil daitezkeen bi aldagai mota daude:

  • Inguruko Aldagaiak
  • Erabiltzailearen aldagaiak

Inguruko Aldagaiak

Batzuetan, shell komandoek sistemaren datu batzuekin lan egin behar dute. Adibidez, hona hemen uneko erabiltzailearen hasierako direktorioa nola bistaratu:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Kontuan izan sistemaren aldagaia erabil dezakegula $HOME komatxo bikoitz artean, horrek ez du eragotziko sistemak antzematea. Hona hemen goiko scripta exekutatzen baduzu zer gertatzen den.

Bash gidoiak: hasteko
Script batean ingurune-aldagai bat erabiltzea

Baina zer gertatzen da dolarraren seinalea erakutsi nahi baduzu? Saia gaitezen hau:

echo "I have $1 in my pocket"

Sistemak komatxoz mugatutako kate batean dolarraren zeinua detektatuko du eta aldagai bati erreferentzia egin diogula suposatuko du. Scripta zehaztu gabeko aldagai baten balioa erakusten saiatuko da. $1. Hau ez da behar duguna. Zer egin?

Horrelako egoera batean, dolarraren ikurraren aurretik atzera-barra kontrol karakterea erabiltzeak laguntzen du:

echo "I have $1 in my pocket"

Scriptak espero dena zehatz-mehatz aterako du orain.

Bash gidoiak: hasteko
Ihes-sekuentzia bat erabiltzea dolar seinale bat ateratzeko

Erabiltzailearen aldagaiak

Inguruko aldagaiez gain, bash script-ek zure aldagaiak ezarri eta erabiltzeko aukera ematen dizute scriptean. Aldagai horiek balio bat mantentzen dute scripta amaitu arte.

Sistemaren aldagaiekin gertatzen den bezala, erabiltzaileen aldagaiak dolarraren ikurra erabiliz atzi daitezke:
TNW-CUS-FMP - gure zerbitzuetan % 10eko deskontua lortzeko promozio kodea, 7 eguneko epean aktibatzeko eskuragarri.

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Hona hemen halako script bat exekutatu ondoren zer gertatzen den.

Bash gidoiak: hasteko
Aldagai pertsonalizatuak Script-en

Aginduen ordezkapena

Bash scripten ezaugarririk erabilgarrienetako bat komandoen irteeratik informazioa ateratzeko eta aldagaiei esleitzeko gaitasuna da, eta horri esker, informazio hori script fitxategiko edozein lekutan erabil dezakezu.

Hau bi modutan egin daiteke.

  • "`" atzeko karakterearekin
  • Eraikuntzaren laguntzarekin $()

Lehen hurbilketa erabiltzean, kontuz ibili aipamen bakarra ez erabiltzeko atzera-tick baten ordez. Komandoa horrelako bi ikonotan sartu behar da:

mydir=`pwd`

Bigarren ikuspegian, gauza bera honela idazten da:

mydir=$(pwd)

Eta gidoia, azkenean, honelakoa izan daiteke:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Bere funtzionamenduan zehar, komandoaren irteera pwdaldagai batean gordeko da mydir, zeinaren edukia, komandoa erabiliz echo, kontsolara joango da.

Bash gidoiak: hasteko
Komandoaren emaitzak aldagai batean gordetzen dituen scripta

Eragiketa matematikoak

Script fitxategi batean eragiketa matematikoak egiteko, inprimakiaren eraikuntza bat erabil dezakezu $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash gidoiak: hasteko
Matematikako eragiketak gidoi batean

bada-gero kontrol-egitura

Eszenatoki batzuetan, komandoen exekuzioaren fluxua kontrolatu behar da. Adibidez, balio jakin bat bost baino handiagoa bada, ekintza bat egin behar da, bestela beste bat. Hau oso egoera askotan aplikagarria da, eta hemen kontrol egiturak lagunduko digu if-then. Bere forma sinpleenean, itxura hau du:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Eta hona hemen lan-adibide bat:

#!/bin/bash
if pwd
then
echo "It works"
fi

Kasu honetan, aginduaren exekuzioa bada pwdarrakastaz osatuta, "funtzionatzen du" testua bistaratuko da kontsolan.

Erabili ditzagun ditugun ezagutzak eta idatzi ditzagun eszenatoki konplexuago bat. Demagun erabiltzaile bat aurkitu behar dugula /etc/passwd, eta aurkitu bada, badagoela jakinarazi.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Hau da script hau exekutatu ondoren gertatzen dena.

Bash gidoiak: hasteko
Erabiltzaileen bilaketa

Hemen komandoa erabili dugu grepfitxategi batean erabiltzaile bat bilatzeko /etc/passwd. Taldea bada grepezagutzen ez duzuna, haren deskribapena aurki dezakezu Hemen.

Adibide honetan, erabiltzailea aurkitzen bada, script-ak mezu egokia bistaratuko du. Zer gertatzen da erabiltzailea aurkitu ez balitz? Kasu honetan, gidoiak exekuzioa osatuko du ezer esan gabe. Gustatuko litzaidake hark ere honen berri ematea, beraz, hobe dezagun kodea.

If-then-else kontrol-eraikuntza

Programak bilaketa arrakastatsu baten eta hutsegite baten emaitzen berri eman ahal izateko, eraikuntza erabiltzen dugu if-then-else. Hona hemen nola konfiguratzen den:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
else
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Lehenengo komandoak zero itzultzen badu, hau da, arrakastaz exekutatu dela, baldintza egiazkoa izango da eta exekuzioa ez da adarrean zehar joango else. Bestela, zero ez den beste zerbait itzultzen bada, hau da, hutsegite edo emaitza faltsu bat, ondorengo komandoak else.

Idatz dezagun gidoia hau:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Bere exekuzioa aurrera joan zen else.

Bash gidoiak: hasteko
If-then-else eraikuntza batekin script bat exekutatzen

Tira, aurrera goazen eta galde diezaiogun baldintza zailagoei buruz. Zer gertatzen da baldintza bat ez, hainbat egiaztatu behar badituzu? Esaterako, beharrezkoa den erabiltzailea aurkitzen bada, mezu bat bistaratuko da, beste baldintzaren bat betetzen bada, beste mezu bat bistaratuko da, eta abar. Egoera horretan, habiaraturiko baldintzek lagunduko digute. Honela dirudi:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°1
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
elif ΠΊΠΎΠΌΠ°Π½Π΄Π°2
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Lehenengo komandoak zero itzultzen badu, eta horrek arrakasta izan duen exekuzioa adierazten du, lehen blokeko komandoak exekutatuko dira then, bestela, lehenengo baldintza faltsua bada, eta bigarren komandoak zero itzultzen badu, bigarren kode blokea exekutatuko da.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

Horrelako script batean, adibidez, erabiltzaile berri bat sor dezakezu komandoa erabiliz useradd, bilaketak ez badu emaitzarik eman, edo egin beste zerbait erabilgarria.

Zenbakien Konparaketa

Scriptetan, zenbakizko balioak konparatu ditzakezu. Jarraian komando garrantzitsuen zerrenda dago.

n1 -eq n2Egia ematen du bada n1 dago n2.
n1 -ge n2 Egia ematen du bada n1gehiago edo berdin n2.
n1 -gt n2Egia ematen du bada n1 baino gehiago n2.
n1 -le n2Egia ematen du bada n1gutxiago edo berdin n2.
n1 -lt n2Egia ematen du n1 baino txikiagoa bada n2.
n1 -ne n2Egia ematen du bada n1berdin ez n2.

Adibide gisa, proba dezagun konparazio-operadoreetako bat. Kontuan izan adierazpena kortxete artean sartuta dagoela.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Hona hemen komando honek zer aterako duen.

Bash gidoiak: hasteko
Zenbakiak gidoietan alderatzea

Balio aldakorra val15 baino handiagoa, azkenean adarra exekutatzen da thenkonparazio operadorea eta dagokion mezua bistaratzen da kontsolan.

Kateen konparaketa

Scriptek kateen balioak ere aldera ditzakete. Konparazio-operadoreek nahiko sinpleak dirudite, baina kateen konparazio-operadoreek berezitasun batzuk dituzte, jarraian ukituko ditugunak. Hona hemen operadoreen zerrenda.

str1 = str2 Kateak berdintasuna egiaztatzen du, egia ematen du kateak berdinak badira.
str1 != str2Egia ematen du kateak berdinak ez badira.
str1 < str2Egia ematen du bada str1baino gutxiago str2.
str1 > str2 Egia ematen du bada str1baino gehiago str2.
-n str1 Egia ematen du luzera bada str1Zerotik gora.
-z str1Egia ematen du luzera bada str1zero berdina da.

Hona hemen script batean kateen konparazioaren adibide bat:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Script exekuzioaren ondorioz, honako hau lortzen dugu.

Bash gidoiak: hasteko
Kateen konparaketa scriptetan

Hona hemen kateen konparazioaren ezaugarri bat aipatzea merezi duena. Hots, ">" eta "<" operadoreei alderantzizko barra batekin ihes egin behar zaie, bestela scriptak ez du behar bezala funtzionatuko, errore-mezurik agertuko ez den arren. Scriptak ">" ikurra irteera birbideratzeko komando gisa interpretatzen du.

Hona hemen operadore hauekin lan egitea kodean:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Hona hemen gidoiaren emaitzak.

Bash gidoiak: hasteko
Kateen konparaketa, abisua botata

Kontuan izan scriptak, exekutatzen ari den arren, abisua ematen duela:

./myscript: line 5: [: too many arguments

Abisu hori kentzeko, ondorioztatzen dugu $val2 komatxo bikoitz artean:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Orain dena behar bezala funtzionatzen du.

Bash gidoiak: hasteko
Kateen konparaketa

">" eta "<" operadoreen beste ezaugarri bat maiuskulak eta minuskulak dituzten karaktereekin nola lan egiten duten da. Ezaugarri hau ulertzeko, prestatu dezagun eduki hau duen testu-fitxategi bat:

Likegeeks
likegeeks

Gorde izen batekin myfileeta gero exekutatu komando hau terminalean:

sort myfile

Fitxategiko lerroak honela ordenatuko ditu:

likegeeks
Likegeeks

Team sort, lehenespenez, goranzko ordenan ordenatzen ditu kateak, hau da, gure adibideko letra xehea letra larria baino txikiagoa da. Orain presta dezagun kate berdinak alderatuko dituen script bat:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Exekutatzen baduzu, kontrakoa egia da: letra xehea letra larria baino handiagoa da orain.

Bash gidoiak: hasteko
ordenatzeko komandoa eta kateen konparaketa script fitxategian

Konparazio komandoetan, letra larriak letra xeheak baino txikiagoak dira. Kateen konparaketa hemen ASCII karaktere kodeak alderatuz egiten da; beraz, ordenaren ordena karaktere-kodeen menpe dago.

Team sort, berriz, sistemaren hizkuntza-ezarpenetan zehaztutako ordena-ordena erabiltzen du.

Fitxategien egiaztapenak

Beharbada, beheko komandoak bash scriptetan erabiltzen dira gehien. Fitxategiei buruzko hainbat baldintza egiaztatzeko aukera ematen dute. Hona hemen komando hauen zerrenda.

-d fileFitxategi bat dagoen eta direktorio bat den egiaztatzen du.
-e fileFitxategiren bat dagoen egiaztatzen du.
-f file Fitxategi bat dagoen eta fitxategi bat den egiaztatzen du.
-r fileFitxategia existitzen den eta irakurgarria den egiaztatzen du.
-s file ПFitxategia existitzen den eta hutsik ez dagoen egiaztatzen du.
-w fileFitxategia existitzen den eta idazteko modukoa den egiaztatzen du.
-x fileFitxategi bat existitzen den eta exekutagarria den egiaztatzen du.
file1 -nt file2 Berriagoa den egiaztatzen du file1baino file2.
file1 -ot file2zaharragoa den egiaztatzen du file1baino file2.
-O file Fitxategia existitzen den eta uneko erabiltzailearena den egiaztatzen du.
-G fileFitxategia existitzen den eta bere taldearen IDa uneko erabiltzailearen talde IDarekin bat datorren egiaztatzen du.

Agindu hauek, baita gaur eztabaidatutako beste asko ere, erraz gogoratzen dira. Haien izenak, hainbat hitzen laburdura izanik, egiten dituzten egiaztapenak zuzenean adierazten dituzte.

Proba dezagun komandoetako bat praktikan:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Script honek, lehendik dagoen direktorio baterako, bere edukia bistaratuko du.

Bash gidoiak: hasteko
Direktorio baten edukiak zerrendatzea

Gainerako komandoekin zure kabuz esperimentatu dezakezula uste dugu, guztiak printzipio beraren arabera aplikatzen dira.

Emaitzak

Gaur bash script-ak idazten hasteko moduari buruz hitz egin dugu eta oinarrizko gauza batzuk landu ditugu. Izan ere, bash programazioaren gaia izugarria da. Artikulu hau 11 materialez osatutako serie handi baten lehen zatiaren itzulpena da. Oraintxe jarraitu nahi baduzu, hona hemen material horien jatorrizkoen zerrenda. Erosotasunerako, irakurri berri duzun itzulpena hemen sartzen da.

  1. Bash Script urratsez urrats - Hemen bash script-ak sortzen nola hasi hitz egiten ari gara, aldagaien erabilera kontuan hartzen da, baldintzazko eraikuntzak, kalkuluak, zenbakien konparaketak, kateak, fitxategiei buruzko informazioa aurkitzea deskribatzen da.
  2. Bash Scripting 2. zatia, Bash the awesome - hemen begiztak for eta while lan egiteko ezaugarriak azaltzen dira.
  3. Bash Scripting 3. zatia, parametroak eta aukerak - Material hau scriptetara pasa daitezkeen komando-lerroko parametroei eta gakoei eskaintzen zaie, erabiltzaileak sartzen dituen eta fitxategietatik irakur daitezkeen datuekin lan eginez.
  4. Bash Scripting 4. zatia, Sarrera eta Irteera - Hemen fitxategi deskribatzaileei buruz hitz egiten ari gara eta haiekin lan egiteaz, sarrera, irteera, akatsak, irteerako birbideratze korronteei buruz.
  5. Bash Scripting 5. zatia, Sighals & Jobs β€” material hau Linux seinaleei, scriptetan prozesatzeari, programatutako script-a abiarazteari eskainia dago.
  6. Bash Scripting 6. zatia, Funtzioak - hemen scriptetan funtzioak sortzea eta erabiltzeari buruz ikas dezakezu, liburutegiak garatzeari buruz.
  7. Bash Scripting 7. zatia, sed erabiliz β€” Artikulu hau sed stream testu editorearekin lan egiteari buruzkoa da.
  8. Bash Scripting 8. zatia, awk erabiliz β€” material hau awk datuak prozesatzeko lengoaian programatzen da.
  9. Bash Scripting 9. zatia, Adierazpen erregularrak - hemen bash script-en adierazpen erregularrak erabiltzeari buruz irakur dezakezu.
  10. Bash Scripting 10. zatia, Adibide praktikoak - hona hemen erabiltzaileei bidali daitezkeen mezuekin lan egiteko metodoak, baita diskoa kontrolatzeko metodo bat ere.
  11. Bash Scripting 11. zatia, Espero komandoa - Material hau Expect tresnari eskainia dago, eta horrekin interakzio interaktiboekin automatiza dezakezu. Bereziki, espero script-ak eta bash script-ekin eta beste programekin nola elkarreragiten duten buruzkoa da.

Uste dugu artikulu sorta honen gauza handienetako bat oinarrizkoenetatik abiatzen dela, edozein mailatako erabiltzaileentzat egokia, pixkanaka gai nahiko serioetara eramaten duela, denei Linux komando lerroko scriptetan aurrera egiteko aukera emanez.

Irakurle maiteok! Bash-programazioko guruei maisutasunaren gailurrera nola iritsi diren hitz egiteko eskatzen diegu, sekretuak partekatzeko eta lehen gidoia idatzi berri dutenen inpresioen zain gaude.

Bash gidoiak: hasteko

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Gainontzeko artikulu sorta itzuli?

  • Bai!

  • Ez beharrik

1030 erabiltzailek eman dute botoa. 106 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria