? Cum sa faci un Script in Linux folosind Bash | Invata Linux Ep. 34
Cuprins:
- Citirea unei sintaxe linie după linie
- Citirea unei fișiere Exemple de linie
- Metode alternative de citire a fișierelor
- Utilizarea unei substituții de proces
- Folosind o șiruri aici
- Folosind descriptor de fișiere
- Concluzie
Când scrieți scripturi Bash, vă veți găsi uneori în situații în care trebuie să citiți un fișier rând cu rând. De exemplu, este posibil să aveți un fișier text care conține date care ar trebui să fie procesate de script.
În acest tutorial, vom discuta despre cum puteți citi un fișier linie cu linie în Bash.
Citirea unei sintaxe linie după linie
Cea mai generală sintaxă pentru citirea unui fișier linie cu linie este următoarea:
while IFS= read -r line do echo "$line" done < input_file
sau versiunea echivalentă cu o singură linie:
while IFS= read -r line; do echo $line; done < input_file
Cum functioneazã?
Fișierul de intrare (
input_file
) este numele fișierului pe care doriți să fie deschis pentru citire prin comanda
read
. Comanda de
read
citește fișierul rând cu linie, alocând fiecare
line
variabilei
line
. Odată ce toate liniile sunt procesate, bucla de timp se va încheia. Separatorul de câmp intern (
IFS
) este setat pe șirul nul pentru a păstra spațiul alb și principal, care este comportamentul implicit al comenzii
read
.
Citirea unei fișiere Exemple de linie
Să aruncăm o privire la următorul exemplu. Să presupunem, avem un fișier numit
distros.txt
care conține o listă cu unele dintre cele mai populare distribuții Linux și managerii lor de pachete separate cu virgulă (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Pentru a citi fișierul rând cu rând, ar trebui să rulați următorul cod pe terminalul dvs.:
while IFS= read -r line do echo "$line" done < distros.txt
Codul va citi fișierul după linie, va atribui fiecare linie unei variabile și va ecua variabila. De bază, veți vedea aceeași ieșire ca și cum ar afișa conținutul fișierului folosind comanda cat.
Ce se întâmplă dacă doriți să imprimați numai distribuțiile care folosesc apt? O modalitate ar fi să folosiți instrucțiunea if și să verificați dacă linia conține substrat apt:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Când citiți fișier linie cu linie, puteți trece, de asemenea, mai multe variabile la comanda de citire, care va împărți linia în câmpuri bazate pe
IFS
. Primul câmp este atribuit primei variabile, al doilea la a doua variabilă și așa mai departe. Dacă există mai multe câmpuri decât variabile, câmpurile rămase sunt atribuite ultimei variabile.
În exemplul următor, setăm IFS la o virgulă (
,
) și trecem două variabile
distro
și
pm
la comanda citită. Totul de la începutul liniei până la prima virgulă va fi alocat primei variabile (
distro
), iar restul liniei va fi alocat celei de-a doua variabile (
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
Metode alternative de citire a fișierelor
Utilizarea unei substituții de proces
Înlocuirea procesului vă permite să treceți ieșirea din comandă ca nume de fișier:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Folosind o șiruri aici
Aici șirul este o variantă a documentului Here. Șirul
(cat input_file)
va păstra liniile noi:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Folosind descriptor de fișiere
Puteți furniza, de asemenea, intrarea în buclă folosind un descriptor de fișier:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Când lucrați cu descriptori de fișiere, utilizați un număr între 4 și 9 pentru a evita conflictul cu descriptorii de fișiere interne shell.
Concluzie
În Bash, putem citi un fișier linie cu linie, furnizând numele de fișier ca o intrare la o buclă de citire în timp.
terminalul bash- Notebook-urile super-mici, concepute în primul rând pentru surfing pe internet, aplicații de e-mail și aplicații ușoare - sunt toată furia în zilele noastre. Dar, la fel de portabile, depind în primul rând de Wi-Fi pentru accesul la Internet wireless -
Dispozitivele Redfly ale lui Celio arată ca niște netbook-uri. Dar ele sunt de fapt terminale pentru telefoanele Windows Mobile pe care le-ați conectat prin Bluetooth sau printr-un cablu USB. Fără smartphone, ei nu fac nimic; cu el, totuși, ei te-au lăsat să faci aproape orice ai face pe telefonul tău, dar cu un afișaj mai mare și tastatură.
Revizuire: Vizualizarea rapidă Plus vă permite să citiți aproape orice fișier de afaceri
Dacă doriți să extindeți capacitățile de previzualizare Windows acest utilitar de vizualizare a fișierelor. Se integrează în Explorer și acceptă peste 300 de tipuri de fișiere, dintre care multe nu mai sunteți proprietarul software-ului.
Cum să verificați dacă există un fișier sau director în bash
De multe ori când scrii scripturi Shell, te poți regăsi într-o situație în care trebuie să efectuezi o acțiune bazată pe existența unui fișier sau nu. În Bash puteți utiliza comanda test pentru a verifica dacă există un fișier și pentru a determina tipul fișierului.







