Kif Oħloq Shell Scripts Sempliċi fil-Linux


Il-ħolqien ta 'skripts tal-qoxra hija waħda mill-aktar ħiliet essenzjali li l-utenti tal-Linux għandu jkollhom fil-ponta ta' subgħajhom. L-iskripts tal-shell għandhom rwol enormi fl-awtomatizzazzjoni tal-ħidmiet ripetittivi li inkella jkunu tedjanti fl-eżekuzzjoni linja b'linja.

F'dan it-tutorja, aħna nenfasizzaw xi wħud mill-operazzjonijiet bażiċi ta 'scripting tal-qoxra li kull utent Linux għandu jkollu.

1. Oħloq Script Shell sempliċi

Skript tal-qoxra huwa fajl li jinkludi test ASCII. Se nibdew billi noħolqu script shell sempliċi, u biex nagħmlu dan, se nużaw editur tat-test. Hemm numru mhux ħażin ta 'editur vim.

Nibdew billi noħolqu skript sempliċi li juri \Hello dinja meta jiġi eżegwit.

$ vim hello.sh

Paste l-kontenut li ġej fil-fajl u ssejvja.

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

Ejja mmorru fuq l-iskrittura tal-qoxra linja b'linja.

  • L-ewwel linja – #!/bin/bash – hija magħrufa bħala l-header shebang. Din hija kostruzzjoni speċjali li tindika liema programm se jintuża biex jinterpreta l-iskrittura. F'dan il-każ, din tkun il-qoxra tal-bash indikata minn /bin/bash. Hemm lingwi oħra ta' skripting bħal Python li huwa indikat b'#!/usr/bin/python3 u Perl li l-header shebang tiegħu huwa indikat b'#!/usr/bin/perl>.
  • It-tieni linja hija kumment. Kumment huwa dikjarazzjoni li tiddeskrivi x'jagħmel script shell u ma jiġix eżegwit meta l-iskript jitmexxa. Il-kummenti dejjem ikunu preċeduti mis-sinjal hash #.
  • L-aħħar linja hija l-kmand li jistampa l-messaġġ ‘Hello World’ fuq it-terminal.

Il-pass li jmiss huwa li tagħmel l-iskrittura eżekutibbli billi tassenja permess ta 'eżekuzzjoni billi tuża l-kmand chmod kif muri.

$ chmod +x  hello.sh

Fl-aħħarnett, mexxi l-iscript tal-qoxra billi tuża waħda mill-kmandi:

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

2. L-użu ta' Dikjarazzjonijiet Kundizzjonali biex Teżegwixxi Kodiċi

Bħal lingwi ta 'programmar oħra, id-dikjarazzjonijiet kundizzjonali jintużaw fl-iskript bash biex jittieħdu deċiżjonijiet, b'varjazzjoni żgħira biss fis-sintassi. Se nkopru d-dikjarazzjonijiet kundizzjonali if, if-else, u elif.

Id-dikjarazzjoni if tista' tintuża biex tittestja kundizzjonijiet singoli jew multipli. Nibdew bl-użu fundamentali tad-dikjarazzjoni if biex tittestja kundizzjoni waħda. Id-dikjarazzjoni if hija definita mill-blokki if ... fi.

if command
then
  statement
fi

Ejja nagħtu ħarsa lejn l-iskrittura tal-qoxra hawn taħt.

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

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

L-iskript tal-qoxra ta 'hawn fuq iħeġġeġ lill-utent biex jipprovdi punteġġ li mbagħad jinħażen f'x varjabbli. Jekk il-punteġġ jikkorrispondi għal 70, l-iskript jirritorna l-output \Xogħol tajjeb!. L-operatur tat-tqabbil == jintuża biex jittestja jekk il-punteġġ imdaħħal, li huwa maħżun fil-varjabbli x, huwiex ekwivalenti sa 100.

Operaturi oħra ta' tqabbil li tista' tuża jinkludu:

  • -eq – Ugwali għal
  • -ne – Mhux ugwali għal
  • -lt – Inqas minn
  • -le – Inqas minn jew ugwali għal
  • -lt – Inqas minn
  • -ge – Ikbar minn jew ugwali għal

Pereżempju, il-blokk tad-dikjarazzjoni if hawn taħt jistampa 'Work Harder' jekk il-punteġġ tal-input huwa kwalunkwe valur inqas minn 50.

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

Għal sitwazzjonijiet fejn għandek 2 riżultati possibbli: – jekk dan jew dak – id-dikjarazzjoni jekk inkella tkun utli.

if command
then
  statement1
else
  statement2
fi

L-iskrittura hawn taħt jaqra l-punteġġ tal-input u jiċċekkja jekk huwiex akbar minn jew ugwali għal 70.

Jekk il-punteġġ huwa akbar minn jew ugwali għal 70, ikollok messaġġ ‘Great job, You passd!’. Madankollu, jekk il-punteġġ jaqa' taħt is-70, l-output 'Int fallejt' jiġi stampat.

#!/bin/bash

echo 'Enter the score'

read x

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

F'xenarji fejn hemm kundizzjonijiet multipli u riżultati differenti, tintuża d-dikjarazzjoni if-elif-else. Din id-dikjarazzjoni tieħu l-format li ġej.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Pereżempju, għandna skript għal lotterija li jiċċekkja jekk in-numru mdaħħal hux 90, 60 jew 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. L-użu tad-Dikjarazzjoni If b'AND Loġika

Tista' tuża d-dikjarazzjoni if flimkien mal-operatur loġiku AND biex tesegwixxi kompitu jekk ikunu sodisfatti żewġ kundizzjonijiet. L-operatur && jintuża biex jindika l-loġika AND.

#!/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. L-użu tad-Dikjarazzjoni If mal-Loġika JEW

Meta tuża l-loġika OR, li hija rappreżentata bis-simbolu ||, jew waħda mill-kundizzjonijiet jeħtieġ li tkun sodisfatta bl-iskrittura biex tagħti r-riżultati mistennija.

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

Uża Looping Constructs

Bash loops jippermettu lill-utenti biex iwettqu serje ta 'kompiti sakemm jinkiseb ċertu riżultat. Dan huwa utli fit-twettiq ta 'kompiti ripetittivi. F'din it-taqsima, se nagħtu ħarsa lejn xi wħud mil-linji li ssibu wkoll f'lingwi ta' programmar oħra.

Din hija waħda mill-linji eħfef biex taħdem magħhom. Is-sintassi hija pjuttost sempliċi:

while  <some test>
do
 commands
done

Il-linja while hawn taħt telenka n-numri kollha minn 1 sa 10 meta jiġu eżegwiti.

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

Ejja niddiskutu l-linja while:

Il-counter varjabbli huwa inizjalizzat għal 1. U filwaqt li l-varjabbli huwa inqas minn jew ugwali għal 10, il-valur tal-counter se jiżdied sakemm il-kundizzjoni tkun sodisfatta. Il-linja echo $counter jistampa n-numri kollha minn 1 sa 10.

Bħall-loop while, jintuża for loop biex tesegwixxi kodiċi b'mod iterattiv. I.e. irrepeti l-eżekuzzjoni tal-kodiċi kemm jista 'jkun definit mill-utent.

Is-sintassi hija:

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

Il-linja for hawn taħt itenni minn 1 sa 10 u tipproċessa l-valuri tagħhom fuq l-iskrin.

Mod aħjar biex jinkiseb dan huwa li tiddefinixxi firxa billi tuża ċ-ċingi kaboċċi doppji { } kif muri minflok ma tittajpja n-numri kollha.

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

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

Bash Parametri Pożizzjonali

Parametru pożizzjonali huwa varjabbli speċjali li huwa referenzjat fl-iskrittura meta l-valuri jiġu mgħoddija fuq il-qoxra iżda ma jistgħux jiġu assenjati. Il-parametri pożizzjonali jimxu minn $0 $1 $2 $3 …… sa $9. Lil hinn mill-valur ta' $9, il-parametri għandhom ikunu magħluqa f'parentesi kaboċċi eż $ {10}, $ {11} ... eċċ.

Meta tesegwixxi l-iskrittura, l-ewwel parametru pożizzjonali li huwa $0 jieħu l-isem tal-iskript tal-qoxra. Il-parametru $1 jieħu l-ewwel varjabbli li jgħaddi fuq it-terminal, $2 jieħu t-tieni, $3 it-tielet u l-bqija.

Ejja noħolqu script test.sh kif muri.

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

Sussegwentement, eżegwixxi l-iskrittura u agħti l-ewwel u t-tieni isem bħala l-argumenti:

# bash test.sh James Kiarie

Mill-output, nistgħu naraw li l-ewwel varjabbli li hija stampata hija l-isem tal-iskript tal-qoxra, f'dan il-każ, test.sh. Minn hemm 'il quddiem, l-ismijiet jiġu stampati li jikkorrispondu mal-parametri pożizzjonali definiti fl-iskript tal-qoxra.

Il-parametri pożizzjonali huma utli peress li jgħinuk tippersonalizza d-dejta li tkun qed tiddaħħal minflok ma tassenja b'mod espliċitu valur lil varjabbli.

Kodiċi tal-Ħruġ tal-Kmand Shell

Ejja nibdew billi nwieġbu mistoqsija sempliċi, X'inhu kodiċi tal-ħruġ?

Kull kmand esegwit fuq il-qoxra minn utent jew script shell għandu status ta 'ħruġ. Status ta' ħruġ huwa numru sħiħ.

Status ta 'ħruġ ta' 0 jimplika li l-kmand esegwit b'suċċess mingħajr ebda żball. Xi ħaġa bejn 1 sa 255 turi li l-kmand falla jew ma esegwix b'suċċess.

Biex issib l-istatus ta' ħruġ ta' kmand, uża l-varjabbli Shell $?.

Status ta' ħruġ ta' 1 jindika żball ġenerali jew xi żbalji mhux permessi bħall-editjar ta' fajls mingħajr permessi sudo.

Status ta' ħruġ ta' 2 punti għal użu mhux korrett ta' kmand jew varjabbli tal-qoxra integrata.

L-istatus ta’ ħruġ ta’ 127 jindika kmand illegali li normalment iwassal għall-iżball ta’ ‘kmand mhux misjub’.

Ipproċessar Output ta 'Shell Kmandi fi Script

Fil-bash scripting, tista 'taħżen l-output ta' kmand f'varjabbli għal użu futur. Dan jissejjaħ ukoll sostituzzjoni tal-kmand tal-qoxra u jista 'jinkiseb fil-modi li ġejjin.

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

Pereżempju, tista 'taħżen il-kmand tad-data f'varjabbli msejħa llum u ċċempel l-iskrittura tal-qoxra biex tikxef id-data kurrenti.

#!/bin/bash

today=$(date)

echo “Today is $today”

Ejja nieħdu eżempju ieħor. Ejja ngħidu li trid issib l-utenti validi tal-login fis-sistema Linux tiegħek. Kif tmur dwarha? L-ewwel, il-lista tal-utenti kollha (kemm l-utenti tas-sistema, tal-proċess, kif ukoll tal-login) hija maħżuna fil-fajl /etc/passwd.

Biex tara l-fajl, ikollok bżonn tuża l-kmand grep biex tfittex utenti bl-attribut/bin/bash u tuża l-kmand cut -c 1-10 kif muri biex turi l-ewwel 10 karattri tal-ismijiet.

Aħna ħżinna l-kmand tal-qtates għall-varjabbli 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

Dan iġib fit-tmiem it-tutorja tagħna dwar il-ħolqien ta' skripts tal-qoxra sempliċi. Nittamaw li sibt dan siewi.