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
Kimenet
a.bParancs sor
kidobtaa b| csatlakozik | csatlakozik. |Kimenet
nak nek|bTé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
kidobta {1..10} |térkép Pow
Kimenet
14
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 9Hurok 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éntedd
kidobta $ {i}
Kész
Kimenet
12
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 >rhsmí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 5Olvasá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 vonat10Kimenet
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 nekMINGW64_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 nekLinux 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áskidobtasor 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.