Bash: pri čítaní riadku

Bash While Read Line



Keď pracujete na bash skriptoch, niekedy budete možno musieť prečítať súbor po riadkoch. Vysvetlíme to na príklade. V textovom súbore máte nejaké údaje, ktoré by sa mali vykonať alebo spracovať pomocou skriptu. Spustenie skriptu bash na spracovanie textového súboru je teda veľmi odlišné. Na čítanie súboru po riadkoch musíte postupovať podľa zadanej syntaxe. Tento článok vám pomôže prečítať riadok zo súboru pomocou slučky while v Bash.

Základná syntax riadku počas čítania

Nasledujúca syntax sa používa pre shell bash na čítanie súboru pomocou cyklu while:







kým čítať -rriadok;
urobiť
zahodil '$ riadok';
hotový <input.file

Voľba „-r“ vo vyššie uvedenej syntaxi odovzdaná príkazu na čítanie, ktorá zabraňuje interpretácii únikov spätných lomiek. Voľba „input_file“ predstavuje názov vášho súboru, ku ktorému chcete získať prístup pomocou príkazu „read“.



Interný oddeľovač polí skrátený ako IFS je možné použiť predtým, ako je príkaz na čítanie nastavený na nulový reťazec, ktorý zabraňuje orezaniu úvodných alebo koncových medzier.



kým IFS=čítať -rriadok;
urobiť
zahodil $ riadok;
hotový <input.file

Otvorte terminál pomocou skratky Ctrl + Alt + t a potom na ňom spustite nasledujúce príkazy.





Príklad č. 1: Čítanie súborov po riadkoch

Zoberme si príklad, v ktorom predpokladajme, že máme súbor s názvom OS.txt, ktorý obsahuje názvy všetkých dôležitých distribúcií Linuxu. Ak chcete čítať súbor bez použitia príkazu „mačka“, na tento účel môžete na vykonanie konkrétnej úlohy vykonať nasledujúci príkaz. Použijeme cyklus while, ktorý načíta každý riadok zo súboru OS.txt a uloží obsah v každom kroku do premennej $ line, ktorú môžete neskôr zobraziť.

Prilepte nasledujúce názvy distribúcií Linuxu do súboru OS.txt



CentOS
Ubuntu
Debian
LinuxMint $kým čítaťriadok;
urobiť
zahodil $ riadok;
hotový <OS.txt


Z vyššie uvedeného príkazu dostanete v okne terminálu nasledujúcu odpoveď:

Príklad č. 2: Čítanie súboru pomocou skriptu bash

Vytvorte súbor bash a potom do tohto súboru pridajte nižšie uvedený kód, aby ste si mohli prečítať obsah súboru. Predchádzajúci textový súbor môžete uložiť do novej premennej $ filename a na udržanie hodnoty každého riadka sa používa premenná $ n. Teraz pomocou slučky while prečítame každý riadok zo súboru s konkrétnym číslom riadka.

#!/bin/bash
názov súboru='OS.txt'
n=1
kým čítaťriadok;
urobiť
# na prečítanie každého riadku
zahodil „Distribučná linka OS č.$ n:$ riadok'
n= $((n+1))
hotový < $ názov súboru

Uložte súbor s názvom OSinfo.sh a na terminál zadajte nasledujúci príkaz na spustenie vyššie uvedeného bash skriptu.

$bashOSinfo.sh

Teraz spustite príkaz cat a zobrazte pôvodný obsah súboru.

$katOS.txt

Alternatívna metóda na čítanie súborov

Použitie odovzdávania názvu súboru z príkazu

V súbore bash musíte pridať nasledujúci skript kódu. V tomto skripte musíme ako argument brať názov súboru. Po prvé, hodnota argumentu je prečítaná premennou $ 1, ktorá má názov súboru na čítanie. Skontroluje, či názov súboru existuje na určenom mieste, a potom pomocou slučky while prečíta súbor po riadkoch podobne ako v predchádzajúcom prípade.

#!/bin/bash
názov súboru=1 dolár
kým čítaťriadok;urobiť
# prečítanie každého riadku
zahodil $ riadok
hotový < $ súbor.TXT

Uložte vyššie uvedený skript s názvom „Readline.sh“ a spustením nasledujúceho príkazu na termináli spustíte vyššie uvedený skript:

Vo vyššie uvedenom výstupe uvidíte, že súbor „OSinfo.txt“ prechádza ako argument a obsah súboru „OSinfo.txt“ sa zobrazí po odstránení medzier. Pôvodný obsah súboru môžete zobraziť spustením súboru „cat OSinfo.txt“.

Záver

V tomto článku sme diskutovali o tom, ako čítať riadky pomocou slučky while v programovaní bash. Implementovali sme rôzne metódy pomocou bash skriptu alebo môžete jednoducho použiť textový súbor na čítanie úlohy súboru po riadkoch. Ak máte záujem dozvedieť sa viac príkladov, potom pomocou vyššie uvedenej syntaxe môžete vykonať aj vo svojom systéme. Dúfam, že sa vám tento návod páčil a bude pre vás jedinečný. Dajte nám vedieť v prípade akejkoľvek chyby.