Linux-da ýönekeý gabyk skriptlerini nädip döretmeli
Gabyk skriptlerini döretmek, Linux ulanyjylarynyň barmaklarynyň ujunda bolmaly iň möhüm endiklerden biridir. Gabyk skriptleri gaýtalanýan meseleleri awtomatlaşdyrmakda ägirt uly rol oýnaýar, ýogsam setir boýunça ýerine ýetirmek ýadaw bolar.
Bu gollanmada, her Linux ulanyjysynda bolmaly esasy gabyk skript amallaryny görkezýäris.
1. Simönekeý gabyk skriptini dörediň
Gabyk skripti ASCII tekstini öz içine alýan faýl. Simpleönekeý gabyk skriptini döretmek bilen başlarys we munuň üçin tekst redaktoryny ulanarys. “Vim” redaktory gaty köp.
Executederine ýetirilende\Salam dünýä görkezýän ýönekeý skript döretmek bilen başlarys.
$ vim hello.sh
Aşakdaky mazmuny faýla goýuň we ýazdyryň.
#!/bin/bash # Print Hello world message echo "Hello World!"
Geliň, gabyk skriptini setir boýunça geçeliň.
- Birinji setir -
#!/Bin/bash
- shebang sözbaşysy hökmünde bellidir. Bu, ssenariýany düşündirmek üçin haýsy programmanyň ulanyljakdygyny görkezýän ýörite gurluşdyr. Bu ýagdaýda/bin/bash tarapyndan görkezilen baş gabyk bolar. Python ýaly#!/Usr/bin/python3
bilen kesgitlenýän we shebang sözbaşy#!/Usr/bin/perl
bilen görkezilen Perl ýaly başga skript dilleri bar. . - Ikinji setir teswir. Düşündiriş, gabyk skriptiniň näme edýändigini we skript işledilende ýerine ýetirilmeýändigini beýan edýän jümle. Teswirler elmydama
#
hash belgisinden öň gelýär. - Iň soňky setir, Salam Dünýä habaryny terminalda çap edýän buýruk.
Indiki ädim, görkezilişi ýaly chmod buýrugyny ulanyp ýerine ýetiriş rugsady bellemek bilen skripti ýerine ýetirip bolar.
$ chmod +x hello.sh
Ahyrynda, buýruklaryň ikisini ulanyp, gabyk skriptini işlediň:
$ bash hello.sh OR $ ./hello.sh
2. Kody ýerine ýetirmek üçin şertli jümleleri ulanmak
Beýleki programmirleme dilleri ýaly, şertli jümleler sintaksisde azajyk üýtgeşiklik bilen karar bermek üçin baş skriptde ulanylýar. Eger, if-else we elif şertli jümleleri ýapmakçy.
If jümle bir ýa-da birnäçe şerti barlamak üçin ulanylyp bilner. Ifeke şerti barlamak üçin if jümlesini düýpden ulanmak bilen başlarys. If jümlesi if ... fi
bloklary bilen kesgitlenýär.
if command then statement fi
Aşakdaky gabyk skriptine göz aýlalyň.
#!/bin/bash echo 'Enter the score' read x if [[ $x == 70 ]]; then echo 'Good job!' fi
Aboveokardaky gabyk skripti, ulanyja soňra üýtgeýän x-da saklanýan bal bermäge çagyrýar. Bal 70-e gabat gelýän bolsa, skript çykyşy yzyna gaýtaryp berýär\Gowy iş! 100-e çenli.
Ulanyp boljak beýleki deňeşdirme operatorlary:
-
-eq
- bilen deňdir -
-ne
- bilen deň däl -
-lt
- -den az -
-le
- -den az ýa-da deňdir -
-lt
- -den az -
-ge
- -den uly ýa-da deňdir
Mysal üçin, aşakdaky if-jümle bloky, giriş balynyň bahasy 50-den pes bolsa, “Has köp işle” çap edýär.
if [[ $x -lt 50 ]]; then echo 'Work Harder!' fi
Mümkin bolan 2 netijä eýe bolan ýagdaýlar üçin: - bu ýa-da başga - if-else beýany peýdaly bolýar.
if command then statement1 else statement2 fi
Aşakdaky ýazgy giriş balyny okaýar we 70-den ulydygyny ýa-da deňdigini barlaýar.
Hasap 70-den uly ýa-da deň bolsa, “Ajaýyp iş, geçdiň!” Habaryny alarsyň. Şeýle-de bolsa, bal 70-den aşak düşse, “Sen şowsuz” çykyşy çap ediler.
#!/bin/bash echo 'Enter the score' read x if [[ $x -ge 70 ]]; then echo 'Great job, You passed!' else echo 'You failed' fi
Birnäçe şert we dürli netijeler bolan ssenariýalarda if-elif-else jümlesi ulanylýar. Bu jümle aşakdaky formaty alýar.
if condition1 then statement1 elif condition2 then statement2 else statement3 fi
Mysal üçin, girizilen belginiň 90, 60 ýa-da 30dygyny barlaýan lotereýa üçin skriptimiz bar.
#!/bin/bash echo 'Enter the score' read x if [[ $x -eq 90 ]]; then echo “You have won the First Prize” elif [[ $x -eq 60 ]]; then echo “You have won the Second Prize” elif [[ $x -eq 30 ]]; then echo “You have won the Second Prize” else echo “Please try again” fi
3. If Logika we Logika bilen ulanmak
Iki şert kanagatlandyrylan halatynda bir meseläni ýerine ýetirmek üçin AND logika operatory bilen bilelikde if jümlesini ulanyp bilersiňiz. AND koduny aňlatmak üçin &&
operatory ulanylýar.
#!/bin/bash echo 'Please Enter your user_id' read user_id echo 'Please Enter your tag_no' read tag_id if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]]; then echo “Login successful” else echo “Login failure” fi
5. If beýany ýa-da Logika bilen ulanmak
||
nyşany bilen aňladylýan OR logika ulanylanda, garaşylýan netijeleri bermek üçin şertleriň biri hem skript bilen kanagatlanmalydyr.
#!/bin/bash echo 'Please enter a random number' read number if [[ (number -eq 55 || number -eq 80) ]]; then echo 'Congratulations! You’ve won' else echo 'Sorry, try again' fi
Looping konstruksiýalaryny ulanyň
Baş aýlawlar ulanyjylara belli bir netijä gelýänçä birnäçe meseläni ýerine ýetirmäge mümkinçilik berýär. Bu gaýtalanýan meseleleri ýerine ýetirmekde peýdaly bolýar. Bu bölümde, beýleki programmirleme dillerinde-de tapýan käbir aýlawlaryňyza göz aýlarys.
Bu işlemek üçin iň aňsat aýlawlaryň biridir. Sintaksis gaty ýönekeý:
while <some test> do commands done
Aşakdaky aýlaw ýerine ýetirilende 1-den 10-a çenli ähli sanlary görkezýär.
#!/bin/bash # A simple while loop counter=1 while [ $counter -le 10 ] do echo $counter ((counter++)) done
Geliň, wagtlaýyn aýlawy ara alyp maslahatlaşalyň:
Üýtgeýji hasaplaýjy 1-e başlaýar we üýtgeýji 10-dan az ýa-da deň bolsa-da, şert ýerine ýetirilýänçä hasaplaýjynyň bahasy ýokarlanar. “Echo $counter” setiri 1-den 10-a çenli ähli sanlary çap edýär.
Wagt aýlawy ýaly, kody gaýtalap ýerine ýetirmek üçin aýlaw ulanylýar. .Agny ulanyjy tarapyndan kesgitlenen kod ýerine ýetirişini mümkin boldugyça köp gaýtalaň.
Sintaksis:
for var in 1 2 3 4 5 N do command1 command2 done
Aşakdaky aýlaw 1-den 10-a çenli gaýtalanýar we bahalaryny ekranda işleýär.
Muňa ýetmegiň has gowy usuly, ähli sanlary ýazmagyň ýerine görkezilişi ýaly goşa egrilen ýaýlar {}
ulanyp diapazony kesgitlemekdir.
#!/bin/bash # Specify range in a for loop for num in {1..10} do echo $num done
Baş pozisiýa parametrleri
Positionerleşýän parametr, gabygyň üstünde bahalar geçirilende, bellenip bilinmeýän skriptde görkezilen ýörite üýtgeýjidir. Positionerleşiş parametrleri $0 $1 $2 $3 …… 9 $aralygynda işleýär. $9 bahasyndan başga, parametrler egri ýaýlarda bolmaly, meselem & # 36 {10}, & # 36 {11}… we ş.m.
Scriptazgy ýerine ýetirilende, $0 bolan ilkinji pozisiýa parametri gabyk skriptiniň adyny alýar. $1 parametri terminalda geçen birinji üýtgeýjini, 2 $ikinji, 3 $üçünji we ş.m. alýar.
Görkezilişi ýaly test.sh skriptini döredeliň.
#!/bin/bash echo "The name of the script is: " $0 echo "My first name is: " $1 echo "My second name is: " $2
Ondan soň, skripti ýerine ýetiriň we argument hökmünde birinji we ikinji ady beriň:
# bash test.sh James Kiarie
Çykyşdan, çap edilen ilkinji üýtgeýjiniň gabyk skriptiniň adydygyny görüp bileris, bu ýagdaýda test.sh. Ondan soň atlar gabyk skriptinde kesgitlenen pozisiýa parametrlerine laýyk çap edilýär.
Positionerleşiş parametrleri peýdalydyr, sebäbi üýtgeýjä baha aç-açan bellemegiň ýerine girizilýän maglumatlary sazlamaga kömek edýär.
Gabyk buýrugynyň çykyş kodlary
Simpleönekeý soraga jogap bermekden başlalyň, Çykyş kody näme?
Ulanyjy ýa-da gabyk skripti bilen gabykda ýerine ýetirilen her buýrugyň çykyş ýagdaýy bar. Çykyş ýagdaýy bitewi san.
0 çykyş ýagdaýy buýrugyň hiç hili ýalňyşsyz üstünlikli ýerine ýetirilendigini aňladýar. 1 bilen 255 aralygyndaky islendik zat buýrugyň şowsuz ýa-da üstünlikli ýerine ýetirilmändigini görkezýär.
Buýrugyň çykyş ýagdaýyny tapmak üçin $?
Shell üýtgeýjisini ulanyň.
1 çykyş ýagdaýy umumy ýalňyşlygy ýa-da faýllary sudo rugsady bolmazdan redaktirlemek ýaly islendik ýalňyşlyklary görkezýär.
Çykyş ýagdaýy, buýruk ýa-da gurlan gabyk üýtgeýjisiniň nädogry ulanylmagyny görkezýär.
127 çykyş ýagdaýy, adatça tapylmadyk buýruk ýalňyşlygyny berýän bikanun buýrugy görkezýär.
“Shell” buýruklarynyň skriptiň içinde gaýtadan işlenişi
Baş skriptde, buýrugyň çykyşyny geljekde ulanmak üçin üýtgeýjide saklap bilersiňiz. Bu, gabyk buýrugyny çalyşmak diýlip hem atlandyrylýar we aşakdaky usullar bilen gazanyp bolýar.
variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)
Mysal üçin, sene buýrugyny şu gün diýilýän üýtgeýjide saklap, häzirki senäni açmak üçin gabyk skriptine jaň edip bilersiňiz.
#!/bin/bash today=$(date) echo “Today is $today”
Başga bir mysal alalyň. Linux ulgamyňyzda dogry giriş ulanyjylaryny tapmak isleýärsiňiz öýdýän. Bu barada nädip gitmeli? Ilki bilen, ähli ulanyjylaryň sanawy (ulgam, amal we giriş ulanyjylary)/etc/passwd faýlynda saklanýar.
Faýly görmek üçin/bin/bash atributly ulanyjylary gözlemek üçin grep buýrugyny ulanmaly we atlaryň ilkinji 10 simwolyny görkezmek üçin cut -c 1-10 buýrugyny ulanmaly.
Pişik buýrugyny login_users üýtgeýjisine sakladyk.
#!/bin/bash login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10) echo 'This is the list of login users: echo $login_users
Bu ýönekeý gabyk skriptlerini döretmek boýunça okuwymyzy tamamlaýar. Bu gymmatly taparsyňyz diýip umyt edýäris.