Bash lasīšanas komanda

Bash Read Command



Lasi vai mirsti draugi. Lasīšanas komanda ir tikpat svarīga kā pozicionālie parametri un atbalss komanda. Kā citādi jūs noķersit lietotāja ievadīto informāciju, pieņemsit paroles, rakstīsit funkcijas, cilpas un ielūkosities failu aprakstos? Turpini lasīt.

Kas tiek lasīts?

Lasīšana ir bash iebūvēta komanda, kas rindas saturu nolasa mainīgajā. Tas ļauj sadalīt vārdus, kas ir saistīti ar īpašo apvalka mainīgo IFS. To galvenokārt izmanto lietotāja ievades uztveršanai, bet to var izmantot, lai ieviestu funkcijas, kuras ievada no standarta ievades.







Bash lasīja iebūvēto komandu palīdzību

Pirms mēs iedziļināmies lasīšanas komandas izmantošanā bash skriptos, šeit ir sniegta palīdzība. Tur jums vajadzētu redzēt visas lasīšanas komandai pieejamās iespējas kopā ar aprakstiem, kurus mēs centīsimies ietvert piemēros.



Komandrinda



palīdzēt lasīt

Izeja





lasīt:lasīt [-ers] [-masīvs] [-d dalīties] [-i teksts] [-nchars] [-N nchars]
[-p uzvedne] [-taimauts] [-u fd] [vārds ...]

Izlasiet rindu no standarta ievades unsadalītto laukos.

Nolasa vienu rindu no standarta ievades vai nofailudeskriptors FD
jaun-utiek piegādāta iespēja. Līnija irsadalītlaukosar vārdu
sadalot, un pirmais vārds tiek piešķirts pirmajam NAME, otrais
vārdu otram VĀRDAM un tā tālāk, ar visiem pārpalikušajiem vārdiem
unPēdējaisNAME. Atrastas tikai rakstzīmesiekšā $ IFSir atzītasvārds
norobežotāji.

Ja netiek piegādāts neviens nosaukums, līnijalasītir saglabātaiekšāmainīgais REPLY.

Iespējas:
-uzmasīvs piešķir vārduslasītuz masīva secīgajiem indeksiem
mainīgais ARRAY, sākot ar nulli
-dnorobežotTurpināt līdzDELIM pirmais raksturs irlasīt, drīzāk
nekā jauna līnija
-e izmantojiet Readline, lai iegūtu līnijuiekšāinteraktīvs apvalks
-iizmantot tekstu TEXTsākotnējais tekstspriekšLasīšanas līnija
-nncharsatgrieztiespēc NCHARS rakstzīmju lasīšanas, nevis gaidīšanas
priekšjauna līnija, bet godājiet norobežotājujamazāk kā

NCHARS rakstzīmes irlasītpirms norobežotāja
-Nncharsatgrieztiestikai pēc precīzi NCHARS rakstzīmju izlasīšanas, ja vien
Sastopama EOF vailasīt reizesārā, ignorējot nevienu
norobežotājs
-lppuzvedne izvada virkni PROMPT bez pēdējās rindiņas
mēģinotlasīt
-rdarītneļaujiet slīpsvītrai izvairīties no rakstzīmēm
-sdarītizmest ārāieeja nāk no termināļa
-tpārtraukumslaiksārā unatgrieztiesneveiksmejauzpabeigtslīnija
ievade navlasītTIMEOUT sekunžu laikā. Vērtība
Mainīgais TMOUT ir noklusējuma taimauts. TIMEOUT var būt a
daļskaitlis. Ja taimauts ir0,lasītatgriežas
uzreiz, nemēģinotlasītvisus datus, atgriežot
tikai panākumijaievade ir pieejama norādītajā
failudeskriptors. TheIzejastatuss ir lielāks par128
jataimauts ir pārsniegts
-ufdlasītnofailudeskriptors FD standarta ievades vietā

Iziešanas statuss:
Theatgrieztieskods ir nulle, ja vien netiek konstatēts faila beigas,lasīt reizesārā
(iekšā kuras gadījumātoir lielāks par 128), mainīga piešķiršanas kļūda

Notver lietotāja ievadi

Interaktīvie bash skripti nav nekas, neuztverot lietotāja ievadi. Lasīšanas iebūvētais nodrošina metodes, kā lietotāja ievade var tikt iekļauta bash skriptā.

Ievades rindas uztveršana

Lai uztvertu ievades rindu, lasīšanai nav nepieciešami vārdi un opcijas. Ja NAME nav norādīts, lietotāja ievadītās informācijas glabāšanai tiek izmantots mainīgais ar nosaukumu REPLY.



Komandas

{
izmest ārā -n 'Ierakstiet kaut ko un nospiediet enter:';
lasīt;
izmest ārāJūs rakstījāt$ {REPLY}
}

Izeja

Ierakstiet kaut ko un nospiediet enter: kaut(jauna līnija)
Jūs kaut ko ierakstījāt

Ievades vārda uztveršana

Lai uztvertu ievades vārdu, ir nepieciešama opcija -d. Vārda gadījumā mēs iestatītu -d uz atstarpi, izlasiet “-d”. Tas ir, kad lietotājs nospiež atstarpes taustiņu, lasītais tiks ielādēts REPLY ar vārdu.

Ņemiet vērā: ja ir iestatīta opcija -d, atpakaļatkāpe nedarbojas, kā paredzēts. Lai atgrieztos atpakaļ, mēģinot uztvert ievades vārdu, var izmantot opciju -e, lasot -e ‘-d’.

Komandas

{
izmest ārā -n 'Ierakstiet kaut ko un nospiediet atstarpi:';
lasīt '-d';
izmest ārā '';
izmest ārā 'Jūs rakstījāt$ {REPLY}'
}

Izeja

Ierakstiet kaut ko un nospiediet atstarpi: kaut kas(telpa)
Jūs kaut ko ierakstījāt

Ātrs lietotājs

Interaktīvos bash skriptos lietotājs var pieprasīt ziņojumu, lai informētu lietotāju par gaidāmo ievadi. Mēs to vienmēr varam paveikt, izmantojot iebūvēto atbalsi. Tomēr izrādās, ka ir iespēja izmantot lasīšanu.

Lūdziet lietotājam vārdu

Ievērojot ievades vārdu, mēs izmantojām atbalsi, lai rakstītu Ierakstiet kaut ko un nospiediet atstarpi: standarta izvadei pirms lasīšanas “-d”. Opcija -p ļauj parādīt ziņojumu pirms lasīšanas no standarta ievades.

Komandas

{
lasīt -lpp 'Ierakstiet kaut ko un nospiediet atstarpi:' '-d';
izmest ārā '';
izmest ārā 'Jūs rakstījāt$ {REPLY}'
}

Izeja

Ierakstiet kaut ko un nospiediet atstarpi: kaut kas(telpa)
Jūs kaut ko ierakstījāt

Lūdziet lietotājam noslēpumu

Noķerot lietotāja ievadi, to nerādot terminālī, ir noderīga opcija -s. lasīt -s -p ļauj noķert un paslēpt lietotāja ievadīto informāciju šādi.

Komandas

{
lasīt -s -lpp 'Ierakstiet kaut ko, ko es apsolu turēt noslēpumā:'
izmest ārā '';
izmest ārā 'Tavs noslēpums ir drošībā ar mani';nav iestatītsREPLY;
izmest ārā '$ {REPLY}'
}

Izeja

Ierakstiet kaut ko, ko es apsolu turēt noslēpumā:
Tavs noslēpums ir drošībā pie manis

Funkcijas, izmantojot lasīšanu

Šeit ir bash funkciju piemēri, kas izmanto lasīšanas un standarta ievadi

Galvenā koncepcija

Funkcijas, kas izmanto lasīšanu, izmanto standarta ievadi un parametrus. Galvenā apstrādājamā ievade, piemēram, rindas failā, caur cauruli tiek ievadīta caur standarta ievadi. Cita ievade, ja ir, un opcija tiek nodota kā parametri.

lasīt -t 1NAME1 NAME2 ...

lasītiriebūvēts komandu

-t 1 neļauj bash skriptam bezgalīgi gaidīt rindas atgriešanu, izmantojot standarta ievadi. Ja standarta ievade sākotnēji ir tukša, funkcija atgriežas ar izejas kodu 142, kas norāda, ka noteiktajā taimauta periodā netika nolasīts datums

NAME1 NAME2 ir mainīgie nosaukumi

... var tikt uzskaitīti daudzi mainīgo nosaukumi

Tagad, kad ir sagatavoti pamatdarbi, redzēsim, kā izskatās pazīstamās funkcijas, kas ieviestas, izmantojot lasīšanu.

Pievienošanās funkcija, izmantojot lasīšanu

Pieņemsim, ka mēs gribam apvienošanas funkciju, kas ņem vārdu sarakstu un atgriež citu vārdu sarakstu, kam pievienots atdalītājs. Lūk, kā mēs varam ieviest pievienošanās funkciju, izmantojot lasīšanu.

Skripts

#!/bin/bash
## pievienoties
## versija 0.0.2 - labojiet rekursijas parametrus
#################################################
pievienojies() { { vietējaisierobežotājs;ierobežotājs='{1-} USD';vietējaisnorobežotājs;
atdalītājs='{2-.} ASV dolāri';}
vietējaisautomašīna
vietējaiscdr
vietējaisIFS
IFS='$ {indelimiter}'
lasīt -t 1automašīnas cdr|| atgriezties
pārbaude '$ {cdr}' || { izmest ārā '$ {car}';atgriezties;}
izmest ārā '$ {car}$ {outdelimiter}$ {cdr}' | $ {FUNCNAME} '$ {indelimiter}'
'$ {outdelimiter}'
}
#################################################
## ģenerējis create-stub2.sh v0.1.2
## pirmdien, 2019. gada 17. jūnijā 12:24:59 +0900
## redzēt
#################################################

Avots: pievienoties.sh
Komandrinda

izmest ārāa b| pievienojies

Izeja

a.b

Komandrinda

izmest ārāa b| pievienojies | pievienojies. |

Izeja

uz|b

Kartes funkcijas, izmantojot lasīšanu

Pieņemsim, ka mēs vēlamies kartes funkciju, kas ņem sarakstu un atgriež citu sarakstu, kurā ir tāds pats elementu skaits, kurus modificē cita funkcija. Lūk, kā mēs varam ieviest kartes funkciju, izmantojot lasīšanu.

Skripts

#!/bin/bash
## karte
## versija 0.0.1 - sākotnējā
#################################################
karte() { { vietējaisfunkcija_nosaukums;funkcija_nosaukums='{1} USD';}
vietējaisautomašīna
vietējaiscdr
vietējaisIFS
IFS='$ {indelimiter-}'
lasīt -t 1automašīnas cdr|| atgriezties
pārbaude '$ (deklarēt -f $ {function_name})' || atgriezties
pārbaude '$ {car}' || { taisnība;atgriezties;}
$ {function_name} $ {car}
izmest ārā '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
#################################################
## ģenerējis create-stub2.sh v0.1.2
## otrdien, 2019. gada 18. jūnijā 08:33:49 +0900
## redzēt
################################################

Avots: karte.sh
Komandas

NS() { vietējais -i i={1} USD;izmest ārā$((i** 2 ));}
izmest ārā {1..10} |karte pow

Izeja

1
4
9
16
25
36
49
64
81
100

Filtrēšanas funkcija, izmantojot lasīšanu

Pieņemsim, ka mēs gribam filtrēšanas funkciju, kas ņem sarakstu un atgriež citu funkciju iestatīto nosacījumu apmierinošo elementu apakšsarakstu. Lūk, kā mēs varam ieviest filtra funkciju, izmantojot lasīšanu.

Skripts

#!/bin/bash
## filtrs
## versija 0.0.1 - sākotnējā
#################################################
filtrs() { { vietējaisfunkcija_nosaukums;funkcija_nosaukums='{1} USD';}
vietējaisautomašīna
vietējaiscdr
vietējaisIFS
IFS='$ {indelimiter-}'
lasīt -t 1automašīnas cdr|| atgriezties
pārbaude '$ (deklarēt -f $ {function_name})' || atgriezties
pārbaude '$ {car}' || { taisnība;atgriezties;}
$ {function_name} '$ {car}' || izmest ārā -n '$ {car}'
izmest ārā '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
#################################################
## ģenerējis create-stub2.sh v0.1.2
## otrdien, 2019. gada 18. jūnijā 13:19:54 +0900
## redzēt
#################################################

Avots: filtrs.sh

Komandas

nepāra() { vietējais -i i={1} USD;pārbaude !$((i% 2 )) -ekv 1;}
izmest ārā {1..10} |nepāra filtrs

Izeja

1 3 5 7 9

Cilpas, izmantojot lasīšanu

Cilpas, kas izmanto lasīšanu, ļauj atkārtot ģenerējamā vai jau esošā faila rindas.

Pamata lasīšanas cilpa kreisajai pusei (lhs)

Mums ir komanda vai funkcija (lhs), kas var ģenerēt rindas failā, ko var atkārtot, izmantojot lasīšanas un brīža cilpu.

Konstruēt

lhs| kamēr lasīt
darīt
taisnība
darīts
lhs ir akomandukas atgriež rindu sarakstu

Komandas

sek 5 | kamēr lasīti
darīt
izmest ārā $ {i}
darīts

Izeja

1
2
3
4
5

Pamata lasīšanas cilpa labajai pusei (rhs)

Mums ir fails (rhs) ar rindām, kuras var pārvietot, izmantojot lasīšanas un laika ciklu.

Konstruēt

kamēr lasīt
darīt
taisnība
darīts <rhs

rhs ir afailukas satur līnijas

Komandas

sek 5 >rhs
kamēr lasīti
darīt
izmest ārā $ {i}
darīts <rhs

Izeja

1
2
3
4
5

Pielāgots lhs cilpas laikā, izmantojot lasīšanu

Mums ir vārdu straume, kuru mēs vēlētos atkārtot, izmantojot lasīšanu.

Konstruēt

(
IFS=''
lhs| kamēr lasīt
darīt
taisnība
darīts
)

lhs ir vārdu saraksts

Komandas

(
IFS=''
izmest ārā {1..5} | kamēr lasīti
darīt
izmest ārā '$ {i}
darīts
)

Izeja

1 2 3 4 5

Lasīšana no jebkuras fd, nevis standarta ievades

Lasīšanas iebūvētā opcija, kas bieži tiek atstāta neskarta, ir tā, kas ļauj norādīt, no kāda faila apraksta lasīt, lasīt -u FD. Pēc noklusējuma FD tiek uzskatīta par standarta ievadi.

Galvenā koncepcija

Atverot failu, tiek piešķirti failu deskriptori. IO novirzīšana bash ļauj failu atstāt atvērtu ar noteiktu faila aprakstu. Mums ir atļauts rakstīt failā, lasīt no tā un aizvērt to, kad esam pabeiguši.

_()
{
kaķis /dev/null>myfifo;# tukšs myfifo
izpildītājs 3<myfifo;# atveriet failu myfifo kā fd 3
izmest ārā 'Sveika pasaule! - no fd 3 ' >myfifo;# rakstiet myfifo
lasīt -u 3;#lasa rindu no fd 3
izpildītājs 3> &-;# aizvērt fd 3
izmest ārā $ {REPLY} # izvades līnija nolasīta no fd 3 pirms aizvēršanas
}
_# Sveika pasaule! no fd 3

Vilciena būvēšana ar failu aprakstiem un lasāmu -u FD

Vienkārši prieka pēc es nolēmu uzbūvēt vilcienu ar failu aprakstiem un izlasīt -u FD. Katram faila deskriptoram tiek rakstīts numurs. Katrs faila deskriptors nolasa no 1. faila deskriptora un pievieno sev.

Komandrinda

bashlinuxhint.com/būvēt/test-read-fd.sh vilciens10

Izeja

fds inicializēšana ...
inicializēšana fd3...
fd3intializēts
inicializēšana fd4...
fd4intializēts
fds intializēts
lasot no fd3un4...
4 3
fds pirms tīrīšanas
0 1 2 3 4 5
satīrīšana ...
fds tīrīšana ...
darītstīrīšana fds
fds pēc tīrīšanas
0 1 2 3

Izlaist funkciju, izmantojot lasīšanas -u FD

Ja skrien

nepiedien -uz
MINGW64_NT-10.0GALDAPLAUKS-XVVVVVV 2.7.0(0.307/5/3)
2017. gads.-02-17 14:divdesmitx86_64 Msys
bash --versija
GNUbash, versija 4.4.12(1)-atlaidiet(x86_64-pc-msys)

kļūdas dēļ var būt iespējams ieviest izlaišanas funkciju, kas pirms skripta avota nolasīšanas izlaiž šādu rindu bash skriptā ārpus funkcijām. Ņemiet vērā, ka tas nedarbojas lielākajā daļā sistēmu. Piemēram,

nepiedien -uz
Linux 4.9.0-8-amd64#1 Debian SMP 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
bash --versija
GNUbash, versija 4.4.12(1)-atlaidiet(x86_64-pc-linux-gnu)

skip nelido.

Funkcija

izlaist() { lasīt -u 31;}

Komandas

izlaist
izmest ārārinda izlaista
taisnība

Izeja

(tukšs)

Apakšējā līnija

Bash iebūvētā lasīšana sniedz vairāk nekā tikai lietotāju ievadi. To var izmantot funkcijās, cilpās un apmaiņā starp failu aprakstiem, ko izmanto bash skriptos. Dažkārt, izmantojot lasīšanas un failu aprakstus, var iegūt Lieldienu olas.