0. Indekisi
- Zvinhu zvinoitika kuvanhu vazhinji
- Maumbirwo echinyorwa
- Dhinda pachiratidziri
- Verenga mushandisi INPUT
- Kuverenga mu bash
- Mamiriro ezvinhu
- Zvishwe
- Mabasa
- getops
1. Zvinhu zvinoitika kuvanhu vazhinji
/ bin / bash kana / bin / sh
Chimwe chezvinhu zvekutanga zvinoitwa nemuchina kana uchiita chinyorwa chedu chiri kutarisa kuti inofanira kuzviita nepi shell Pane mazhinji aripo linux masisitimu / bin / sh chinongedzo ku / bin / bash, asi izvi hazviwanzo kuitika, semuenzaniso mukugovera kunoshandisa busy box uyai Sh uye kazhinji vanouyawo nazvo Bash, asi kana iwe ukashandisa / bin / sh, haimhanye neBash. Ndokusaka ini ndichikurudzira kugara uchishandisa / bin / bash.
Unicode vs. ASCII
Wati wamboshamisika here kuti nei usingakwanise kushandisa "¿" kana "ñ" mune ako zvinyorwa? Kana kushandisa maaccents? Inogona kuve inotsamwisa mune yekudyidzana zvinyorwa. Izvi zvinodaro nekuti kusarudzika encoding kweBash ndeye ASCII, kana chii chakafanana, chimiro cheChirungu chakaiswa. Kuti tichinje iyo isu tinongofanirwa kutaurira yedu script kuti tinoda kushandisa Unicode. Nezve izvo iwe unofanirwa kuwedzera tambo uchingove mushure mekuraira muturikiri:
# - * - KUSVIRA: UTF-8 - * -
Ive nekuchenjerera, zvakakosha kuti uyu mutsetse uri pakutanga kwechinyorwa.
Ita kuti script ishandiswe
Zvinoseka kuti vangani vanhu vanomhanya zvinyorwa ne «$ bashscript.sh" panzvimbo ye "$ ./script.sh»Shure kwezvose, ndizvo zvatakatsanangurira Shell.
Kuwedzera mvumo yekuuraya, iwe unofanirwa kuita:
sudo + x script.sh
BIN = "dhairekitori kwatina zvinyorwa" PATH = "$ BIN $ PATH"
2. Maumbirwo echinyorwa
- Musoro webhodi
- Tsananguro yezvakasiyana zvepasirese
- Rubatsiro
- Mabasa
- Muviri mukuru
Musoro ndipo patinoratidza kuti ndeipi Shell yatinoda kushandisa uye encoding. Kubatsira kwemabasa ndiko kushandisa zvekare kodhi inodzokororwa nekuinyora kamwe chete uye kuita kuti zvive nyore kunzwisisa script, yekodhi inodarika mitsara zana inobatsira kwazvo.
Kuti ushandise mashandiro, iwo anofanirwa kutsanangurwa pamberi pemuviri mukuru wescript yedu. Uye kana isu tichida kushandisa zvinoshanduka padanho repasirese rechinyorwa chedu chese, zvese mumuviri mukuru uye mumabasa, tinofanira kuzvitsanangura pakutanga kwechinhu chose, mushure memusoro chete.
Chekupedzisira, yakanaka tsika yekunyora yekubatsira basa rekuti kana yedu script inomhanya zvakashata kana ine yakaipa parameter. Zviripachena, mune izvo zviitiko isu tinoda kubuda script ipapo, tisinga verenge mabasa. Nezve izvo isu zvatinogona kushandisa:
basa rubatsiro () {echo "" "Yedu yakanyatsorongedzwa rubatsiro mavara." "" buda kana [[-z $ 1 || $ 1 == "-h" || $ 1 == "--help"]]; ndokubatsira fi
Kana isu tikawedzera "kubuda" kune yekubatsira basa, isu tinobuda script nguva dzese patinomhanya nerubatsiro, semuenzaniso mushure mekukanganisa mameseji, nezvimwe. Isu tinochengetedza mashoma mitsara yekodhi.
Mamiriro acho anoratidza kuratidzwa rubatsiro pachiratidziri uye kubuda kana script ikamhanya isina paramita kana if -h / –help yakatsanangurwa. Kana iwe ukatarisa ndiwo maitiro akajairwa ezvizhinji zvemalinux zvirongwa.
3. Dhinda pascreen
Pane mirairo miviri mikuru yekudhinda ku screen mu bash: «echo»Uye«kudhinda«. Ivo vaviri vari nekukurumidza uye vese vari chikamu che bash. Musiyano mukuru weanotanga ndeyekuti echo inowedzera mutsara mutsva kumagumo, nepo «kudhinda»Hazviiti.
Echo yakanaka kwazvo uye ndizvo zvinoshandiswa nevanhu vazhinji, zvisinei kana uchiverenga INPUT yemushandisi, kana kana iwe uchida kupurinda akasiyana akatorwa kubva kumafaira nekugadziriswa kweshoko, zvinhu zvisinganzwisisike zvinogona kuitika. Iwo anowanzo gadziriswa zviri nyore, sezviri nyore sekushandura makotesheni maviri kuita asina kuroorwa kana zvinopesana, kana kutora mareferenzi akasiyana kubva mune akatorwa. «ungira»Zvinoita zvinhu zvisinganzwisisike zvakare zvichienderana nemabatirwo avakaitwa, kana tichigara tichishandisa Ubuntu kana nguva dzose Fedora, hazvitikanganisa, asi kana tikachinja kugovera zvinoita.
Ndokusaka ndichishandisa «kudhinda«, Izvo zvisingandipe kutemwa nemusoro uye zvakare kuzvibata senge«kudhinda»Kubva C kana iyo«dhinda»YePython, izvo zvakakosha kwazvo kana iwe uchizomboda kuisa script yako kune mumwe mutauro chirongwa.
4. Verenga mushandisi INPUT
Zvese zvatinonyora mushure mezita redu rechinyorwa uye tisati tarova ENTER kiyi zvinongochengetedzwa otomatiki mumhando dzakasiyana. Aya misiyano ndeye mhando $ X uko X iri nhamba.
«$0»Inoratidza zita re script yedu uye kubva ku«$1»Kusingaperi zvinhu zvese zvatakanyora gare gare zvinosiyana Semuyenzaniso:
katsi << EOF >> test.sh #! / bin / bash # - * - ENCODING: UTF-8 - * - printf "\ $ 0 = $ 0 \ n" printf "\ $ 1 = $ 1 \ n" printf "\ $ 2 = $ 2 \ n" EOF chmod + x script.sh ./script.sh yangu faira.txt
Isu tinogadzira script yekuyedza, tinoita kuti ishandiswe, uye unomhanya nayo nemaviri parameter. Isu tinowana iyo skrini inoburitsa ye:
$ 0 = ./script.sh $ 1 = yangu $ 2 = faira.txt
Tichishandisa makotesheni taigona kupfuudza "yangu faira.txt" kuenda ku "$ 1".
Tinogona zvakare kuverenga iyo INPUT yemushandisi iine "verenga" kuraira, zvichiratidza zvakananga musiyano kwatinoda kusevha paramende. Semuyenzaniso:
printf "Zita rako ndiani? \ n" verenga NAME printf "Mhoro, $ NAME. \ n"
5. Kuverenga muBash
Nezve izvo isu tinogona kushandisa «express«Chero bedzi isu tisingade kuita kuverenga kwakaomarara. Zvinhu zviviri zvinofanirwa kucherechedzwa, yekutanga ndeyekuti «express»Inongobvuma manhamba akazara, chechipiri ndechekuti kupatsanurana kunodzosera mhedzisiro yese, kuti tione zvakasara zvatinogona kushandisa«%".
Kazhinji isu tinoda kupa mhedzisiro yeexp kune musiyano. Tinogona kuzviita munzira mbiri:
VAR2 = `expr $ VAR1 / 10` VAR2 = $ (expr $ VAR1 / 100)
Iwe unogona zvakare kutsika «express»Uchishandisa zvakapetwa zviviri:
VAR2 = $ (($ VAR1 / 100))
6 Mamiriro
Izvo zvakatove zvakanyorwa nenzira yakakura kwazvo nezve «if«,«mumwe«,«elif»Uye mamiriro. Unogona kuverenga nezvazvo mu:
- Kugadzira mu bash: chikamu 1
- Bhash: kana, saka, zvimwe mamiriro
- Tarisa uone kana faira kana dhairekitori riripo kana kuti kwete uye nekuwedzera uine if loop
- Kugadzira mu bash: chikamu 2
Ini ndinongoda kuratidza musiyano uripo pakati pekushandiswa kwemabhureki akareruka mabhureki, «[]«, Uye mabhureki maviri,«[[]]«, Zvemamiriro. Nemabhuraketi maviri tinogona kushandisa mamwe mamiriro:
- «&&»For uye
- «||»Kune kana
Kushandisa "&&»Uye«||»Nemabhureki akareruka, chikamu chimwe nechimwe chinofanira kupatsanurwa mumabhureki akaparadzana. Muenzaniso unoshandiswa kwechikamu chegwaro rinotarisa kuti uone kana rubatsiro ruchida kuitwa runogona kuva:
kana [-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "--help"]]; ndokubatsira fi
Izvo zvinotiponesa kubva pakuve nekunyora mazita anoshanduka mumakotesheni kudzivirira zvikanganiso. Semuyenzaniso:
kana [$ 1 = 1]; wobva printf "Iyo paramende yakaenzana na1"; fi kana ["$ 1" = 1]; wobva printf "Iyo paramende yakaenzana na1"; fi kana [[$ 1 = 1]]; wobva printf "Iyo paramende yakaenzana na1"; fi
Kana script.sh inomhanya isina chero paramita, yekutanga kesi yaizopa kukanganisa:
bash: [: =: unary mushandi anotarisirwa
Izvo zvisina kutaurwa nezvazvo ndezva «mhosva«, Iyo inoshandiswa kurerutsa«if«. Ngatitangei pakutanga, patinenge tisina chero «if»Yese kodhi ichaitwa. Kana isu tikawedzera mamiriro «if»Tichava nematare maviri, imwe umo kodhi yekodhi iri mukati me«if»Uye imwe nyaya apo ichi block hachiurayiwe.
Kana tikawedzera «mumwe«Tichavawo nemakesi maviri, asi aya maviri kesi akasiyana neakare apfuura. Nekuti ikozvino pachave nemamiriro maviri emakodhi anovhara, A uye B, uye C block, inova ndiyo yakasara chirongwa. A kana B achaurayiwa, uye C. Muchiitiko chakapfuura aive A naC kana C chete.
Kudzivirira kunyora mamiriro «kana / zvimwe"mukati"mumwe»Uye kurerutsa kuverenga kwekodhi, yakagadzirwa«elif«. Kana isu paine akawanda mamiriro anoenderana neakamberi, semuenzaniso huwandu hwenhamba kana mhando:
VAR1 = $ 1 kana [[$ VAR1 = 1]]; ipapo printf "1 \ n" elif [[$ VAR1 = 2]]; ipapo printf "2 \ n" elif [[$ VAR1 = 3]]; wobva wadhinda "3 \ n" zvimwe printf "hapana \ n" fi
Kana iri yekupedzisira «elif»Mamiriro ezvinhu mazhinji achaverengerwa. Nemamiriro ezvinhu maitiro aya akagadziriswa.
VAR1 = $ 1 kesi $ VAR muna 1) printf "1 \ n" ;; 2) kupurinda "2 \ n" ;; 3 | 4) printf "3 kana 4, zvinoenderana \ n" ;; *) printf "hapana \ n" ;; C uyo
Musiyano uchaverengerwa, mune iyi nyaya VAR1, uye ichaonekwa kana yakaenzana nechero nyaya, kana zvisiri, iyo default kesi "*" ichaitwa. Semicoloni mbiri dzakaenzana ne «zororo«, Vanotaurira«mhosva»Izvo zvinofanirwa kupera.
7. zvishwe
Akashoma zvishwe anozivikanwa mune chero epurogiramu mitauro. MuBash ivo vari «apo«,«kusvikira»Uye«nokuti«. Izvo zvakatove zvakanyorwa mu blog nezve izvi:
Kune mhando mbiri dzezvirukwa «nokuti«, Izvo zviri zvemhando«$ yeVAR muLOQUESEA»Uye ndeapi erudzi C«$ ye ((I = 0; I <= 10; I ++))«. Rudzi rwechipiri rwezvirukwa «nokuti»Inobatsira kwazvo, ine zvikamu zvitatu pakutanga kwechiuno.
- Kuzivisa uye kutanga kweanoshanduka (Mune ino kesi anobatsira anoshandura "I = 0").
- Maitiro ekuurayiwa (kusvikira ini ndadarika kana kuenzana negumi).
- Kuwedzera kwekusiyana kwekubatsira
Mune mawonero angu ndicho chiuno chine simba kupfuura zvese. Semuenzaniso, inodhinda manhamba ese kubva pa0 kusvika gumi, inosanganisira:
#! / bin / bash ye ((I = 0; I <= 10; Ini ++)); ita printf "$ I \ n" zvaitwa
8. Mabasa
Pane zvimwe zvinhu izvo Bhash isingatibvumidze kuti tiite, handiti? Pakutanga kuona, bash mabasa anokudzivirira kubva pakuita zvinhu zvitatu: kuzivisa misiyano yemuno mumabasa, kupfuudza paramita kumabasa, uye kudzorera paramende. Zvese zvine mhinduro.
Usaite chero chinhu senge:
#! / bin / bash VAR = 1 printc "$ VAR \ n" basa hello () {VAR = 2 printf "$ VAR \ n"} hello printf "$ VAR \ n"
Izvi zvinoprinda ku screen 1, 2 uye 2.
Kuti uzive akasiyana emuno, wedzera «zvomunharaunda»Kana uchizivisa:
#! / bin / bash VAR = 1 printf "$ VAR1 \ n" basa foo () {yemuno VAR1 = 2 printf "$ VAR1 \ n"} printf "$ VAR1 \ n" foo printf "$ VAR1 \ n"
Izvi zvinodhindisa 1, 1, 2, 1 pachiratidziri.
Uno pasa sei paramita kune basa?
#! / bin / bash # - * - ENCODING: UTF-8 - * - basa hello () {printf "Mhoro $ 1 \ n"}
printf "Zita rako ndiani? \ n"
verenga VAR1
Mhoro $ VAR1
Paramita dzinodzoserwa sei?
#! / bin / bash # - * - ENCODING: UTF-8 - * - function hello () {printf "Hello holita"} printf "Unonzi ani zita? \ n" verenga VAR1 VAR1 = $ (hello) # HERE ZVAKO printf "$ VAR1 $ VAR2 \ n"
Sezvauri kuona, izvi zvine zvipingaidzo zviviri, unogona chete kudzosa paramende imwe, inogona kuve vector 😀, uye kana iwe uchida kudzorera paramende, haugone kudhinda pachiratidziri kubva pane iro basa.
9. Getops
Chimwe chezvinhu zvekupedzisira zvaunofanira kuziva nezve Bash kugadzira zvinyorwa zvakaoma ndeye «getops«. Iyo inoshandiswa kupfuudza sarudzo kune iyo script zvisinei neodha. Iyo chete yekudzikira ndeyekuti inongobata pfupi mapfupi sarudzo:
#! / bin / bash # - * - ENCODING: UTF-8 - * - VARC = 0 basa rekubatsira () {printf "Rubatsiro meseji \ n" kubuda} kana [[-z $ 1]]; wobva wabatsira fi uchinge watora: ha: b: c OPT; ita $ OPT mu h) rubatsiro ;; :) rubatsiro ;; a) VARA = $ OPTARG ;; b) VARB = $ OPTARG ;; c) VARC = 1 ;; \?) rubatsiro ;; esac yaitwa # Main block yechinyorwa icho # chinoita zvinhu neVARA, VARB uye VARC
«getopts»Inoverenga sarudzo imwe neimwe, saka chiuno chinodiwa.
Kune maviri marudzi esarudzo anogona kupfuudzwa uchishandisa «getopts":
- Maparamende anonzi mireza, mune ino kesi -c kana -h. Dzinotsanangurwa netsamba yatinoda kushandisa. Ivo vakaita sezvakasiyana zveBoolean, «zvechokwadi»(Vari) kana«venhema"(Havapo pano).
- Maparamende ane dzakabatana nharo, -a chero chinhu, -b chero chinhu. Dzinotsanangurwa netsamba yatinoda nekoloni pazasi. Iyo nharo yakachengetwa muOTTARG (iri zita harichinjiki).
Ino script inoitei?
Inotaridza meseji yekubatsira kana pasina sarudzo yapfuudzwa, kana iyo "-h" paramende ikapasiswa, kana pasiri pamutemo paramende ikapasiswa (semuenzaniso "-x", izvi zvinoitwa na "\?") Kana kana paramende inoshanda isina nharo (":"). Mune dzimwe nyaya dzese inochengetedza kuvepo kwe "-c" se1 muVARC, uye hunhu hwakapasiswa na "-a" Uye "-b" muVARA neVARB.
TENZI. Ini handitaure zvimwe U_U
Mhoro, yakanaka kwazvo chinyorwa.
Hei iwe unoisa kupa mvumo Sudo + x panzvimbo ye chmod + x
$ sudo chmod + x script.sh
(Kuti uve chaiwo, hehe)
Ah, makorokoto uye ndinokutendai!
Yakanaka kwazvo posvo, ini ndinokukorokotedza iwe, chengeta yakadaro, Kwaziso
Uye kana iwe uchida kuti script igoonekwa kana ichiitwa, nhanho nhanho, uchiona semuenzaniso maitiro, mamiriro uye zvese zvinoita, unogona kushandisa:
sh -x chinyorwa
Reply with quote
CHIKAMU chekudzidzisa. Yakanaka uye yakanyatsotsanangurwa.
Ndinokutendai.
Yakanaka kwazvo posvo pamusoro wenyaya 😉
Inonakidza kwazvo uye yakakosha yekutenda neruzivo….
MUFARO !!!
Ndinokutendai mese nekukorokotedza kwenyu, sekuraira kwaMiguel, haanditenderi kuti ndigadzirise iyo yekupinda kana yangoburitswa. Ichafanirwa kuita elav ndinofungidzira.
Kugona chose!
Chekutanga pane zvese ini ndaida kukukorokotedza iwe pane iyo posvo, ini ndakaona zviri nyore kunzwisisa uye zvinonyatso kubatsira kuteedzera iwo marongero ekuronga mushe mu bash, kunyanya kune vanhu vari kutanga kuronga.
Nekudaro ini ndawana akati wandei ehumwe izvo zvandinofunga kuti zvinofanirwa kugadziriswa.
Kutanga: muchikamu «2. KUSVIRA KWENYAYA »iro basa harina kuvharwa, izvo zvinokonzeresa matambudziko kana uchizviita mune script.
Mhinduro yacho ingave yekuwedzera brace mushure mekurayira kwe "kubuda".
Chechipiri: muchikamu «4. VERENGA KUSHANDISWA KWEMUSHANDI
Kugadzirisa dambudziko iri, unogona kushandisa iyo "shift" kuraira kutora anotevera akasiyana. Kana taura zvinoshanduka mumabhureki "$ {10}", kuti bash itore tsika pamwechete, kwete se $ 1 + 0.
Pasina imwezve ado, kwaziso!
Ndatenda nekutaura kwako. Izvo zvakatadza zvachose kutsanangura mashandisiro ekushandisa ekubuda, zvese mune iyo script uye mumabasa. Kana iri $ {10} Ini handina kumbobvira ndasiya zvakawanda kudaro, saka handina kumhanyira mune iro dambudziko, zvakanaka kuti uzive kuti pane mhinduro yeizvozvo (ndatobuditsa chinhu chitsva chadzidza nhasi 😀).
Ndatenda zvikuru nechinyorwa! Zvimwe zvinhu zvaunotaura zvichiri kushaya kujekeswa. Semuenzaniso, getops.
Muchikamu chekubuda kwescreen, hauna kutaura katsi iyo yauchazotaura nezvayo ...
kati <
***************************************
* FOMU INO INONYANYA KUKOSHA *
***************************************
EOF
Mumuenzaniso wako:
kati << EOF >> bvunzo.sh
Pane zvinhu zviviri zvekutaura ... >> i'append 'ndiko kuti, kana ukadzokorora iwo iwo iwo murairo, iwe unenge uine iro rese script mune zvakapetwa ... Unofanira kushandisa imwe chete ...
kati << EOF> script.sh
Ehe, inofanirawo kunzi script.sh
Ipapo mukati
kana [-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "- rubatsiro"]]; ipapo
batsira
fi
Ini ndinofunga inofanirwa kunyorwa ...
kana [[-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "- rubatsiro"]]; ipapo
...
Pane zvimwe zvakawanda zvekutsvaga kubva kuBASH.
Unogona here kuidana kuti "BASICS"? 🙂
Semuenzaniso, paramende 'testers' vakaita -z kuona kuti havana chinhu, kana -f kuona kana iripo sefaira.
Zvakare, ndinokutendai nesimba renyu.
Alberto
Yakanaka kwazvo bash script dzidziso!
-- KUSVIRA: UTF-8 --
Ino inguva yekutanga kuona iyo tambo yekumisikidza hunhu hwekunyorera mune bash script. Zvinotaridza kwandiri zvakanyanya senge Python kupfuura Bhash. Zvinonyanya kukosha here? Ndatsvaga chirevo paGoogle asi handisi kuwana chero chinhu, une chinongedzo paruoko icho chinotaura nezvenyaya iyi? Kunyanya pamusoro pekukodzera kwetambo iyoyo.
Mune mawonero angu, kunyora zvinyorwa muBhash uchishandisa UTF-8, iwe unongoda chete kuchengetedza iyo faira faira saizvozvo (pasina BOM) uye uine zvimwe zvakatipoteredza nharaunda, (LANG uye LC_ *), yakanyatsoiswa.
Zvino, zviripachena, zvinofanirwa kuti mirairo yakaurayiwa yakagadzirira encodings kunze kweASCII. Semuenzaniso, kana isu tichida kushandura kuita yepamusoro, izvi zvinoita sekunge hazvishande:
«Echo áéíóú | tr az AZ »
o:
«Echo áéíóú | tr [: pasi:] [: kumusoro:] »
uye zvirinani kushandisa:
«Echo áéíóú | awk '{anodhinda toupper ($ 0)}' ».
Nezve «encoding»Yakambotaurwa mune ino blog pamberi:
Bhash: maitiro ekugadzira script ishandiswe
Post yekuisa yekushandisa script
Mumwe munhu anondiruramisa, asi tambo yekukodha (# -- KUSVIRA: UTF-8 --) Izvo haina chekuita ne bash kana iyo Shell: iwo mutsara wekutaura (unotanga na #) uye unoshanda kuudza iyo EDITOR yatinoshandisa kunyora iyo script (vim, emacs ...) iko kunyoreswa kwefaira.
Muchokwadi, bash haione mutsetse wakadaro, nekuti iwo mutsara wekutaura.
Yakanaka dzidziso, sezvo Sysadmin ichiziva Kukanda muBhash kwakakosha, kunobatsira kune zvese.
Zvakanyanya, zvakanaka kwazvo!
Ndinokutendai!
Kana zvikave zvinobatsira kune chero munhu, heano mashandisiro akati wandei uye mienzaniso yekugadzira ako maGwaro. https://github.com/reduardo7/hsabx
Kugona chose. Zvinhu zvitsva zvekuwedzera pane zvinyorwa zvangu. Chinhu chekodhi uye chinhu cheprinta chakange chisina.
Ndatenda!!!
Sooo yakanaka chinyorwa! Ini ndinochengeta iyi yezvandinoda, zvingave zvakanaka kugadzirisa izvo zvisizvo uye kana kutowedzera nezvakawanda zvirimo. Kutenderera kwekuombera kwema info ese aya !!!!