Jinsi ya Kuunda Maandishi Rahisi ya Shell katika Linux


Kuunda maandishi ya ganda ni mojawapo ya ujuzi muhimu zaidi ambao watumiaji wa Linux wanapaswa kuwa nao kwenye ncha za vidole vyao. Maandishi ya Shell yana jukumu kubwa katika kugeuza kiotomatiki kazi zinazorudiwa ambazo sivyo zingekuwa za kuchosha kutekeleza mstari kwa mstari.

Katika somo hili, tunaangazia baadhi ya shughuli za kimsingi za uandishi wa ganda ambazo kila mtumiaji wa Linux anapaswa kuwa nazo.

1. Unda Hati Rahisi ya Shell

Hati ya ganda ni faili ambayo inajumuisha maandishi ya ASCII. Tutaanza kwa kuunda script rahisi ya shell, na kufanya hivyo, tutatumia mhariri wa maandishi. Kuna idadi kubwa ya wahariri wa vim.

Tutaanza kwa kuunda hati rahisi inayoonyesha \Hujambo ulimwengu inapotekelezwa.

$ vim hello.sh

Bandika yaliyomo kwenye faili na uhifadhi.

#!/bin/bash
# Print Hello world message
echo "Hello World!"

Hebu tuende juu ya mstari wa hati ya shell kwa mstari.

  • Mstari wa kwanza - #!/bin/bash - inajulikana kama kichwa cha shebang. Huu ni muundo maalum ambao unaonyesha ni programu gani itatumika kutafsiri maandishi. Katika kesi hii, hii itakuwa ganda la bash lililoonyeshwa na /bin/bash. Kuna lugha zingine za uandishi kama vile Python ambayo inaashiriwa na #!/usr/bin/python3 na Perl ambayo kichwa chake cha shebang kimeashiriwa na #!/usr/bin/perl.
  • Mstari wa pili ni maoni. Maoni ni taarifa inayoelezea kile hati ya ganda hufanya na haitekelezwi wakati hati inaendeshwa. Maoni kila mara hutanguliwa na alama ya heshi #.
  • Mstari wa mwisho ni amri inayochapisha ujumbe wa ‘Hujambo Ulimwenguni’ kwenye terminal.

Hatua inayofuata ni kufanya hati itekelezwe kwa kupeana ruhusa ya kutekeleza kwa kutumia amri ya chmod kama inavyoonyeshwa.

$ chmod +x  hello.sh

Mwishowe, endesha hati ya ganda kwa kutumia mojawapo ya amri:

$ bash hello.sh
OR
$ ./hello.sh

2. Kutumia Taarifa za Masharti Kutekeleza Kanuni

Kama lugha zingine za programu, taarifa za masharti hutumika katika uandishi wa bash kufanya maamuzi, kukiwa na tofauti kidogo tu katika sintaksia. Tutashughulikia kauli za masharti za if, kama-mwingine, na elif.

Taarifa ya if inaweza kutumika kujaribu hali moja au nyingi. Tutaanza na matumizi ya kimsingi ya if taarifa ya kujaribu hali moja. Taarifa if inafafanuliwa na vizuizi vya if ... fi.

if command
then
  statement
fi

Hebu tuangalie hati ya shell hapa chini.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Hati iliyo hapo juu ya ganda humshawishi mtumiaji kutoa alama ambayo huhifadhiwa katika mabadiliko ya x. Ikiwa alama inalingana na 70, hati hurejesha matokeo \Kazi njema!. Opereta linganishi == hutumika kujaribu ikiwa alama imeingizwa, ambayo imehifadhiwa katika mabadiliko x, ni sawa. hadi 100.

Waendeshaji wengine wa kulinganisha unaweza kutumia ni pamoja na:

  • -eq - Sawa na
  • -ne - Sio sawa na
  • -lt - Chini ya
  • -le - Chini ya au sawa na
  • -lt - Chini ya
  • -ge - Kubwa kuliko au sawa na

Kwa mfano, kipengele cha if-taarifa hapa chini huchapisha ‘Fanya kazi kwa bidii zaidi’ ikiwa alama ya ingizo ni thamani yoyote chini ya 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Kwa hali ambapo una matokeo 2 yanayowezekana: - iwe hili au lile - taarifa ikiwa-ingine itakusaidia.

if command
then
  statement1
else
  statement2
fi

Hati iliyo hapa chini inasoma alama ya ingizo na kuangalia ikiwa ni kubwa kuliko au sawa na 70.

Ikiwa alama ni kubwa kuliko au sawa na 70, utapata ujumbe wa ‘Kazi nzuri, Umefaulu!’. Walakini, ikiwa alama iko chini ya 70, matokeo ya 'Umeshindwa' yatachapishwa.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Katika hali ambapo kuna hali nyingi na matokeo tofauti, kauli ya if-elif-else hutumiwa. Taarifa hii inachukua muundo ufuatao.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Kwa mfano, tuna hati ya bahati nasibu ambayo hukagua ikiwa nambari iliyoingizwa ni 90, 60 au 30.

#!/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. Kutumia Taarifa ya Ikiwa na NA Mantiki

Unaweza kutumia if taarifa kando ya AND opereta wa mantiki kutekeleza kazi ikiwa masharti mawili yataridhika. Opereta && hutumiwa kuashiria NA mantiki.

#!/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. Kutumia Taarifa ya Ikiwa na AU Mantiki

Unapotumia mantiki ya AU, ambayo inawakilishwa na alama ya ||, mojawapo ya masharti yanahitaji kuridhika na hati ili kutoa matokeo yanayotarajiwa.

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

Tumia Miundo ya Kitanzi

Loops za bash huruhusu watumiaji kufanya mfululizo wa kazi hadi matokeo fulani yamepatikana. Hii inakuja kwa manufaa katika kufanya kazi zinazojirudia. Katika sehemu hii, tutakuwa na mtazamo wa baadhi ya vitanzi ambavyo pia utapata katika lugha zingine za upangaji programu.

Hii ni moja ya vitanzi rahisi kufanya kazi nayo. Syntax ni rahisi sana:

while  <some test>
do
 commands
done

Kitanzi cha wakati hapa chini kinaorodhesha nambari zote kutoka 1 hadi 10 wakati wa kutekelezwa.

#!/bin/bash
# A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Wacha tujadili kitanzi cha wakati:

Kaunta ya kutofautisha imeanzishwa hadi 1. Na wakati kigezo ni chini ya au sawa na 10, thamani ya kaunta itaongezwa hadi hali itakapotimizwa. Laini echo $counter huchapisha nambari zote kutoka 1 hadi 10.

Kama kitanzi cha wakati, kitanzi cha kitanzi kinatumika kutekeleza nambari mara kwa mara. I.e. kurudia utekelezaji wa nambari mara nyingi iwezekanavyo inavyofafanuliwa na mtumiaji.

Sintaksia ni:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Kitanzi kilicho hapa chini kinarudia kupitia 1 hadi 10 na kuchakata maadili yao kwenye skrini.

Njia bora ya kufikia hili ni kufafanua fungu la visanduku kwa kutumia viunga vyenye kupindapinda mara mbili { } kama inavyoonyeshwa badala ya kuandika nambari zote.

#!/bin/bash
# Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Vigezo vya Nafasi vya Bash

Kigezo cha nafasi ni kigezo maalum ambacho kinarejelewa kwenye hati wakati maadili yanapitishwa kwenye ganda lakini hayawezi kukabidhiwa. Vigezo vya nafasi huanzia $0 $1 $2 $3 …… hadi $9. Zaidi ya thamani ya $9, vigezo lazima vijumuishwe kwenye mabano yaliyopinda k.m $ {10}, $ {11} … na kadhalika.

Wakati wa kutekeleza hati, kigezo cha kwanza cha nafasi ambacho ni $0 huchukua jina la hati ya ganda. Kigezo cha $1 kinachukua kigezo cha kwanza kinachopitishwa kwenye terminal, $2 inachukua ya pili, $3 ya tatu na kadhalika.

Wacha tuunde script test.sh kama inavyoonyeshwa.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Ifuatayo, tekeleza hati na upe jina la kwanza na la pili kama hoja:

# bash test.sh James Kiarie

Kutoka kwa pato, tunaweza kuona kwamba tofauti ya kwanza ambayo imechapishwa ni jina la hati ya shell, katika kesi hii, test.sh. Baada ya hapo, majina yanachapishwa sambamba na vigezo vya nafasi vilivyofafanuliwa kwenye hati ya ganda.

Vigezo vya nafasi ni muhimu kwa kuwa vinakusaidia kubinafsisha data inayoingizwa badala ya kugawa thamani kwa kigezo.

Nambari za Toka za Amri ya Shell

Hebu tuanze kwa kujibu swali rahisi, Msimbo wa kutoka ni nini?

Kila amri inayotekelezwa kwenye ganda na mtumiaji au hati ya ganda ina hali ya kutoka. Hali ya kuondoka ni nambari kamili.

Hali ya kutoka ya 0 inamaanisha kuwa amri imetekelezwa kwa mafanikio bila makosa yoyote. Kitu chochote kati ya 1 hadi 255 kinaonyesha kuwa amri ilishindwa au haikutekelezwa kwa mafanikio.

Ili kupata hali ya kuondoka kwa amri, tumia $? Tofauti ya Shell.

Hali ya kuondoka ya pointi 1 kwa kosa la jumla au makosa yoyote yasiyoruhusiwa kama vile kuhariri faili bila ruhusa za sudo.

Hali ya kuondoka ya pointi 2 kwa matumizi yasiyo sahihi ya amri au kutofautiana kwa shell iliyojengwa.

Hali ya 127 ya kuondoka inaelekeza kwa amri isiyo halali ambayo kwa kawaida hutoa kosa la 'amri haikupatikana'.

Inachakata Pato la Amri za Shell ndani ya Hati

Katika uandishi wa bash, unaweza kuhifadhi matokeo ya amri katika kutofautisha kwa matumizi ya baadaye. Hii pia inajulikana kama uingizwaji wa amri ya ganda na inaweza kupatikana kwa njia zifuatazo.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Kwa mfano, unaweza kuhifadhi amri ya tarehe katika kigezo kinachoitwa leo na uite hati ya ganda ili kufichua tarehe ya sasa.

#!/bin/bash

today=$(date)

echo “Today is $today”

Hebu tuchukue mfano mwingine. Tuseme unataka kupata watumiaji halali wa kuingia kwenye mfumo wako wa Linux. Ungefanyaje kuhusu hilo? Kwanza, orodha ya watumiaji wote (watumiaji wa mfumo, mchakato, na kuingia) huhifadhiwa kwenye /etc/passwd faili.

Ili kutazama faili, utahitaji kutumia grep amri kutafuta watumiaji walio na /bin/bash sifa na utumie kata -c 1-10 amri kama inavyoonyeshwa kuonyesha herufi 10 za kwanza za majina.

Tumehifadhi amri ya paka kwa utofauti wa login_users.

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

Hii huleta mafunzo yetu juu ya kuunda hati rahisi za ganda hadi mwisho. Tunatumahi umepata hii muhimu.