Į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., Iš išvesties matote, kad pabėgimo simboliai prarado prasmę ir vietoj 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.
,
, while read LREAD
do
echo ${LREAD}
done < testfile
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