Įvairūs būdai skaityti failą „Bash“ scenarijuje naudojant „Loop“


Šis straipsnis yra apie tai, kaip skaityti failus „bash“ scenarijuose naudojant „loop“. Failo skaitymas yra įprasta programavimo operacija. Turėtumėte žinoti įvairius metodus ir tai, kurį metodą naudoti efektyviau. Vieną užduotį galima pasiekti įvairiais būdais, tačiau visada yra optimalus būdas atlikti užduotį ir mes turėtume ja vadovautis.

Prieš pamatydami, kaip skaityti failo turinį naudojant „while loop“, greitai aprašykite, kaip veikia ciklas. Nors ciklas vertina sąlygą ir kartoja nurodytą kodų rinkinį, kai sąlyga yra teisinga.

while [ CONDITION ]
do
    code block
done

Suskirstykime ciklo sintaksę.

  • o ciklas turėtų prasidėti „while“ raktiniu žodžiu ir sąlyga.
  • Sąlyga turėtų būti įtraukta į [] arba [[]]. Sąlyga visada turėtų būti teisinga, kad ciklas būtų vykdomas.
  • Faktinis kodo blokas bus tarp atlikimo ir atlikimo.

NUMBER=0

while [[ $NUMBER -le 10 ]]
do
    echo " Welcome ${NUMBER} times "
    (( NUMBER++ ))
done

Tai labai paprastas pavyzdys, kai ciklas vykdomas tol, kol NUMBER yra ne didesnis kaip 10 ir išspausdina echo sakinį.

Kartu naudosime komandą read skaityti failo turinį eilutėmis. Žemiau pateikiama sintaksė, kaip derinamos komandos „while“ ir „read“. Dabar yra įvairių būdų perduoti failą kaip įvestį, ir mes juos visus pamatysime.

# SYNTAX
while read VARIABLE
do
    code
done

Vamzdynai „Linux“ sistemoje

Paprastai mes naudosime rūšiavimą ir kt.

Panašiai čia naudosime komandą „cat“, kad perskaitytume failo turinį ir perkelkime jį į tam tikrą kilpą. Norėdami parodyti, aš naudoju/etc/passwd failą, tačiau nepatartina su juo susipainioti, todėl pasiimkite atsarginę šio failo kopiją ir žaiskite su ja, jei to norite.

cat /etc/passwd | while read LREAD
do
    echo ${LREAD}
done

Išskaidykime, kas nutiks, kai bus pateiktas aukščiau pateiktas kodas.

  • cat/etc/passwd perskaitys failo turinį ir perduos jį kaip įvestį per vamzdį.
  • komanda „nuskaityti“ nuskaito kiekvieną eilutę, perduotą kaip įvestį iš katės komandos, ir išsaugo ją kintamajame LREAD
  • komanda „read“ nuskaitys failo turinį, kol bus išaiškinta EOL.

Taip pat galite naudoti kitas komandas, pvz., Galvą, uodegą ir vamzdį, o kilpa.

head -n 5 /etc/passwd | while read LREAD
do
    echo ${LREAD}
done

Įvesties peradresavimas sistemoje „Linux“

Naudodami įvesties peradresavimo operatorių (<) galime peradresuoti failo turinį į ciklą.

while read LREAD
do
    echo ${LREAD}
done < /etc/passwd | head -n 5

Taip pat galite išsaugoti failo pavadinimą kintamajam ir perduoti jį peradresavimo operatoriui.

FILENAME="/etc/passwd"

while read LREAD
do
    echo ${LREAD}
done < ${FILENAME}

Jūs taip pat galite perduoti failų pavadinimus kaip argumentą savo scenarijui.

while read LREAD
do
    echo ${LREAD}
done < $1 | head -n 5

Vidinis lauko separatorius

Galite dirbti su įvairių tipų failų formatais (CSV, TXT, JSON) ir galbūt norėsite padalyti failo turinį pagal pasirinktinį skiriklį. Tokiu atveju galite naudoti „Vidinio lauko separatorių (IFS)“, kad padalintumėte failo turinį ir išsaugotumėte jį kintamuosiuose.

Leiskite man parodyti, kaip tai veikia. Pažvelkite į/etc/passwd failą, kurio atribiklis yra dvitaškis (:) . Dabar galite suskaidyti kiekvieną žodį iš eilutės ir laikyti jį atskirame kintamajame.

Žemiau pateiktame pavyzdyje aš padaliju/etc/passwd failą su dvitaškiu kaip atskyriklį ir saugau kiekvieną padalytą į skirtingus kintamuosius.

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

Atsižvelgdamas į ekrano dydį, aukščiau pateiktoje ekrano kopijoje rodžiau tik vieną eilutę.

„Linux“ tuščios eilutės

Tuščios eilutės nepaisomos, kai peržiūrite failo turinį. Norėdami tai parodyti, sukūriau failo pavyzdį su toliau pateiktu turiniu. Yra 4 eilutės ir nedaug tuščių eilučių, einančių tarpų, galų tarpų, 2 eilutėje skirtukų simbolių ir keletas pabėgimo simbolių ( ir).

while read LREAD
do
    echo ${LREAD}
done < testfile

Žiūrėkite rezultatą, tuščia eilutė nepaisoma. Be to, įdomus dalykas, kurį reikia atkreipti dėmesį į tai, kaip skaitymo komanda apkarpo baltąsias vietas. Paprastas būdas ignoruoti tuščias eilutes skaitant failo turinį yra naudoti bandomąjį operatorių su žyma -z , kuri patikrina, ar eilutės ilgis yra lygus nuliui. Dabar pakartokime tą patį pavyzdį, bet šį kartą su bandomuoju operatoriumi.

while read LREAD
do
    if [[ ! -z $LREAD ]]
    then
        echo ${LREAD} 
    fi
done < testfile

Dabar iš išvesties galite matyti, kad tuščios eilutės nepaisomos.

Pabėgimo personažai

Pabėgti simbolius, pvz., , ,

while read LREAD
do
    echo ${LREAD}
done < testfile

Iš išvesties matote, kad pabėgimo simboliai prarado prasmę ir vietoj spausdinami tik n ir t ir . Norėdami išvengti atgalinio brūkšnio aiškinimo, galite naudoti -r .

while read -r LREAD
do
    echo ${LREAD}
done < testfile

Tai šiam straipsniui. Mes norėtume iš jūsų sužinoti, jei yra atsiliepimų ar patarimų. Jūsų atsiliepimai yra tai, kas padeda mums sukurti geresnį turinį. Skaityk ir palaikyk.