Fun with Music and Programming by Connor Harris and Stephen Krewson
Sadržaj:
- Čitanje datoteka po liniji sintaksa
- Čitanje primjera datoteke po redovima
- Alternativne metode čitanja datoteka
- Korištenje procesne zamjene
- Upotrebom niza ovdje
- Upotreba deskriptora datoteke
- Zaključak
Kad pišete Bashove skripte, ponekad ćete se naći u situacijama u kojima morate pročitati datoteku po red. Na primjer, možda imate tekstualnu datoteku koja sadrži podatke koje treba obraditi skripta.
U ovom ćemo udžbeniku razgovarati o načinu čitanja datoteke po retku u Bashu.
Čitanje datoteka po liniji sintaksa
Najopćenitija sintaksa za čitanje datoteke redak po red je sljedeća:
while IFS= read -r line do echo "$line" done < input_file
ili ekvivalentna inačica jednog retka:
while IFS= read -r line; do echo $line; done < input_file
Kako radi?
Ulazna datoteka (
input_file
) je naziv datoteke koju želite otvoriti za čitanje pomoću naredbe za
read
. Naredba za
read
čita datoteku liniju po red, dodjeljujući svaki redak
line
varijabli. Nakon obrade svih linija, petlja će prestati. Interni razdjelnik polja (
IFS
) postavljen je na null niz kako bi se sačuvao vodeći i kasni razmak bjeline što je zadano ponašanje naredbe za
read
.
Čitanje primjera datoteke po redovima
Pogledajmo sljedeći primjer. Pretpostavimo da imamo datoteku pod nazivom
distros.txt
koja sadrži popis nekih od najpopularnijih distribucija Linuxa i njihovih upravitelja paketa odvojenih zarezom (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Da biste pročitali datoteku liniju po red, pokrenuli biste u svom terminalu sljedeći kôd:
while IFS= read -r line do echo "$line" done < distros.txt
Kôd će čitati datoteku po red, dodijeliti svaku liniju varijabli i odjeknuti varijablom. Osnovnost vidjela bi isti izlaz kao da prikazujete sadržaj datoteke pomoću cat naredbe.
Što ako želite ispisati samo distribucije koje upotrebljavaju apt? Jedan od načina bila bi upotreba stavka if i provjera sadrži li linija odgovarajuću podstvor:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Kad čitate datoteku liniju po red, također možete proslijediti više od jedne varijable naredbi za čitanje koja će liniju podijeliti u polja na temelju
IFS
. Prvo polje dodijeljeno je prvoj varijabli, drugo drugom varijablu i tako dalje. Ako postoji više polja od varijabli, preostala polja dodijeljena su posljednjoj varijabli.
U sljedećem primjeru postavljamo IFS na zarez (
,
) i prosljeđujemo dvije varijable
distro
i
pm
naredbi read. Sve od početka retka do prvog zareza će biti dodijeljeno prvoj varijabli (
distro
), a ostatak redaka bit će dodijeljen drugoj varijabli (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Alternativne metode čitanja datoteka
Korištenje procesne zamjene
Zamjena procesa omogućava vam da iz naziva naredbe proslijedite kao naziv datoteke:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Upotrebom niza ovdje
Here String je varijanta dokumenta Here. Niz
(cat input_file)
zadržat će nove
(cat input_file)
:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Upotreba deskriptora datoteke
Ulaz u petlju također možete dati pomoću deskriptora datoteke:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Kad radite s deskriptorima datoteka, koristite broj između 4 i 9 da biste izbjegli sukob s opisnicima internih datoteka ljuske.
Zaključak
U Bashu možemo čitati datoteku pojedinačno po redoslijedu tako što ćemo naziv datoteke unijeti u petlju za čitanje.
bash terminalVratite slučajno izbrisanu ili izmijenjenu datoteku u padajuću datoteku

Saznajte kako vratiti slučajno izbrisanu ili izmijenjenu datoteku na Dropboxu. Možete oporaviti prethodnu verziju modificirane datoteke ili potpuno izbrisane datoteke.
Kako provjeriti postoji li datoteka ili direktorij u bashu

Često se prilikom pisanja skripti Shell nađete u situaciji u kojoj trebate izvesti radnju na osnovu toga postoji li datoteka ili ne. U Bashu možete koristiti testnu naredbu da provjerite postoji li datoteka i odredite vrstu datoteke.
Kako provjeriti sadrži li niz podstranu u bashu

Jedna od najčešćih operacija pri radu s nizovima u Bashu je utvrđivanje sadrži li niz neki drugi niz. U ovom ćemo vam članku pokazati nekoliko načina za provjeru sadrži li niz podstranu.