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.