“Loop” ulanyp, Baş skriptdäki faýly okamagyň dürli ýollary
Bu makala, wagtlaýyn aýlaw ulanyp, baş skriptlerdäki faýllary nädip okamalydygy barada. Faýl okamak programmirlemekde adaty bir iş. Dürli usullar we haýsy usuly ulanmak has täsirli bolmaly. Başda, ýekeje meselä köp tarapdan ýetip bolýar, ýöne bu işi ýerine ýetirmek üçin elmydama iň amatly ýol bar we biz oňa eýermeli.
Faýl mazmunyny aýlaw bilen nädip okamalydygyny görmezden ozal, aýlawyň işleýşine çalt başlangyç. Loop bir şerte baha berýär we şert dogry bolanda berlen kodlar toplumynyň üstünde gaýtalanýar.
while [ CONDITION ] do code block done
Aýlaw sintaksisinde bolalyň.
- aýlaw belli bir wagtdan soň şert bilen başlamaly.
- [] ýa-da [[]] içinde şert bolmaly. Aýlawyň ýerine ýetirilmegi üçin şert hemişe dogry bolmaly.
- Kodyň hakyky bloky ýerine ýetirilen we ýerine ýetirilen arasynda ýerleşdiriler.
NUMBER=0 while [[ $NUMBER -le 10 ]] do echo " Welcome ${NUMBER} times " (( NUMBER++ )) done
Bu, gaty ýönekeý mysal, bu ýerde NUMBER 10-dan uly bolmadykça ýerine ýetirilýär we echo beýany çap edilýär.
Şol bir wagtyň özünde, faýl setiriniň mazmunyny setir boýunça okamak üçin okamak buýrugyny ulanarys. Aşakda we okalýan buýruklaryň nädip birleşdirilendigi sintaksisidir. Indi faýly giriş hökmünde geçirmegiň dürli ýollary bar we hemmesini göreris.
# SYNTAX while read VARIABLE do code done
Linux-da turbalar
Adatça görnüşi we ş.m. ulanarys.
Edil şonuň ýaly-da, faýlyň mazmunyny okamak we wagtlaýyn aýlaw üçin bu ýerde pişik buýrugyny ulanarys. Görkezmek üçin/etc/passwd faýly ulanýaryn, ýöne bu faýl bilen bulaşdyrmak maslahat berilmeýär, şonuň üçin bu faýlyň ätiýaçlyk nusgasyny alyň we isleseňiz oýnaň.
cat /etc/passwd | while read LREAD do echo ${LREAD} done
Aboveokardaky kod tabşyrylanda näme boljagyny aýyralyň.
- cat/etc/passwd faýlyň mazmunyny okar we turbadan giriş hökmünde geçirer.
- okamak buýrugy, pişik buýrugyndan giriş hökmünde geçen her setiri okaýar we LREAD üýtgeýjisinde saklaýar.
- okamak buýrugy, EOL düşündirilýänçä faýl mazmunyny okar.
Şeýle hem kelle, guýruk ýaly beýleki buýruklary ulanyp, aýlawda turba geçirip bilersiňiz.
head -n 5 /etc/passwd | while read LREAD do echo ${LREAD} done
Linux-a giriş gönükdirmesi
Faýlyň mazmunyny Giriş gönükdirme operatory (<)
ulanyp, aýlawda gönükdirip bileris.
while read LREAD do echo ${LREAD} done < /etc/passwd | head -n 5
Şeýle hem, faýlyň adyny üýtgeýjä saklap, gönükdirme operatoryndan geçirip bilersiňiz.
FILENAME="/etc/passwd" while read LREAD do echo ${LREAD} done < ${FILENAME}
Faýl atlaryny skriptiňize argument hökmünde geçirip bilersiňiz.
while read LREAD do echo ${LREAD} done < $1 | head -n 5
Içerki meýdan bölüji
Dürli görnüşli faýl formatlary (CSV, TXT, JSON) bilen işläp bilersiňiz we faýlyň mazmunyny aýratyn delimiter esasynda bölmek isläp bilersiňiz. Bu ýagdaýda faýlyň mazmunyny bölmek we üýtgeýänlerde saklamak üçin\Içerki meýdan bölüji (IFS) ulanyp bilersiňiz.
Onuň nähili işleýändigini görkezmäge rugsat ediň. Aýralyk hökmünde (:)
sütüni bolan/etc/passwd faýlyna göz aýlaň. Indi her sözi setirden bölüp, aýratyn üýtgeýjide saklap bilersiňiz.
Aşakdaky mysalda, men etc/etc/passwd faýlyny bölüji hökmünde bölýärin we her bölünişi dürli üýtgeýjilere saklaýaryn.
while IFS=":" read A B C D E F G do echo ${A} echo ${B} echo ${C} echo ${D} echo ${E} echo ${F} echo ${G} done < /etc/passwd
Ekranyň ululygyny göz öňünde tutup, ýokardaky skrinshotda diňe bir setir bölünişini görkezdim.
Linux-da boş setirler
Faýlyň mazmunyna göz aýlanyňyzda boş setirler hasaba alynmaýar. Muny görkezmek üçin aşakdaky mazmunly nusga faýly döretdim. 4 setir we az boş setir bar, öňdebaryjy giňişlik, yzky ak giňişlik, 2-nji setirde goýma nyşanlary we käbir gaçmak nyşanlary bar (\ n we\t).
while read LREAD do echo ${LREAD} done < testfile
Netijä serediň, boş setir hasaba alynmaýar. Mundan başga-da, okamak üçin buýruk bilen ak boşluklaryň nädip kesilendigi bellärliklidir. Faýl mazmunyny okanyňyzda boş setirleri äsgermezlik etmegiň ýönekeý usuly, synag operatoryny setiriň uzynlygynyň noldygyny ýa-da ýokdugyny barlaýan -z
baýdagy bilen ulanmakdyr. Indi şol bir mysaly gaýtalalyň, ýöne bu gezek synag operatory bilen.
while read LREAD do if [[ ! -z $LREAD ]] then echo ${LREAD} fi done < testfile
Indi çykyşdan boş setirleriň hasaba alynmaýandygyny görüp bilersiňiz.
Nyşanlardan gaçmak
Faýl okalanda \n
, \t
, \c
ýaly nyşanlardan gaçmaň. Muny görkezmek üçin, gaçmak nyşanlary az bolan şol bir nusga faýly ulanýaryn.
while read LREAD do echo ${LREAD} done < testfile
Çykyşdan gaçmak nyşanlarynyň manysyny ýitirendigini görüp bilersiňiz we \n
we \t
ýerine diňe n we t çap edilýär. Yzyna düşmeginiň öňüni almak üçin -r
ulanyp bilersiňiz.
while read -r LREAD do echo ${LREAD} done < testfile
Bu makala üçin. Seslenmeler ýa-da maslahatlar bar bolsa, sizden eşitmek isleýäris. Siziň pikirleriňiz, has gowy mazmun döretmäge kömek edýär. Okaň we goldaw beriň.