Looping gennem indholdet af en fil i Bash
ofte er det et krav at læse hver af linjen fra en fil ved hjælp af et bash script. Der er forskellige tilgange til at læse linjerne danner en fil. I nedenstående eksempel har vi først beskrevet, hvordan man opretter en prøvefil og derefter kører et script, der læser den prøvefil.
Opret en fil for at Læse
# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt
Kører ovenstående kode giver os følgende resultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
ved Hjælp af at Gøre-Mens
I denne tilgang bruger vi en do-while-løkke til at læse en fil., Vi giver filnavnet som et input i slutningen af filen. Først opretter vi et script og giver e .ecute tilladelse til det. Så kun det kan læse filen og vise resultatet.
#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt
Kører ovenstående kode giver os følgende resultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Brug for og i
I næste tilgang vi bruge en for-løkke sammen med de i paragraf. Her gemmer vi resultatet af cat kommando (som er hver linje) i en variabel, som er en del af For loop og ekko variablen.,
#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done
Kører ovenstående kode giver os følgende resultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Med kun echo
man kan også få indholdet af en fil ved hjælp af kun echo. Men resultatet vil komme ud som en vifte af linjer og udskrives som en-line output viser kombination af alle linjer.
echo $( < a_file.txt )
Kører ovenstående kode giver os følgende resultat:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
ved Læsning af Fil med Blanke Linjer
Hvis en fil har nogle linjer, som er tom, så er vi ca undgå dem i produktionen ved at bruge følgende kode., Dette bruger IFS (intern Field Separator) er indstillet til tom streng, så de tomme linjer behandles som felt separator og undgås i output. Forudsat at der er tomme linjer mellem 3. og 4. linje, udskrives de tomme panterettigheder ikke.
#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt
Kører ovenstående kode giver os følgende resultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday