Skriptet Bash: fillimi

Skriptet Bash: fillimi
Skriptet Bash Pjesa 2: Sythe
Skriptet Bash, Pjesa 3: Opsionet dhe çelësat e linjës së komandës
Skriptet Bash Pjesa 4: Hyrja dhe Dalja
Skriptet Bash, Pjesa 5: Sinjalet, Detyrat e Sfondit, Menaxhimi i Skripteve
Bash Scripts, Pjesa 6: Funksionet dhe Zhvillimi i Bibliotekës
Bash Scripts, Pjesa 7: sed dhe përpunimi i fjalëve
Skriptet Bash, pjesa 8: gjuha e përpunimit të të dhënave awk
Skriptet Bash Pjesa 9: Shprehje të rregullta
Skriptet Bash Pjesa 10: Shembuj praktikë
Skriptet Bash, pjesa 11: pritje dhe automatizimi i shërbimeve ndërvepruese

Sot do të flasim për skriptet bash. kjo - skriptet e linjës së komandës, shkruar për guaskën bash. Ka predha të tjera si zsh, tcsh, ksh, por ne do të fokusohemi te bash. Ky material është i destinuar për të gjithë, kushti i vetëm është aftësia për të punuar linja e komandës Linux.

Skriptet Bash: fillimi

Skriptet e linjës së komandës janë koleksione të të njëjtave komanda që mund të futen nga tastiera, të grumbullohen në skedarë dhe të bashkohen për një qëllim të përbashkët. Në këtë rast, rezultatet e punës së ekipeve mund të jenë ose me vlerë të pavarur ose të shërbejnë si të dhëna hyrëse për ekipet e tjera. Skriptet janë një mënyrë e fuqishme për të automatizuar veprimet e kryera shpesh.

Skriptet Bash: fillimi

Pra, nëse flasim për vijën e komandës, ju lejon të ekzekutoni disa komanda në të njëjtën kohë duke i futur ato të ndara me një pikëpresje:

pwd ; whoami

Në fakt, nëse e keni provuar këtë në terminalin tuaj, skripti juaj i parë bash që përfshin dy komanda është shkruar tashmë. Punon kështu. Ekipi i pari pwd shfaq informacion në lidhje me drejtorinë aktuale të punës, pastaj komandën whoamitregon informacione për përdoruesin me të cilin jeni regjistruar.

Duke përdorur këtë qasje, ju mund të kombinoni sa më shumë komanda që dëshironi në një rresht, i vetmi kufi është numri maksimal i argumenteve që mund t'i kalohen programit. Ju mund ta përcaktoni këtë kufi duke përdorur komandën e mëposhtme:

getconf ARG_MAX

Linja e komandës është një mjet i shkëlqyeshëm, por duhet të futni komanda në të sa herë që ju nevojiten. Po sikur të shkruanim një grup komandash në një skedar dhe thjesht ta thërrisnim atë skedar për t'i ekzekutuar ato? Në fakt, skedari për të cilin po flasim quhet skript i linjës së komandës.

Si funksionojnë skriptet bash

Krijoni një skedar bosh duke përdorur komandën touch. Rreshti i parë i tij duhet të tregojë se cilën guaskë do të përdorim. Ne jemi të interesuar në bash, kështu që rreshti i parë i skedarit do të jetë:

#!/bin/bash

Linjat e tjera në këtë skedar përdorin simbolin hash për të treguar komentet që shell nuk i përpunon. Sidoqoftë, rreshti i parë është një rast i veçantë, ka një hash të ndjekur nga një pikëçuditëse (kjo sekuencë quhet shebang) dhe rrugën drejt bash, tregoni sistemit për të cilin skripti është krijuar posaçërisht bash.

Komandat e guaskës ndahen nga një furnizim rreshti, komentet ndahen nga një shenjë hash. Kështu duket:

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

Këtu, ashtu si në vijën e komandës, mund të shkruani komanda në një rresht, të ndara me pikëpresje. Sidoqoftë, nëse i shkruani komandat në rreshta të ndryshëm, skedari është më i lehtë për t'u lexuar. Në çdo rast, guaska do t'i përpunojë ato.

Vendosja e lejeve të skedarit të skriptit

Ruani skedarin duke i dhënë një emër myscript, dhe puna për krijimin e skriptit bash pothuajse ka përfunduar. Tani mbetet vetëm ta bëni këtë skedar të ekzekutueshëm, përndryshe, nëse përpiqeni ta ekzekutoni, do të hasni një gabim Permission denied.

Skriptet Bash: fillimi
Përpjekja për të ekzekutuar një skedar skripti me leje të konfiguruara gabimisht

Le ta bëjmë skedarin të ekzekutueshëm:

chmod +x ./myscript

Tani le të përpiqemi ta ekzekutojmë:

./myscript

Pas vendosjes së lejeve, gjithçka funksionon siç duhet.

Skriptet Bash: fillimi
Skripti bash ekzekutohet me sukses

Dalja e mesazhit

Për të nxjerrë tekst në tastierën Linux, përdorni komandën echo. Le të përdorim njohuritë e këtij fakti dhe të modifikojmë skriptin tonë, duke shtuar shpjegime për të dhënat që dalin nga komandat tashmë në të:

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

Kjo është ajo që ndodh pas ekzekutimit të skriptit të përditësuar.

Skriptet Bash: fillimi
Dalja e mesazheve nga një skenar

Tani mund të shfaqim shënime shpjeguese duke përdorur komandën echo. Nëse nuk dini si të redaktoni një skedar duke përdorur mjete Linux, ose nuk e keni parë komandën më parë echo, hidhini një sy этот материал.

Përdorimi i variablave

Variablat ju lejojnë të ruani informacione në një skedar skripti, siç janë rezultatet e komandave, për t'u përdorur nga komanda të tjera.

Nuk ka asgjë të keqe me ekzekutimin e komandave individuale pa ruajtur rezultatet e tyre, por aftësitë e kësaj qasjeje janë shumë të kufizuara.

Ekzistojnë dy lloje të variablave që mund të përdoren në skriptet bash:

  • Variablat e Mjedisit
  • Variablat e përdoruesit

Variablat e Mjedisit

Ndonjëherë komandat e guaskës duhet të punojnë me disa të dhëna të sistemit. Këtu është një shembull se si të shfaqet direktoria kryesore e përdoruesit aktual:

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

Ju lutemi vini re se ne mund të përdorim një ndryshore të sistemit $HOME në thonjëza të dyfishta, kjo nuk do ta pengojë sistemin ta njohë atë. Kjo është ajo që ju merrni nëse ekzekutoni skenarin e mësipërm.

Skriptet Bash: fillimi
Përdorimi i një ndryshoreje mjedisi në një skenar

Po sikur të duhet të shfaqësh një shenjë dollari në ekran? Le ta provojmë këtë:

echo "I have $1 in my pocket"

Sistemi do të zbulojë një shenjë dollari në një varg të cituar dhe do të supozojë se ne kemi referuar një ndryshore. Skripti do të përpiqet të shfaqë vlerën e një ndryshoreje të papërcaktuar $1. Kjo nuk është ajo që na nevojitet. Çfarë duhet bërë?

Në këtë situatë, përdorimi i karakterit të arratisjes, një vijë e prapme, përpara shenjës së dollarit do të ndihmojë:

echo "I have $1 in my pocket"

Skenari tani do të nxjerrë saktësisht atë që pritet.

Skriptet Bash: fillimi
Përdorimi i një sekuence arratisjeje për të printuar një shenjë dollari

Variablat e përdoruesit

Përveç variablave të mjedisit, skriptet bash ju lejojnë të përcaktoni dhe përdorni variablat tuaja në skript. Variabla të tillë mbajnë një vlerë derisa skripti të përfundojë ekzekutimin.

Ashtu si me variablat e sistemit, variablat e përdoruesit mund të aksesohen duke përdorur shenjën e dollarit:
TNW-CUS-FMP - kod promocional për një zbritje prej 10% në shërbimet tona, i disponueshëm për aktivizim brenda 7 ditëve

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

Kjo është ajo që ndodh pas ekzekutimit të një skenari të tillë.

Skriptet Bash: fillimi
Variablat e personalizuar në një skript

Zëvendësimi i komandës

Një nga veçoritë më të dobishme të skripteve bash është aftësia për të nxjerrë informacion nga dalja e komandës dhe për t'i caktuar ato variablave, duke ju lejuar të përdorni këtë informacion kudo në skedarin e skriptit.

Kjo mund të bëhet në dy mënyra.

  • Përdorimi i kutisë "`"
  • Sipas dizajnit $()

Kur përdorni metodën e parë, kini kujdes që të mos përfshini një thonjëza të vetme në vend të prapavijës. Komanda duhet të përfshihet në dy ikona të tilla:

mydir=`pwd`

Në qasjen e dytë, e njëjta gjë shkruhet kështu:

mydir=$(pwd)

Dhe skenari mund të përfundojë si ky:

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

Gjatë funksionimit të tij, dalja e komandës pwddo të ruhet në një variabël mydir, përmbajtja e së cilës, duke përdorur komandën echo, do të shkojë në tastierë.

Skriptet Bash: fillimi
Një skript që ruan rezultatet e një komande në një ndryshore

Veprimet matematikore

Për të kryer operacione matematikore në një skedar skripti, mund të përdorni një konstrukt si $((a+b)):

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

Skriptet Bash: fillimi
Veprimet matematikore në një skenar

nëse-atëherë konstruksioni i kontrollit

Në disa skenarë, ju duhet të kontrolloni rrjedhën e ekzekutimit të komandës. Për shembull, nëse një vlerë e caktuar është më e madhe se pesë, duhet të kryeni një veprim, përndryshe, një tjetër. Kjo është e zbatueshme në shumë situata, dhe këtu struktura e kontrollit do të na ndihmojë if-then. Në formën e tij më të thjeshtë duket kështu:

if команда
then
команды
fi

Këtu është një shembull pune:

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

Në këtë rast, nëse komanda është ekzekutuar pwddo të përfundojë me sukses, teksti "punon" do të shfaqet në tastierë.

Le të përdorim njohuritë që kemi dhe të shkruajmë një skenar më kompleks. Le të themi se duhet të gjejmë një përdorues të caktuar në /etc/passwd, dhe nëse keni arritur ta gjeni, raportoni se ekziston.

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

Kjo është ajo që ndodh pas ekzekutimit të këtij skenari.

Skriptet Bash: fillimi
Kërkimi i përdoruesit

Këtu kemi përdorur komandën greppër të kërkuar një përdorues në një skedar /etc/passwd. Nëse ekipi grepi panjohur për ju, përshkrimi i tij mund të gjendet këtu.

Në këtë shembull, nëse përdoruesi gjendet, skripti do të shfaqë një mesazh përkatës. Po sikur përdoruesi të mos gjendej? Në këtë rast, skenari thjesht do të përfundojë ekzekutimin pa na thënë asgjë. Ne dëshirojmë që ai të na tregojë edhe për këtë, kështu që ne do të përmirësojmë kodin.

konstrukt kontrolli nëse-atëherë tjetër

Në mënyrë që programi të jetë në gjendje të raportojë si rezultatet e një kërkimi të suksesshëm ashtu edhe dështimin, ne do të përdorim ndërtimin if-then-else. Ja se si funksionon:

if команда
then
команды
else
команды
fi

Nëse komanda e parë kthen zero, që do të thotë se është ekzekutuar me sukses, kushti do të jetë i vërtetë dhe ekzekutimi nuk do të vazhdojë përgjatë degës else. Përndryshe, nëse kthehet diçka tjetër përveç zeros, që do të tregonte dështim, ose një rezultat të rremë, komandat pas else.

Le të shkruajmë skriptin e mëposhtëm:

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

Ekzekutimi i tij u rrëzua else.

Skriptet Bash: fillimi
Ekzekutimi i një skripti me një konstrukt nëse-atëherë-tjetër

Epo, le të vazhdojmë dhe të pyesim veten për kushte më komplekse. Po sikur të keni nevojë të kontrolloni jo një kusht, por disa? Për shembull, nëse gjendet përdoruesi i dëshiruar, duhet të shfaqet një mesazh, nëse plotësohet ndonjë kusht tjetër, duhet të shfaqet një mesazh tjetër etj. Në një situatë të tillë, kushtet e mbivendosura do të na ndihmojnë. Duket kështu:

if команда1
then
команды
elif команда2
then
команды
fi

Nëse komanda e parë kthen zero, gjë që tregon ekzekutimin e saj të suksesshëm, komandat në bllokun e parë do të ekzekutohen. then, përndryshe, nëse kushti i parë është false dhe nëse komanda e dytë kthen zero, blloku i dytë i kodit do të ekzekutohet.

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

Në një skript të tillë, për shembull, mund të krijoni një përdorues të ri duke përdorur komandën useradd, nëse kërkimi nuk dha rezultate, ose bëni diçka tjetër të dobishme.

Krahasimi i numrave

Në skriptet mund të krahasoni vlerat numerike. Më poshtë është një listë e komandave përkatëse.

n1 -eq n2Kthehet e vërtetë nëse n1 është n2.
n1 -ge n2 Kthehet e vërtetë nëse n1më shumë ose të barabartë n2.
n1 -gt n2Kthehet e vërtetë nëse n1 больше n2.
n1 -le n2Kthehet e vërtetë nëse n1më pak ose të barabartë n2.
n1 -lt n2Rikthen true nëse n1 është më pak se n2.
n1 -ne n2Kthehet e vërtetë nëse n1jo e barabartë n2.

Si shembull, le të provojmë një nga operatorët e krahasimit. Vini re se shprehja është e mbyllur në kllapa katrore.

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

Kjo është ajo që kjo komandë do të dalë.

Skriptet Bash: fillimi
Krahasimi i numrave në skriptet

Vlera e ndryshueshme val1më i madh se 5, dega përfundon duke u ekzekutuar thenoperatori i krahasimit dhe një mesazh përkatës shfaqet në tastierë.

Krahasimi i vargjeve

Skriptet gjithashtu mund të krahasojnë vlerat e vargut. Operatorët e krahasimit duken mjaft të thjeshtë, por operacionet e krahasimit të vargjeve kanë veçori të caktuara, të cilat do t'i prekim më poshtë. Këtu është një listë e operatorëve.

str1 = str2 Teston vargjet për barazi, duke e kthyer të vërtetën nëse vargjet janë identike.
str1 != str2Kthehet e vërtetë nëse vargjet nuk janë identike.
str1 < str2Kthehet e vërtetë nëse str1më pak se str2.
str1 > str2 Kthehet e vërtetë nëse str1me shume se str2.
-n str1 Kthen e vërtetë nëse gjatësia str1Mbi zero.
-z str1Kthen e vërtetë nëse gjatësia str1barazohet me zero.

Këtu është një shembull i krahasimit të vargjeve në një skenar:

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

Si rezultat i ekzekutimit të skenarit, marrim sa vijon.

Skriptet Bash: fillimi
Krahasimi i vargjeve në skriptet

Këtu është një veçori e krahasimit të vargjeve që vlen të përmendet. Gjegjësisht, operatorët ">" dhe "<" duhet të shmangen me një vijë të prapme, përndryshe skripti nuk do të funksionojë siç duhet, megjithëse nuk do të shfaqen mesazhe gabimi. Skripti interpreton shenjën ">" si një komandë ridrejtimi të daljes.

Ja se si duket puna me këta operatorë në kod:

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

Këtu janë rezultatet e skenarit.

Skriptet Bash: fillimi
Krahasimi i vargjeve, paralajmërimi i dhënë

Ju lutemi vini re se skenari, megjithëse i ekzekutuar, lëshon një paralajmërim:

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

Për të hequr qafe këtë paralajmërim, ne përfundojmë $val2 në thonjëza të dyfishta:

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

Tani gjithçka funksionon siç duhet.

Skriptet Bash: fillimi
Krahasimi i vargjeve

Një veçori tjetër e operatorëve ">" dhe "<" është se si ata punojnë me shkronjat e mëdha dhe të vogla. Për të kuptuar këtë veçori, le të përgatisim një skedar teksti me përmbajtjen e mëposhtme:

Likegeeks
likegeeks

Le ta ruajmë duke i dhënë një emër myfile, pastaj ekzekutoni komandën e mëposhtme në terminal:

sort myfile

Ai do t'i rendit linjat nga skedari si kjo:

likegeeks
Likegeeks

Ekip sort, si parazgjedhje, rendit vargjet në rend rritës, domethënë, shkronja e vogël në shembullin tonë është më e vogël se ajo e madhe. Tani le të përgatisim një skenar që do të krahasojë të njëjtat vargje:

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

Nëse e drejtoni, rezulton se gjithçka është anasjelltas - shkronja e vogël tani është më e madhe se ajo e madhe.

Skriptet Bash: fillimi
Komanda e renditjes dhe krahasimi i vargjeve në një skedar skripti

Në komandat e krahasimit, shkronjat e mëdha janë më të vogla se shkronjat e vogla. Krahasimi i vargjeve këtu bëhet duke krahasuar kodet ASCII të karaktereve, kështu që rendi i renditjes varet nga kodet e karaktereve.

Ekip sort, nga ana tjetër, përdor rendin e renditjes të specifikuar në cilësimet e gjuhës së sistemit.

Kontrollet e dosjeve

Ndoshta komandat e mëposhtme përdoren më shpesh në skriptet bash. Ato ju lejojnë të kontrolloni kushte të ndryshme në lidhje me skedarët. Këtu është një listë e këtyre komandave.

-d fileKontrollon nëse një skedar ekziston dhe është një drejtori.
-e fileKontrollon nëse skedari ekziston.
-f file Kontrollon nëse një skedar ekziston dhe është një skedar.
-r fileKontrollon nëse skedari ekziston dhe është i lexueshëm.
-s file ПKontrollon nëse skedari ekziston dhe nuk është bosh.
-w fileKontrollon nëse skedari ekziston dhe është i shkruhet.
-x fileKontrollon nëse skedari ekziston dhe është i ekzekutueshëm.
file1 -nt file2 Kontrollon nëse është më i ri file1se file2.
file1 -ot file2Kontrollon nëse është më i vjetër file1se file2.
-O file Kontrollon nëse skedari ekziston dhe është në pronësi të përdoruesit aktual.
-G fileKontrollon nëse skedari ekziston dhe nëse ID-ja e grupit përputhet me ID-në e grupit të përdoruesit aktual.

Këto komanda, si dhe shumë të tjera të diskutuara sot, janë të lehta për t'u mbajtur mend. Emrat e tyre, duke qenë shkurtesa fjalësh të ndryshme, tregojnë drejtpërdrejt kontrollet që kryejnë.

Le të provojmë një nga komandat në praktikë:

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

Ky skript, për një direktori ekzistuese, do të shfaqë përmbajtjen e tij.

Skriptet Bash: fillimi
Renditja e përmbajtjes së një drejtorie

Ne besojmë se ju mund të eksperimentoni vetë me komandat e mbetura; ato përdoren të gjitha sipas të njëjtit parim.

Rezultatet e

Sot folëm se si të filloni të shkruani skripta bash dhe mbuluam disa gjëra themelore. Në fakt, tema e programimit bash është e madhe. Ky artikull është një përkthim i pjesës së parë të një serie të madhe prej 11 materialesh. Nëse dëshironi të vazhdoni tani, këtu është një listë e origjinaleve të këtyre materialeve. Për lehtësi, përkthimi i të cilit sapo lexuat është përfshirë këtu.

  1. Skript Bash hap pas hapi - këtu po flasim se si të filloni krijimin e skripteve bash, merret parasysh përdorimi i variablave, përshkruhen strukturat e kushtëzuara, llogaritjet, krahasimet e numrave, vargjet dhe gjetja e informacionit rreth skedarëve.
  2. Bash Scripting Pjesa 2, Bash the awesome — këtu zbulohen veçoritë e punës me sythe for dhe while.
  3. Bash Scripting Pjesa 3, Parametrat dhe opsionet — ky material i kushtohet parametrave dhe çelësave të linjës së komandës që mund t'u kalohen skripteve, duke punuar me të dhënat që fut përdoruesi dhe që mund të lexohen nga skedarët.
  4. Bash Scripting Pjesa 4, Input & Output - këtu po flasim për përshkruesit e skedarëve dhe punën me ta, për hyrjen, daljen, rrjedhat e gabimeve dhe për ridrejtimin e daljes.
  5. Bash Scripting Pjesa 5, Sighals & Jobs — ky material i kushtohet sinjaleve Linux, përpunimit të tyre në skripta dhe nisjes së skripteve sipas një plani.
  6. Bash Scripting Pjesa 6, Funksionet — këtu mund të mësoni rreth krijimit dhe përdorimit të funksioneve në skriptet dhe zhvillimin e bibliotekave.
  7. Bash Scripting Pjesa 7, Duke përdorur sed — ky artikull i kushtohet punës me redaktuesin e tekstit të transmetimit sed.
  8. Bash Scripting Pjesa 8, Duke përdorur awk — ky material i kushtohet programimit në gjuhën e përpunimit të të dhënave awk.
  9. Bash Scripting Pjesa 9, Shprehje të rregullta — këtu mund të lexoni për përdorimin e shprehjeve të rregullta në skriptet bash.
  10. Bash Scripting Pjesa 10, Shembuj praktikë — këtu janë teknikat për të punuar me mesazhe që mund t'u dërgohen përdoruesve, si dhe një metodë për monitorimin e diskut.
  11. Bash Scripting Pjesa 11, Pres Command — ky material i dedikohet mjetit Expect, me të cilin mund të automatizoni ndërveprimin me shërbimet ndërvepruese. Në veçanti, ne po flasim për skriptet e pritjes dhe ndërveprimin e tyre me skriptet bash dhe programe të tjera.

Ne besojmë se një nga veçoritë e vlefshme të kësaj serie artikujsh është se, duke filluar nga më e thjeshta, e përshtatshme për përdoruesit e çdo niveli, gradualisht çon në tema mjaft serioze, duke i dhënë të gjithëve një shans për të avancuar në krijimin e skripteve të linjës së komandës Linux. .

Të nderuar lexues! Ne kërkojmë nga gurutë e programimit bash të flasin se si arritën majat e mjeshtërisë së tyre, të ndajnë sekretet e tyre dhe ne mezi presim të marrim përshtypjet nga ata që sapo kanë shkruar skenarin e tyre të parë.

Skriptet Bash: fillimi

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, te lutem

A duhet të përkthej pjesën tjetër të serisë së artikujve?

  • Po!

  • Jo nuk ka nevojë

1030 përdorues votuan. 106 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment