Kas skaitoma?
Skaitymas yra „bash builtin“ komanda, kuri nuskaito eilutės turinį į kintamąjį. Tai leidžia skaidyti žodžius, susietus su specialiu apvalkalo kintamuoju IFS. Jis visų pirma naudojamas vartotojo įvesties gaudymui, tačiau gali būti naudojamas funkcijoms įgyvendinti, naudojant įvestį iš standartinės įvesties.
Bash skaityti integruotą komandų pagalbą
Prieš pasinerdami į tai, kaip naudoti komandą skaityti „bash“ scenarijuose, štai kaip mes gauname pagalbą. Čia turėtumėte pamatyti visas skaitymo komandos parinktis ir aprašymus, kuriuos bandysime pateikti pavyzdžiuose.
Komandinė eilutė
padėti skaityti
Išvestis
skaityti:skaityti [-žmonės] [-masyvas] [-d dalintis] [-i tekstas] [-n nchars] [-N nchars]
[-p raginimas] [-skirtasis laikas] [-u fd] [vardas ...]
Perskaitykite eilutę iš standartinio įvesties irsuskaldytijį į laukus.
Skaito vieną eilutę iš standartinės įvesties arba išfailądeskriptorius FD
jeiį-upateikiama parinktis. Linija yrasuskaldytiį laukuskaipsu žodžiu
suskaidymas, o pirmasis žodis priskiriamas pirmajam VARDUI, antrasis
žodį antrajam VARDUI ir pan., priskiriant likusius žodžius
įpaskutinisVARDAS. Rasti tik personažaiį $ IFSyra pripažįstamikaipžodis
skiriamieji ženklai.
Jei nepateikiama jokių pavadinimų, nurodykite eilutęskaitytiyra saugomasįkintamasis REPLY.
Galimybės:
-įmasyvas priskiria žodžiusskaitytiį nuoseklius masyvo indeksus
kintamasis ARRAY, pradedant nuo nulio
-datribotiTęsti ikipirmasis DELIM simbolis yraskaityti, veikiau
nei nauja linija
-eilučiai gauti naudokite „Readline“įinteraktyvus apvalkalas
-inaudoti tekstą TEXTkaippradinį tekstądėlSkaitymo eilutė
-nncharsgrįžtiperskaitę NCHARS simbolius, o ne laukę
dėlnauja eilutė, bet gerbkite ribotuvąjeimažiau nei
NCHARS simboliai yraskaitytiprieš ribotuvą
-Nncharsgrįžtitik perskaičius tiksliai NCHARS simbolius, nebent
Atsiranda EOF arbaskaityti laikaiišeiti, nekreipiant dėmesio
ribotuvas
-praginimas išveskite eilutę PROMPT be galinės naujos eilutės
bandydamasskaityti
-rdarytineleiskite atbulinių brūkšnių išvengti simbolių
-sdarytineišmetėįvestis ateina iš terminalo
-tlaikas baigėsilaikasišeiti irgrįžtinesėkmėjeiįbaigtaseilutė
įvestis nėraskaitytiper TIMEOUT sekundę. Vertė
TMOUT kintamasis yra numatytasis skirtasis laikas. TIMEOUT gali būti a
trupmeninis skaičius. Jei TIMEOUT yra0,skaitytigrįžta
iš karto, nesistengdamasskaitytibet kokie duomenys, grąžinami
tik sėkmėjeiįvestis yra prieinama nurodytam
failądeskriptorius. Theišeitistatusas yra didesnis nei128
jeilaikas yra viršytas
-ufdskaitytinuofailądeskriptorius FD vietoj standartinės įvesties
Išėjimo būsena:
Thegrįžtikodas yra nulis, nebent susiduriama su failo pabaiga,skaityti laikaiišeiti
(į kuris atvejistaiyra didesnis nei 128), kintamojo priskyrimo klaida
Gaunamas vartotojo įvestis
Interaktyvūs „bash“ scenarijai yra niekas, nesulaukus vartotojo įvesties. Skaitymo integruotas numato metodus, kaip vartotojo įvestis gali būti įtraukta į „bash“ scenarijų.
Įvesties eilutės gaudymas
Norint sugauti įvesties eilutę, skaitymo metu nereikia nurodyti VARDŲ ir parinkčių. Kai NAME nenurodytas, kintamasis, pavadintas REPLY, naudojamas vartotojo įvesties saugojimui.
Komandos
{išmetė -n „Įveskite ką nors ir paspauskite„ Enter “:;
skaityti;
išmetėĮvedėte$ {REPLY}
}
Išvestis
Įveskite kažką ir paspauskite „Enter“: kažkas(nauja linija)Kažką įvedėte
Gaunamas įvesties žodis
Norint sugauti įvesties žodį, būtina parinktis -d. Žodžio atveju mes nustatytume -d į tarpą, perskaitykime „-d“. Tai yra tada, kai vartotojas paspaudžia tarpo klavišą, nuskaitymas įkelia atsakymą su žodžiu.
Atminkite, kad pasirinkus parinktį -d, grįžimo klavišas neveikia taip, kaip tikėtasi. Norėdami grįžti atgal, bandydami sugauti įvesties žodį, galite naudoti parinktį -e, perskaitykite -e '-d'.
Komandos
išmetė -n „Įveskite ką nors ir paspauskite tarpą:“;
skaityti '-d';
išmetė '';
išmetė 'Tu rašei$ {REPLY}'
}
Išvestis
Įveskite kažką ir paspauskite tarpą: kažkas(erdvės)Kažką įvedėte
Greitas vartotojas
Interaktyviuose „bash“ scenarijuose, raginančiuose vartotoją, gali reikėti pranešimo, kad vartotojas nurodytų, kokio įvesties tikimasi. Mes visada galime tai padaryti naudodami integruotą aidą. Tačiau paaiškėja, kad yra galimybė naudoti skaitymą.
Paprašykite vartotojo žodžio
Paimdami įvesties žodį, naudojome aidą rašydami „Įveskite kažką“ ir paspauskite tarpo klavišą: į standartinę išvestį prieš skaitydami „-d“. Parinktis -p leidžia rodyti pranešimą prieš skaitant iš standartinės įvesties.
Komandos
{skaityti -p „Įveskite ką nors ir paspauskite tarpą:“ '-d';
išmetė '';
išmetė 'Tu rašei$ {REPLY}'
}
Išvestis
Įveskite kažką ir paspauskite tarpą: kažkas(erdvės)Kažką įvedėte
Paprašykite vartotojo sužinoti paslaptį
Gaudant vartotojo įvestį, kai jis nerodomas terminale, „-s“ parinktis yra naudinga. skaityti -s -p leidžia sugauti ir paslėpti vartotojo įvestį taip.
Komandos
{skaityti -s -p „Įveskite ką nors, ką pažadu laikyti paslaptyje:“
išmetė '';
išmetė „Tavo paslaptis saugi pas mane“;nenustatytaATSAKYTI;
išmetė '$ {REPLY}'
}
Išvestis
Įveskite tai, ką žadu laikyti paslaptyje:Tavo paslaptis saugi pas mane
Funkcijos naudojant skaitymą
Čia pateikiami „bash“ funkcijų, naudojančių skaitymą ir standartinį įvestį, pavyzdžiai
Pagrindinė koncepcija
Skaitymo funkcijos naudoja standartinį įvestį ir parametrus. Pagrindinis apdorojamas įėjimas, pvz., Failo eilutės, perduodamas per standartinį įvestį per vamzdį. Kiti įvestys, jei yra, ir parinktis perduodami kaip parametrai.
skaityti -t 1NAME1 NAME2 ...skaitytiyrapastatytas komandą
-t 1 neleidžia „bash“ scenarijui neribotą laiką laukti, kol eilutė bus grąžinta naudojant įprastą įvestį. Jei standartinė įvestis iš pradžių tuščia, funkcija grįžta su išėjimo kodu 142, reiškiančiu, kad per nustatytą laiko tarpą nebuvo nuskaityta data
NAME1 NAME2 yra kintamieji pavadinimai... gali būti išvardyta daug kintamųjų pavadinimų
Dabar, kai pamatai yra nustatyti, pažiūrėkime, kaip atrodo žinomos funkcijos, įdiegtos naudojant skaitymą.
Prisijungimo funkcija naudojant skaitymą
Tarkime, kad norime sujungimo funkcijos, kuri paimtų žodžių sąrašą ir grąžintų kitą žodžių sąrašą, sujungtą su skiriamuoju ženklu. Štai kaip mes galime įdiegti prisijungimo funkciją naudodami skaitymą.
Scenarijus#!/bin/bash
## prisijunk
## versija 0.0.2 - pataisykite rekursijos parametrus
###############################################
prisijungti() { { vietinisribotuvas;ribotuvas='{1-} USD';vietinisišorinis ribotuvas;
ribotuvas='{2-.} USD';}
vietinisautomobilis
vietiniscdr
vietinisIFS
IFS='$ {indelimiter}'
skaityti -t 1automobilio cdr|| grįžti
testas '$ {cdr}' || { išmetė '$ {car}';grįžti;}
išmetė '$ {car}$ {outdelimiter}$ {cdr}' | $ {FUNCNAME} '$ {indelimiter}'
'$ {outdelimiter}'
}
###############################################
## sukurta create-stub2.sh v0.1.2
## pirmadienį, 2019 m. birželio 17 d. 12:24:59 +0900
## pamatyti
###############################################
Šaltinis: prisijungti.sh
Komandinė eilutė
Išvestis
a.bKomandinė eilutė
išmetėa b| prisijungti | prisijungti. |Išvestis
į|bŽemėlapio funkcijos naudojant skaitymą
Tarkime, kad norime žemėlapio funkcijos, kuri paimtų sąrašą ir grąžintų kitą sąrašą, kuriame yra tiek pat elementų, kuriuos modifikuoja kita funkcija. Štai kaip mes galime įdiegti žemėlapio funkciją naudodami skaitymą.
Scenarijus#!/bin/bash
## žemėlapis
## versija 0.0.1 - pradinė
###############################################
žemėlapis() { { vietinisfunkcija_pavadinimas;funkcija_pavadinimas='{1} USD';}
vietinisautomobilis
vietiniscdr
vietinisIFS
IFS='$ {indelimiter-}'
skaityti -t 1automobilio cdr|| grįžti
testas '$ (deklaruoti -f $ {function_name})' || grįžti
testas '$ {car}' || { tiesa;grįžti;}
$ {function_name} $ {car}
išmetė '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
###############################################
## sukurta create-stub2.sh v0.1.2
## antradienį, 2019 m. birželio 18 d. 08:33:49 +0900
## pamatyti
###############################################
Šaltinis: žemėlapis.sh
Komandos
išmetė {1..10} |žemėlapis pow
Išvestis
14
9
16
25
36
49
64
81
100
Filtravimo funkcija naudojant skaitymą
Tarkime, kad norime filtro funkcijos, kuri paimtų sąrašą ir grąžintų elementų, kurie atitinka kitos funkcijos nustatytas sąlygas, pogrupį. Štai kaip mes galime įdiegti filtravimo funkciją naudodami skaitymą.
Scenarijus#!/bin/bash
## filtras
## versija 0.0.1 - pradinė
###############################################
filtras() { { vietinisfunkcija_pavadinimas;funkcija_pavadinimas='{1} USD';}
vietinisautomobilis
vietiniscdr
vietinisIFS
IFS='$ {indelimiter-}'
skaityti -t 1automobilio cdr|| grįžti
testas '$ (deklaruoti -f $ {function_name})' || grįžti
testas '$ {car}' || { tiesa;grįžti;}
$ {function_name} '$ {car}' || išmetė -n '$ {car}'
išmetė '$ {cdr}' | $ {FUNCNAME} '$ {function_name}'
}
###############################################
## sukurta create-stub2.sh v0.1.2
## antradienį, 2019 m. birželio 18 d. 13:19:54 +0900
## pamatyti
###############################################
Šaltinis: filtras.sh
Komandos
keista() { vietinis -i i={1} USD;testas !$((i% 2 )) -ekv 1;}išmetė {1..10} |keistas filtras
Išvestis
1 3 5 7 9Kilpos naudojant skaitymą
Ciklai, naudojantys skaitymą, leidžia kartoti failo, kuris turi būti sukurtas arba jau yra, eilutes.
Pagrindinė skaitymo kilpa kairėje pusėje (lhs)
Turime komandą ar funkciją (lhs), kuri gali generuoti eilutes faile, kurį galima perjungti naudojant skaitymo ir laiko ciklą.
Konstruotilhs| tuo tarpu skaityti
daryti
tiesa
padaryta
lhs yra akomandąkuris grąžina eilučių sąrašą
Komandos
sek 5 | tuo tarpu skaitytiidaryti
išmetė $ {i}
padaryta
Išvestis
12
3
4
5
Pagrindinė skaitymo kilpa dešinei pusei (rhs)
Turime failą (rhs) su eilutėmis, kurias galima perkelti naudojant skaitymo ir laiko ciklą.
Konstruotituo tarpu skaityti
daryti
tiesa
padaryta <rhs
rhs yra afailąkuriose yra eilutės
Komandos
sek 5 >rhstuo tarpu skaitytii
daryti
išmetė $ {i}
padaryta <rhs
Išvestis
1
2
3
4
5
Pasirinktinis lhs ciklo metu naudojant skaitymą
Turime žodžių srautą, kurį norėtume pakartoti naudodami skaitymą.
Konstruoti(
IFS=''
lhs| tuo tarpu skaityti
daryti
tiesa
padaryta
)
lhs yra žodžių sąrašas
Komandos
(IFS=''
išmetė {1..5} | tuo tarpu skaitytii
daryti
išmetė '$ {i}
padaryta
)
Išvestis
1 2 3 4 5Skaitymas iš bet kurios fd vietoj standartinės įvesties
Skaitymo integruota parinktis, dažnai palikta nepaliesta, yra ta, kuri leidžia jums nurodyti, iš kokio failo aprašymo skaityti, skaityti -u FD. Pagal numatytuosius nustatymus FD laikoma standartine įvestimi.
Pagrindinė koncepcija
Kai atidaromas failas, priskiriami failų aprašai. IO peradresavimas „bash“ leidžia palikti failą atidarytą naudojant konkretų failo aprašą. Mums leidžiama rašyti į failą, skaityti iš jo ir uždaryti, kai baigsime.
_(){
katė /dev/nulis>myfifo;# tuščias myfifo
vykd 3<myfifo;# atidarykite failą myfifo kaip fd 3
išmetė 'Labas pasauli! - nuo 3 fd >myfifo;# rašyk myfifo
skaityti -u 3;# skaityti eilutę iš fd 3
vykd 3> &-;# uždaryti fd 3
išmetė $ {REPLY} # išvesties eilutė nuskaityta iš fd 3 prieš uždarant
}
_# Labas pasauli! nuo fd 3
Traukinio kūrimas su failų aprašymais ir skaitymas -u FD
Tiesiog savo malonumui nusprendžiau sukurti traukinį su failų aprašymais ir perskaityti -u FD. Prie kiekvieno failo aprašymo rašomas skaičius. Kiekvienas failo aprašas nuskaitomas iš toliau pateikto 1 failo deskriptoriaus ir pridedamas prie savęs.
Komandinė eilutė
muštilinuxhint.com/statyti/test-read-fd.sh traukinys10Išvestis
inicijuojamas fds ...inicijuojant fd3...
fd3intializuotas
inicijuojant fd4...
fd4intializuotas
fds intializuotas
skaitymas iš fd3ir4...
4 3
fds prieš valymą
0 1 2 3 4 5
valymas ...
valyti fds ...
padarytavalyti fds
fds po valymo
0 1 2 3
Praleisti funkciją naudojant skaitymą -u FD
Jei bėgate
uname -įMINGW64_NT-10.0Stalviršis-XVVVVVV 2.7.0(0.307/5/3)
2017 m.-02-17 14:dvidešimtx86_64 „Msys“
mušti --versija
GNUmušti, 4.4.12 versija(1)-paleisti(x86_64-pc-msys)
gali būti įmanoma dėl klaidos įdiegti praleidimo funkciją, kuri praleidžia šią eilutę bash scenarijuje už funkcijų ribų prieš nuskaitant scenarijaus šaltinį. Atminkite, kad jis neveikia daugumoje sistemų. Pavyzdžiui,
uname -į„Linux“ 4.9.0-8-amd64#1 Debian SMP 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
mušti --versija
GNUmušti, 4.4.12 versija(1)-paleisti(x86_64-pc-linux-gnu)
skip neskraido.
Funkcija
praleisti() { skaityti -u 31;}
Komandos
praleistiišmetėeilutė praleista
tiesa
Išvestis
(tuščia)Esmė
„Bash“ integruotas skaitymas ne tik sugauna vartotojo įvestį. Jis gali būti naudojamas funkcijoms, kilpoms ir mainams tarp failų aprašų, naudojamų „bash“ scenarijuose. Retkarčiais, naudojant skaitymo ir failų aprašus, galima gauti Velykų kiaušinių.