Modi differenti biex taqra l-fajl fl-iskrittura ta' Bash billi tuża While Loop
Dan l-artikolu huwa kollu dwar kif taqra fajls fi skripts bash bl-użu ta 'loop while. Il-qari ta' fajl huwa operazzjoni komuni fl-ipprogrammar. Għandek tkun familjari ma 'metodi differenti u liema metodu huwa aktar effiċjenti biex tużah. F'bash, kompitu wieħed jista 'jinkiseb f'ħafna modi iżda dejjem hemm mod ottimali biex il-kompitu jsir u għandna nsegwuh.
Qabel ma tara kif taqra l-kontenut tal-fajl billi tuża while loop, a primer rapidu dwar kif taħdem while loop. Filwaqt li loop jevalwa kundizzjoni u jtenni fuq sett partikolari ta 'kodiċi meta l-kundizzjoni hija vera.
while [ CONDITION ] do code block done
Ejja nkissru waqt is-sintassi tal-linja.
- while loop għandu jibda bil-kelma prinċipali while segwita minn kundizzjoni.
- Kundizzjoni għandha tkun magħluqa fi ħdan [ ] jew [[ ]]. Il-kundizzjoni għandha dejjem tirritorna vera biex il-linja tiġi esegwita.
- Il-blokk attwali tal-kodiċi se jitqiegħed bejn do u done.
NUMBER=0 while [[ $NUMBER -le 10 ]] do echo " Welcome ${NUMBER} times " (( NUMBER++ )) done
Dan huwa eżempju sempliċi ħafna, fejn il-linja tesegwixxi sakemm NUMRU ma jkunx akbar minn 10 u jistampa d-dikjarazzjoni tal-eku.
Flimkien ma 'while se nużaw il-kmand tal-qari biex naqraw il-kontenut ta' fajl linja b'linja. Hawn taħt hawn is-sintassi ta' kif il-kmandi waqt u l-qari huma kkombinati. Issa hemm modi differenti biex tgħaddi l-fajl bħala input u narawhom kollha.
# SYNTAX while read VARIABLE do code done
Pajping fil-Linux
Normalment se nużaw it-tip, eċċ.
Bl-istess mod, aħna se nużaw il-kmand tal-qtates hawn biex naqraw il-kontenut tal-fajl u pajpha għal while loop. Għad-dimostrazzjoni, qed nuża l-fajl /etc/passwd iżda mhux rakkomandabbli li tħawwad ma' dan il-fajl għalhekk ħu kopja ta' backup ta' dan il-fajl u tilgħab miegħu jekk tixtieq hekk.
cat /etc/passwd | while read LREAD do echo ${LREAD} done
Ejja nkissru x'se jiġri meta jiġi sottomess il-kodiċi ta 'hawn fuq.
- cat /etc/passwd se jaqra l-kontenut tal-fajl u jgħaddih bħala input mill-pajp.
- read kmand jaqra kull linja mgħoddija bħala input mill-kmand tal-qtates u jaħżenha fil-varjabbli LREAD.
- aqra l-kmand se jaqra l-kontenut tal-fajl sakemm l-EOL jiġi interpretat.
Tista 'wkoll tuża kmandi oħra bħal ras, denb, u pajpha għal while loop.
head -n 5 /etc/passwd | while read LREAD do echo ${LREAD} done
Direzzjoni mill-ġdid tal-input fil-Linux
Nistgħu nidderieġu mill-ġdid il-kontenut tal-fajl għal while loop billi tuża l-operatur ta 'ridirezzjoni ta' Input (<)
.
while read LREAD do echo ${LREAD} done < /etc/passwd | head -n 5
Tista 'wkoll taħżen l-isem tal-fajl għal varjabbli u tgħaddiha minn operatur ta' direzzjoni mill-ġdid.
FILENAME="/etc/passwd" while read LREAD do echo ${LREAD} done < ${FILENAME}
Tista' wkoll tgħaddi l-ismijiet tal-fajls bħala argument għall-iskrittura tiegħek.
while read LREAD do echo ${LREAD} done < $1 | head -n 5
Separatur tal-Qasam Intern
Tista 'taħdem ma' tipi differenti ta 'formati ta' fajl (CSV, TXT, JSON) u tista 'tixtieq taqsam il-kontenut tal-fajl ibbażat fuq delimitatur tad-dwana. F'dan il-każ, tista' tuża \Separatur tal-kamp intern (IFS) biex taqsam il-kontenut tal-fajl u taħżen f'varjabbli.
Ħallini nuri kif taħdem. Agħti ħarsa lejn il-fajl /etc/passwd li għandu kolon (:)
bħala d-delimitatur. Issa tista 'taqsam kull kelma minn linja u taħżenha f'varjabbli separat.
Fl-eżempju ta 'hawn taħt, qed naqsam il-fajl /etc/passwd b'kolon bħala separatur tiegħi u naħżen kull qasma f'varjabbli differenti.
while IFS=":" read A B C D E F G do echo ${A} echo ${B} echo ${C} echo ${D} echo ${E} echo ${F} echo ${G} done < /etc/passwd
Urejt linja waħda biss maqsuma fil-screenshot ta 'hawn fuq meta wieħed iqis id-daqs tal-screenshot.
Linji vojta fil-Linux
Linji vojta ma jiġux injorati meta tgħaddi l-kontenut tal-fajl. Biex nuri dan ħloqt fajl kampjun bil-kontenut ta 'hawn taħt. Hemm 4 linji u ftit linji vojta, spazju abjad ewlieni, spazju abjad ta 'wara, karattri tat-tab fil-linja 2, u xi karattri ta' ħarba ( u ).
while read LREAD do echo ${LREAD} done < testfile
Ara r-riżultat, linja vojta mhix injorata. Ukoll, ħaġa interessanti li wieħed jinnota hija kif l-ispazji bojod huma mirquma mill-kmand tal-qari. Mod sempliċi biex jinjora linji vojta meta taqra l-kontenut tal-fajl huwa li tuża l-operatur tat-test bil-marka -z
li jiċċekkja jekk it-tul tas-sekwenza huwiex żero. Issa ejja nirrepetu l-istess eżempju iżda din id-darba ma 'operatur tat-test.
while read LREAD do if [[ ! -z $LREAD ]] then echo ${LREAD} fi done < testfile
Issa mill-output, tista 'tara linji vojta huma injorati.
Karattri tal-ħarba
Escape karattri bħal Tista' tara mill-output il-karattri tal-ħarba tilfu t-tifsira tagħhom u n u t biss huma stampati minflok Dak hu għal dan l-artikolu. Nixtiequ nisimgħu lura mingħandek jekk ikun hemm xi feedback jew pariri. Ir-rispons tiegħek huwa dak li jgħinna noħolqu kontenut aħjar. Kompli aqra u kompli ssostni.
,
, while read LREAD
do
echo ${LREAD}
done < testfile
u
. Tista' tuża -r
biex tevita l-interpretazzjoni ta' backslash.while read -r LREAD
do
echo ${LREAD}
done < testfile