Looping prin conținutul unui fișier în Bash
adesea, este o cerință de a citi fiecare linie dintr-un fișier folosind un script bash. Există diferite abordări pentru a citi liniile formează un fișier. În exemplul de mai jos am descris mai întâi cum să creați un fișier eșantion și apoi să rulați un script care citește acel fișier eșantion.
Creați un fișier pentru a Citi
# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt
Rulează codul de mai sus ne dă următorul rezultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Folosind Do-Timp
În această abordare vom folosi o buclă do-timp pentru a citi un fișier., Dăm numele fișierului ca intrare la sfârșitul fișierului. Mai întâi creăm un script și îi dăm permisiunea de executare. Apoi, numai acesta poate citi fișierul și arată rezultatul.
#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt
Rulează codul de mai sus ne dă următorul rezultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
, Folosind pentru și în
În următoarea abordare vom folosi o buclă împreună cu clauza. Aici vom stoca rezultatul comenzii cat (care este fiecare linie) într-o variabilă care face parte din Pentru Buclă și ecou variabila.,
#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done
Rulează codul de mai sus ne dă următorul rezultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Cu doar echo
putem obține, de asemenea, conținutul fișierului folosind doar ecou. Dar rezultatul va ieși ca o serie de linii și imprimate ca o singură linie de ieșire care arată combinație a tuturor liniilor.
echo $( < a_file.txt )
Rulează codul de mai sus ne dă următorul rezultat:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
Citirea Fișierului cu Linii Goale
Dacă un fișier are unele linii care sunt goale atunci noi ca să le evite în ieșire folosind codul de mai jos., Aceasta utilizează IFS (internal Field Separator) este setat la șirul gol, astfel încât liniile goale sunt tratate ca separator de câmp și evitate în ieșire. Presupunând că există linii goale între linia a 3-a și a 4-a, aceste garanții goale nu vor fi tipărite.
#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt
Rulează codul de mai sus ne dă următorul rezultat −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday