Zapętlenie zawartości pliku w Bash
często wymagane jest odczytanie każdej linii z pliku za pomocą skryptu bash. Istnieją różne podejścia do odczytu linii tworzących plik. W poniższym przykładzie najpierw opisaliśmy, jak utworzyć przykładowy plik, a następnie uruchomić skrypt odczytujący ten przykładowy plik.
Utwórz plik do odczytu
# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt
uruchomienie powyższego kodu daje nam następujący wynik −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
używając do-While
w tym podejściu używamy pętli do-while do odczytu pliku., Podajemy nazwę pliku jako wejście na końcu pliku. Najpierw tworzymy skrypt i dajemy do niego uprawnienia execute. Wtedy tylko on może odczytać plik i pokazać wynik.
#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt
uruchomienie powyższego kodu daje nam następujący wynik −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
używając for I in
w następnym podejściu używamy pętli for wraz z klauzulą in. Tutaj przechowujemy wynik polecenia cat (który jest każdą linią) w zmiennej będącej częścią pętli for I echo zmiennej.,
#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done
uruchomienie powyższego kodu daje nam następujący wynik −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
tylko echo
możemy również uzyskać zawartość pliku używając tylko echo. Ale wynik wyjdzie jako tablica linii i wydrukowany jako jednoliniowe wyjście pokazujące kombinację wszystkich linii.
echo $( < a_file.txt )
uruchomienie powyższego kodu daje nam następujący wynik:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
odczyt pliku z pustymi liniami
Jeśli plik ma jakieś wiersze, które są puste, unikamy ich w wyniku za pomocą następującego kodu., W ten sposób IFS (wewnętrzny Separator pól) jest ustawiony na pusty ciąg znaków, tak że puste linie są traktowane jako separator pól i unikane na wyjściu. Zakładając, że między 3. A 4. linią są puste linie, te puste zastawy nie zostaną wydrukowane.
#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt
uruchomienie powyższego kodu daje nam następujący wynik −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday