“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ň.