Bash olvasási parancs

Bash Read Command



Olvass vagy halj meg barátok. Az olvasási parancs ugyanolyan fontos, mint a helyzeti paraméterek és az echo parancs. Hogyan másképp fogja elkapni a felhasználói bevitelt, elfogadni a jelszavakat, írni függvényeket, ciklusokat és bekukkantani a fájlleírókba? Olvass tovább.

Mi olvasható?

A Read egy bash beépített parancs, amely egy sor tartalmát egy változóba olvassa. Lehetővé teszi a szó felosztását, amely az IFS speciális shell változóhoz van kötve. Elsősorban a felhasználói bevitel lekérésére szolgál, de használható olyan funkciók megvalósítására, amelyek a szabványos bemenetről vesznek bemenetet.







Bash olvassa el a beépített parancssúgót

Mielőtt belemélyednénk a read parancs használatába a bash parancsfájlokban, itt kapunk segítséget. Ott látnia kell az olvasási parancshoz rendelkezésre álló összes opciót, valamint a leírásokat, amelyeket megpróbálunk a példákban bemutatni.



Parancs sor



Segítség olvas

Kimenet





olvas:olvas [-ers] [-tömb] [-d megosztás] [-i szöveg] [-n nchars] [-N nchars]
[-p felszólítás] [-időtúllépés] [-u fd] [név ...]

Olvasson egy sort a standard bemenetről éshasítottazt mezőkbe.

Egy sort olvas a standard bemenetről, vagy innenfájltleíró FD
haaz-uopció biztosított. A sor azhasította mezőkbemintszóval
felosztása, és az első szó az első NAME -hez van hozzárendelve, a második
szót a második NÉV -hez, és így tovább, a hozzárendelt maradék szavakkal
azutolsóNÉV. Csak a szereplőket találták megban ben $ IFSfelismerikmintszó
elválasztók.

Ha nincsenek NÉV -ek, akkor a vonalolvastároljákban bena REPLY változó.

Lehetőségek:
-nak nektömb rendelje hozzá a szavakatolvasa tömb szekvenciális indexeire
változó ARRAY, nullától kezdve
-delválasztanifolytatni amíga DELIM első karaktere azolvas, Inkább
mint az újvonal
-e a Readline -t használja a sor megszerzéséhezban benegy interaktív héj
-énszöveg használata TEXTminta kezdeti szövegszámáraReadline
-nncharsVisszatérésmiután elvárta a NCHARS karaktereket
számáraúj sor, de tiszteljen egy elválasztóthakevesebb mint

NCHARS karakterekolvasa határoló előtt
-NncharsVisszatéréscsak pontosan NCHARS karakter elolvasása után, hacsak
EOF találkozik, vagyolvas alkalommalki, figyelmen kívül hagyva bármelyiket
határoló
-pa prompt a PROMPT karakterláncot adja ki, előtte egy új sor nélkül
próbálkozikolvas
-rteddne engedje, hogy a fordított perjelek elkerüljék a karaktereket
-steddnemkidobtabemenet terminálról érkezik
-tidőtúllépésidőki ésVisszatéréskudarchanak nekteljessora
bemenet nemolvasTIMEOUT másodpercen belül. Az értéke
A TMOUT változó az alapértelmezett időtúllépés. A TIMEOUT lehet a
tört szám. Ha a TIMEOUT az0,olvasvisszatér
azonnal, próbálkozás nélkülolvasbármilyen adat, visszaküldés
csak a sikerhabemenet elérhető a megadott
fájltleíró. Azkijárataz állapot nagyobb, mint128
hatúllépik az időtúllépést
-ufdolvastól tőlfájltleíró FD a standard bemenet helyett

Kilépés állapota:
AzVisszatérésa kód nulla, kivéve, ha a fájl végén találkozik,olvas alkalommalki
(ban ben melyik ügyaztnagyobb, mint 128), változó hozzárendelési hiba

Felhasználói adatok befogadása

Az interaktív bash szkriptek nem jelentenek semmit a felhasználói beavatkozás nélkül. A beépített olvasási módszerek olyan módszereket kínálnak, amelyekkel a felhasználói bevitel egy bash parancsfájlba kerülhet.

Egy bemeneti sor elkapása

A beviteli sor elkapásához a NAME nem írja be a NAME -t és a beállításokat. Ha a NAME nincs megadva, akkor a REPLY nevű változó tárolja a felhasználói adatokat.



Parancsok

{
kidobta -n 'Írjon be valamit, és nyomja le az enter billentyűt:';
olvas;
kidobtaGépeltél$ {REPLY}
}

Kimenet

Gépeljen be valamit, és nyomja le az enter billentyűt: valamit(új sor)
Gépeltél valamit

A bemeneti szó elkapása

A beviteli szó befogásához a -d opció szükséges. Egy szó esetén a -d -t szóközre állítjuk, olvassuk a „-d” -t. Ekkor, amikor a felhasználó megnyomja a szóközt, az olvasott szöveg betölti a REPLY szót.

Ne feledje, hogy ha a -d opciót állította be, a Backspace nem a várt módon működik. A visszalépéshez a bemeneti szó beolvasása közben az -e opció használható, olvassa el az -e ‘-d’ karaktert.

Parancsok

{
kidobta -n 'Írjon be valamit, és nyomja meg a szóközt:';
olvas '-d';
kidobta '';
kidobta - Gépeltél$ {REPLY}'
}

Kimenet

Gépeljen be valamit, és nyomja meg a szóközt: valamit(tér)
Gépeltél valamit

Gyors felhasználó

Az interaktív bash szkriptekben a felhasználó kérheti, hogy egy üzenet küldje el a felhasználónak, hogy milyen bemenet várható. Ezt mindig elérhetjük a beépített visszhang segítségével. Kiderült azonban, hogy van lehetőség az olvasásra.

Kérjen szót a felhasználótól

A bemeneti szavak elkapásakor az echo segítségével írtunk valamit, és üssük be a szóközt: a standard kimenetre a „-d” olvasás előtt. A -p opció lehetővé teszi az üzenet megjelenítését a szabványos bemenetről történő olvasás előtt.

Parancsok

{
olvas -p 'Írjon be valamit, és nyomja meg a szóközt:' '-d';
kidobta '';
kidobta - Gépeltél$ {REPLY}'
}

Kimenet

Gépeljen be valamit, és nyomja meg a szóközt: valamit(tér)
Gépeltél valamit

A felhasználótól kérjen egy titkot

Amikor a felhasználói bevitelt anélkül veszi fel, hogy az megjelenik a terminálon, az -s opció jól jön. Az read -s -p lehetővé teszi a felhasználói adatok befogását és elrejtését az alábbiak szerint.

Parancsok

{
olvas -s -p 'Írjon be valamit, amit megígérek, hogy titokban tartom:'
kidobta '';
kidobta 'A titkod biztonságban van velem';nincs beállítvaVÁLASZ;
kidobta '$ {REPLY}'
}

Kimenet

Írj be valamit, amit megígérek, hogy titokban tartom:
A titkod biztonságban van velem

Funkciók olvasással

Íme néhány példa a bash funkciókra, amelyek olvasást és szabványos bemenetet használnak

Alapvető koncepció

Az olvasást használó funkciók a vezetékes szabványos bemenetet és paramétereket használják. A feldolgozandó fő bemenet, például a fájl sorai egy szabványos bemeneten keresztül kerülnek át egy csövön keresztül. Az egyéb bemenet, ha van, és az opció paraméterként kerül átadásra.

olvas -t 1NAME1 NAME2 ...

olvasegybeépített parancs

-t 1 megakadályozza, hogy a bash szkript végtelen ideig várjon egy sor visszaadására szabványos bemeneten keresztül. Ha a standard bemenet kezdetben üres, a függvény 142 -es kilépési kóddal tér vissza, jelezve, hogy a beállított időkorláton belül nem olvastak dátumot

NAME1 NAME2 változónevek

... sok változónév szerepelhet

Most, hogy az alapmunkák elkészültek, nézzük meg, hogyan néznek ki ismerős függvények az read használatával.

Csatlakozás függvény olvasással

Tegyük fel, hogy olyan összekapcsolási függvényt szeretnénk, amely felveszi a szavak listáját, és visszaad egy másik szavak listáját, amelyhez elválasztó kapcsolódik. Íme, hogyan valósíthatunk meg egyesítési funkciót az olvasás használatával.

Forgatókönyv

#!/bin/bash
## csatlakozz
## 0.0.2 verzió - javítsa a rekurziós paramétereket
####################################################
csatlakozik() { { helyikorlátozó;korlátozó='{1-} USD';helyihatároló;
határoló='$ {2-.}';}
helyiautó
helyicdr
helyiIFS
IFS='$ {indelimiter}'
olvas -t 1autó cdr|| Visszatérés
teszt '$ {cdr}' || { kidobta '$ {autó}';Visszatérés;}
kidobta '$ {autó}$ {outdelimiter}$ {cdr}' | $ {FUNCNAME} '$ {indelimiter}'
'$ {outdelimiter}'
}
####################################################
## által létrehozott create-stub2.sh v0.1.2
## hétfő, 2019. június 17. 12:24:59 +0900
## lát
####################################################

Forrás: csatlakozz.sh
Parancs sor

kidobtaa b| csatlakozik

Kimenet

a.b

Parancs sor

kidobtaa b| csatlakozik | csatlakozik. |

Kimenet

nak nek|b

Térképfunkciók olvasással

Tegyük fel, hogy olyan térképfüggvényt szeretnénk, amely felvesz egy listát, és egy másik listát ad vissza, amely ugyanannyi elemet tartalmaz, amelyeket egy másik függvény módosít. Íme, hogyan valósíthatjuk meg a térkép funkciót a read használatával.

Forgatókönyv

#!/bin/bash
## térkép
## 0.0.1 verzió - kezdő
####################################################
térkép() { { helyifunction_name;függvény_neve='{1} USD';}
helyiautó
helyicdr
helyiIFS
IFS='$ {indelimiter-}'
olvas -t 1autó cdr|| Visszatérés
teszt '$ (deklarál -f $ {function_name})' || Visszatérés
teszt '$ {autó}' || { igaz;Visszatérés;}
$ {function_name} $ {autó}
kidobta '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
####################################################
## által létrehozott create-stub2.sh v0.1.2
## Kedd, 2019. június 18. 08:33:49 +0900
## lát
####################################################

Forrás: térkép.sh
Parancsok

NS() { helyi -én én={1} USD;kidobta$((én** 2 ));}
kidobta {1..10} |térkép Pow

Kimenet

1
4
9
16
25
36
49
64
81
100

Szűrési funkció olvasással

Tegyük fel, hogy olyan szűrőfüggvényt szeretnénk, amely felveszi a listát, és visszaad egy elemek allistáját, amelyek kielégítik egy másik függvény által meghatározott feltételeket. Íme, hogyan valósíthatunk meg szűrési funkciót az olvasás használatával.

Forgatókönyv

#!/bin/bash
## szűrő
## 0.0.1 verzió - kezdő
####################################################
szűrő() { { helyifunction_name;függvény_neve='{1} USD';}
helyiautó
helyicdr
helyiIFS
IFS='$ {indelimiter-}'
olvas -t 1autó cdr|| Visszatérés
teszt '$ (deklarál -f $ {function_name})' || Visszatérés
teszt '$ {autó}' || { igaz;Visszatérés;}
$ {function_name} '$ {autó}' || kidobta -n '$ {autó}'
kidobta '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
####################################################
## által létrehozott create-stub2.sh v0.1.2
## Kedd, 2019. június 18. 13:19:54 +0900
## lát
####################################################

Forrás: szűrő.sh

Parancsok

páratlan() { helyi -én én={1} USD;teszt !$((én% 2 )) -eq 1;}
kidobta {1..10} |szűrő páratlan

Kimenet

1 3 5 7 9

Hurok olvasással

Az olvasást használó hurkok lehetővé teszik a létrehozandó vagy már létező fájl soraiban való iterációt.

Alapvető olvasási hurok a bal oldalon (lhs)

Van egy parancsunk vagy függvényünk (lhs), amely sorokat hozhat létre egy fájlban, amelyek a read és a while ciklus használatával ciklusosak.

Konstrukció

lhs| míg olvas
tedd
igaz
Kész
lhs az aparancshogy visszaadja a sorok listáját

Parancsok

sor 5 | míg olvasén
tedd
kidobta $ {i}
Kész

Kimenet

1
2
3
4
5

Alapvető olvasási ciklus a jobb oldal számára (rhs)

Van egy fájlunk (rhs) soraival, amelyek a read és a while ciklus segítségével ciklusba tehetők.

Konstrukció

míg olvas
tedd
igaz
Kész <rhs

rhs az afájltsorokat tartalmaz

Parancsok

sor 5 >rhs
míg olvasén
tedd
kidobta $ {i}
Kész <rhs

Kimenet

1
2
3
4
5

Egyéni lhs ciklus olvasás közben

Van egy szófolyamunk, amelyet szeretnénk végigolvasni az olvasás használatával.

Konstrukció

(
IFS=''
lhs| míg olvas
tedd
igaz
Kész
)

lhs a szavak listája

Parancsok

(
IFS=''
kidobta {1..5} | míg olvasén
tedd
kidobta '$ {i}
Kész
)

Kimenet

1 2 3 4 5

Olvasás bármilyen fd -ről szabványos bemenet helyett

A beépített olvasási opció, amelyet gyakran érintetlenül hagynak, lehetővé teszi, hogy megadja, hogy milyen fájlleíróból kell olvasni, olvassa -u FD. Alapértelmezés szerint az FD szabványos bemenet.

Alapvető koncepció

Amikor egy fájl megnyílik, fájlleírók vannak hozzárendelve. Az IO átirányítás bash -ban lehetővé teszi a fájlok nyitva hagyását egy adott fájlleíróval. Ha befejeztük, írhatunk a fájlba, olvashatunk belőle, és bezárhatjuk.

_()
{
macska /dev/nulla>myfifo;# üres myfifo
végrehajt 3<myfifo;# nyissa meg a myfifo fájlt fd 3 -ként
kidobta 'Helló Világ! - 3 fd -től >myfifo;# írj a myfifo -nak
olvas -u 3;# sor olvasása az fd 3 -ból
végrehajt 3> &-;# zárja fd 3
kidobta $ {REPLY} # kimeneti sor leolvasása az fd 3 -ból zárás előtt
}
_# Helló Világ! fd 3 -tól

Vonat építése fájlleírókkal és olvasható -u FD -vel

Csak szórakozásból úgy döntöttem, hogy építek egy vonatot fájlleírókkal és -u FD olvasással. Minden fájlleíróhoz egy szám van írva. Minden fájlleíró kiolvassa az alábbi 1. fájlleírót, és hozzáfűzi magát.

Parancs sor

bashlinuxhint.com/épít/test-read-fd.sh vonat10

Kimenet

fds inicializálása ...
inicializálás fd3...
fd3intializált
inicializálás fd4...
fd4intializált
fds intializált
olvasás a fd -ből3és4...
4 3
fds tisztítás előtt
0 1 2 3 4 5
takarítás ...
FD -k tisztítása ...
Készfds tisztítása
fds tisztítás után
0 1 2 3

Ugrás a funkcióval az olvasás -u FD használatával

Ha fut

uname -nak nek
MINGW64_NT-10.0Asztal-XVVVVVV 2.7.0(0,307/5/3)
2017.-02-17 14:húszx86_64 Msys
bash --változat
GNÚbash, 4.4.12 verzió(1)-kiadás(x86_64-pc-msys)

lehet, hogy egy hiba miatt végrehajthat egy kihagyási funkciót, amely kihagyja a következő sort egy bash szkriptben a függvényeken kívül, mielőtt a szkriptforrás beolvasásra kerül. Vegye figyelembe, hogy a legtöbb rendszeren nem működik. Például,

uname -nak nek
Linux 4.9.0-8-amd64#1 Debian SMP 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
bash --változat
GNÚbash, 4.4.12 verzió(1)-kiadás(x86_64-pc-linux-gnu)

ugrás nem repül.

Funkció

ugrás() { olvas -u 31;}

Parancsok

ugrás
kidobtasor kihagyva
igaz

Kimenet

(üres)

A lényeg

A beépített olvasás a bash -ban többet tesz, mint a felhasználói bevitelt. Használható a bash parancsfájlokban használt fájlleírók közötti függvényekben, ciklusokban és cserékben. Időnként az olvasás és fájlleírók használatával végzett felfedezés húsvéti tojást eredményezhet.