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.