Diferite moduri de a citi fișierul în scriptul Bash folosind While Loop
Acest articol este despre cum să citiți fișiere în scripturi bash folosind un while loop. Citirea unui fișier este o operație obișnuită în programare. Ar trebui să fiți familiarizați cu diferite metode și care metodă este mai eficientă de utilizat. În bash, o singură sarcină poate fi realizată în multe moduri, dar există întotdeauna o modalitate optimă de a realiza sarcina și ar trebui să o urmăm.
Înainte de a vedea cum să citiți conținutul fișierului folosind while loop, un manual rapid despre cum funcționează bucla while. În timp ce bucla evaluează o condiție și repetă un anumit set de coduri atunci când condiția este adevărată.
în timp ce [CONDITION] face bloc de cod. Terminat.
Să ne descompunem while loop sintaxă.
while loop ar trebui să înceapă cu un cuvânt cheie while urmat de o condiție.
A condiție ar trebui să fie închise în interior [ ] sau [[ ]]. Condiția ar trebui să revină întotdeauna adevărată pentru ca bucla să fie executată.
Blocul de cod propriu-zis va fi plasat între do și Terminat.
NUMBER = 0 în timp ce [[NUMBER $ -le 10]] ecou „Bun venit de {NUMBER} de ori” ((NUMBER ++)) Terminat.
În timp ce Loop
Acesta este un exemplu foarte simplu, în care buclă execută până NUMĂR nu este mai mare decât 10 și imprimă declarație ecou.
Impreuna cu in timp ce vom folosi citit comanda pentru a citi conținutul unui fișier linie cu linie. Mai jos este sintaxa cum in timp ce și citit comenzile sunt combinate. Acum există diferite moduri de a trece fișierul ca intrare și le vom vedea pe toate.
# SINTAXĂ. în timp ce citiți VARIABIL. face cod. Terminat.
Conducte în Linux
În mod normal vom folosi comandă pisică pentru a vizualiza conținutul fișierului de la terminal. De asemenea, vom canaliza ieșirea fișierului comandă pisică la alte comenzi precum grep, fel, etc.
În mod similar, vom folosi comandă pisică aici pentru a citi conținutul fișierului și a-l trimite la un in timp ce buclă. Pentru demonstrație, îl folosesc /etc/passwd fișier, dar nu este recomandabil să vă încurcați cu acest fișier, deci luați o copie de rezervă a acestui fișier și jucați-l dacă doriți acest lucru.
cat / etc / passwd | în timp ce citiți LREAD. face ecou $ {LREAD} Terminat.
Conducte în Linux
Să prezentăm ce se va întâmpla atunci când este trimis codul de mai sus.
cat / etc / passwd va citi conținutul fișierului și îl va transmite ca intrare prin conductă.
citit comanda citește fiecare linie transmisă ca intrare de la comanda cat și o stochează în CITIȚI variabil.
citit comanda va citi conținutul fișierului până la EOL este interpretat.
De asemenea, puteți utiliza alte comenzi precum cap, coadă și țeavă la bucla while.
head -n 5 / etc / passwd | în timp ce citiți LREAD. face ecou $ {LREAD} Terminat.
Comandamentul principal
Redirecționarea intrărilor în Linux
Putem redirecționa conținutul fișierului către while loop folosind operatorul de redirecționare de intrare (.
în timp ce citiți LREAD. face ecou $ {LREAD} făcut etc / passwd | cap -n 5.
Redirecționarea intrărilor
De asemenea, puteți stoca numele fișierului către o variabilă și îl puteți transmite printr-un operator de redirecționare.
FILENAME = "/ etc / passwd" în timp ce citiți LREAD. face ecou $ {LREAD} gata Stocați numele fișierului în variabilă
De asemenea, puteți transmite numele fișierelor ca argument către scriptul dvs.
în timp ce citiți LREAD. face ecou $ {LREAD} gata Stocați numele fișierului ca argument
Separator de câmp intern
Puteți lucra cu diferite tipuri de formate de fișiere (CSV, txt, JSON) și poate doriți să împărțiți conținutul fișierului pe baza unui delimitator personalizat. În acest caz, puteți utiliza „Separator de câmp intern (IFS)”Pentru a împărți conținutul fișierului și a-l stoca în variabile.
Permiteți-mi să demonstrez cum funcționează. Aruncați o privire la /etc/passwd fișier care are două puncte (:) ca delimitator. Acum puteți împărți fiecare cuvânt dintr-o linie și îl puteți stoca într-o variabilă separată.
În exemplul de mai jos, mă despart /etc/passwd fișier cu două puncte ca separator și stocând fiecare împărțit în variabile diferite.
în timp ce IFS = ":" citiți A B C D E F G. ecou $ {A} ecou $ {B} ecou $ {C} ecou $ {D} ecou $ {E} ecou $ {F} ecou $ {G} făcut etc / passwd.
Separator de câmp intern
Am afișat doar o linie împărțită în captura de ecran de mai sus, având în vedere dimensiunea capturii de ecran.
Linii goale în Linux
Liniile goale nu sunt ignorate atunci când buclă prin conținutul fișierului. Pentru a demonstra acest lucru, am creat un fișier mostră cu conținutul de mai jos. Există 4 linii și câteva linii goale, spațiu alb principal, spațiu alb final, caractere tab în linia 2 și câteva caractere de evacuare (\ n și \ t).
Fișier cu linii goale
în timp ce citiți LREAD. face ecou $ {LREAD} făcut Linia goală nu este ignorată
Vedeți rezultatul, linia goală nu este ignorată. De asemenea, un lucru interesant de remarcat este modul în care spațiile albe sunt tăiate de citit comanda. O modalitate simplă de a ignora liniile goale atunci când citiți conținutul fișierului este de a utiliza operatorul de testare cu -z pavilion care verifică dacă lungimea șirului este zero. Acum să repetăm același exemplu, dar de data aceasta cu un operator de testare.
în timp ce citiți LREAD. faceți dacă [[! -z $ LREAD]] apoi ecou $ {LREAD} fi. făcut Linii goale ignorate
Acum, din ieșire, puteți vedea că liniile goale sunt ignorate.
Personaje de evadare
Evadează personaje precum \ n, \ t, \ c nu va fi imprimat la citirea unui fișier. Pentru a demonstra acest lucru, folosesc același fișier eșantion care are puține caractere de evadare.
Fișier cu caractere de evacuare
în timp ce citiți LREAD. face ecou $ {LREAD} făcut Caracterul Escape în Linux
Puteți vedea din ieșire personajele de evadare și-au pierdut sensul și numai n și t sunt tipărite în loc de \ n și \ t. Poți să folosești -r pentru a preveni interpretarea backslash.
în timp ce citiți -r LREAD. face ecou $ {LREAD} făcut Împiedicați interpretarea înapoi
Gata pentru acest articol. Ne-ar plăcea să ne răspundem dacă există feedback sau sfaturi. Feedback-ul dvs. ne ajută să creăm conținut mai bun. Continuați să citiți și susțineți în continuare.