līdz drošs mūsu jēdzieni Mēs uzzināsim 2 ļoti noderīgus programmēšanas rīkus, kas perfekti darbojas Bash. Iemācieties radīt funkcijas un definēt caurules sākumā var šķist sarežģīta, bet tad mēs redzēsim milzīgo lietderība ka viņi mūs nodrošina. |
Caurules
Konkrēti, un neveicot pārāk daudz pagriezienu, cauruļvads ir metode, kas ļauj virzīt viena procesa izvadi kā otra ievadi, kas ļauj virkni priekšrocību, piemēram, koda rindiņu samazināšanu, atbrīvošanu no atmiņas mainīgajiem lielumu iegūšanai un uzlabošanu skripta efektivitāte.
Caurule parasti tiek atpazīta ar simbolu | kas ļauj savienot izteicienus; Lai gan tas tiek izmantots pēc noklusējuma, ir arī citi veidi, kā izveidot caurules.
Piemērs: izdrukājiet jaunākos kodola ziņojumus
#dmesg ļauj jums redzēt jaunākos kodola ziņojumus un ielādētos draiverus # sistēmas palaišanas laikā; aste izdrukā faila vai #komanda pēdējās daļas
dmesg | asti
Lai gan tie var būt sarežģīti, cik mēs vēlamies, cauruļvada pamatstruktūra ļauj vienas komandas rezultātu izmantot kā ievadi nākamajai, kas var nodrošināt jaunas komandas ievadi, ja mēs turpinām pievienot secīgas caurules.
funciones
Funkcijas ir paziņojumu kopums, kas ir sagrupēts tā, lai tos varētu izpildīt vairākas reizes, tos nepārrakstot. Tas ir līdzvērtīgi domām, ka, iemācoties gatavot ēdienu, mēs uzrakstīsim tā recepti uz lapas, un katru reizi, kad vēlamies pagatavot šo ēdienu, mēs konsultējamies ar recepti, nevis pārrakstām jaunu lapu ar to pašu recepti.
Varbūt vissvarīgākais par funkcijām ir iespēja nodot parametrus, datus, kurus viņi izmantos, lai tos apstrādātu un ģenerētu izvadi. Tās struktūra ir šāda:
funkcija function-name {
procesi
}
Piemērs: funkcija, kas parāda pakalpojumus, kas darbojas TCP protokolā. Mēs varam arī redzēt, kā uzlikt vairāk cauruļu.
# Mēs definējam funkcijas nosaukumu, tas var būt tas, kas mums patīk.
funkcija services_tcp {
#cat saista un parāda mapes / etc / services saturu, kas ir #, kas satur visus pakalpojumus ar saistītajām ostām.
# the first grep ņem sarakstu un noņem komentārus, ar –v mēs apgriežam rezultātu
# otrais grep parāda tikai tos, kas saistīti ar TCP
kaķis / utt / pakalpojumi grep –v "^ #" | grep tcp
}
Kad mums ir jāizpilda šī funkcija, mums tā vienkārši jāsauc:
tcp_pakalpojumi
Šajā gadījumā tas darbojas bez parametriem; Gadījumā, ja tie ir, mums tie ir jāpievieno, lai funkcija darbotos pareizi, pretējā gadījumā funkcija nedarbosies pareizi. Izmantojot atgriešanu, funkcija funkcija var atgriezt vērtību procesa rezultātā.
Piemērs: funkcija ar ievades parametriem, kas aprēķina 2 skaitļu summu.
#! / bin / bash
funkciju summa ()
{
# ar ļaujim veikt darbību pēdiņās
ļaujiet "rezultāts = $ 1 + $ 2"
#return ļauj atgriezt vesela skaitļa vērtību. Kad atgriešana ir izpildīta, vērtība tiks noglabāta mainīgā $?
atgriezt $ rezultātu;
}
# Summa funkcija tiek izsaukta, un mēs nododam 2 ieejas parametrus.
pievienot 2 3
# izdrukā $ vērtību? ar atbalss novērtējot mainīgā faktisko vērtību pēdiņās
atbalss -e "Rezultāts = $?";
Es neesmu pārliecināts, bet funkciju atgriešanās paziņojums kalpo tikai tam, lai atgrieztu veselu skaitli no 0 līdz 255, piemēram, kļūdas kodus "exit", parasti 0, ja viss ir kārtībā, un citu numuru citiem gadījumiem. Lai gan piemērā tas darbojas, es nedomāju, ka ir laba prakse atgriezt rezultātu ar atdevi.
Tur es saku bezjēdzību huh! acs! ha!
Patiesība man lika šaubīties. Jebkurā gadījumā, lai izvairītos no problēmām ar funkcijām, atgriešanos varam aizstāt ar atbalss gadījumā, ja funkcija cenšas atgriezt vai izdrukāt vērtību vai virkni.
Tiesa, lai to atrisinātu, varat izmantot komandu bc, summas funkcijā varat izmantot: result = `echo $ 1 + $ 2 | bc -ql`
labi,
Es vēlētos uzzināt, kur es varu saglabāt bash failus, lai tie darbotos visā sistēmā, un tas nav atkritumu tvertnes direktorijs, bet varētu būt dublēšanas vieta.
Paldies un pateicos.
Liels paldies, es sāku ar scenārijiem, un patiesība ir tāda, ka tas ir ļoti noderīgi, jūs ļoti laipni dalāties savās zināšanās!
Sveicieni
Paldies! Apskāviens!
Pablo
Sintakses kļūda: "(" negaidīts
Mēģinot palaist piemēru, tiek parādīta kļūda, es to nokopēju tieši tāpat
Kas var būt? es esmu ubuntu 14.10