Door de inhoud van een bestand in Bash
vaak is het een vereiste om elke regel uit een bestand te lezen met behulp van een bash script. Er zijn verschillende benaderingen om de regels van een bestand te lezen. In het onderstaande voorbeeld hebben we eerst beschreven hoe je een voorbeeldbestand maakt en vervolgens een script uitvoert om dat voorbeeldbestand te lezen.
Maak een bestand aan om
# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt
het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
gebruikmakend van Do-While
In deze benadering gebruiken we een do-while lus om een bestand te lezen., We geven de bestandsnaam als invoer aan het einde van het bestand. Eerst maken we een script aan en geven er de uitvoerrechten aan. Dan alleen het kan het bestand te lezen en het resultaat te tonen.
#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt
het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
gebruikend voor en in
In de volgende benadering gebruiken we een For loop samen met de in-clausule. Hier slaan we het resultaat van het cat commando (dat elke regel is) op in een variabele die deel uitmaakt van for loop en echo de variabele.,
#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done
het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
met alleen echo
We kunnen ook de inhoud van het bestand verkrijgen door alleen echo te gebruiken. Maar het resultaat zal komen als een array van lijnen en afgedrukt als één-lijn uitvoer tonen combinatie van alle lijnen.
echo $( < a_file.txt )
het uitvoeren van de bovenstaande code geeft ons het volgende resultaat:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
het lezen van een bestand met lege regels
als een bestand een aantal regels bevat die leeg zijn, kunnen we deze vermijden in de uitvoer door de volgende code te gebruiken., Dit maakt gebruik van de IFS (internal Field Separator) is ingesteld op lege tekenreeks, zodat de lege regels worden behandeld als veld scheidingsteken en vermeden in de uitvoer. Aangenomen dat er lege regels zijn tussen de 3e en 4e regel, zullen die lege pandrechten niet worden afgedrukt.
#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt
het Uitvoeren van de bovenstaande code geeft ons het volgende resultaat:
MondayTuesdayWednesdayThursdayFridaySaturdaySunday