Reddit – linux – Deci, care este cel mai bun mod de a învăța bash?

Modul în care am învățat orice limbaj nu este să mă așez și să citesc o carte despre el doar pentru a-l învăța, ci să am un scop în minte:

Vreau să automatizez X.

Apoi încep să gândesc problema și apoi folosesc internetul pentru a găsi sintaxa care să mă ducă de la A la B.

De exemplu, acum câțiva ani am vrut să urmăresc durata de funcționare a sistemului meu, când tocmai mă mutasem de la Windows care trebuia repornit la fiecare 48 de ore și, de asemenea, pentru că eram un mare tocilar. Îmi batjocoream un prieten online cu asta, așa că am vrut să actualizez uptime-ul sistemului meu de aici, de acasă, pe o pagină web care era găzduită afară pe Internet, pe un server din alt stat.

Cum să fac asta?

Bine, în primul rând, cum încep să fac un script care să ruleze cu adevărat.

#!/bin/bash <- Oh, specifies the script interpreter. LEARNED.

Hm, tot nu va rula…

# chmod +x <- Oh, needs execute bit set. LEARNED.

Acum, cum să iau uptime-ul? Ei bine, aș putea să desfac comanda uptime, dar una dintre caracteristicile pe care le doream era să urmăresc „record uptime”. Comanda uptime de la Linux afișează timpii de funcționare într-o formă lizibilă pentru oameni:

13:23:54 up 32 days, 4:19

Bine, este puțin cam greu de analizat ca fiind mai mare sau mai mic decât. Se poate face, dar trebuie să existe o modalitate mai simplă. Mă întreb de unde extrage programul „uptime” aceste date? O mică căutare pe Google mă introduce în sistemul /proc:

/proc/uptime

Cum pot citi asta? Există câteva modalități. Calea pe care am folosit-o din obișnuință (și probabil că este calea greșită, deoarece comanda cat nu este cu adevărat menită pentru acest lucru este:)

cat /proc/uptime

Ceea ce returnează:

2780345.41 5546896.19

OK, acum avem niște zecimale drăguțe care fac mai ușor să ne dăm seama dacă este un uptime record. Dar cum apuc asta într-o variabilă? Am mai citit ceva online despre ghilimele:

UPTIME=`cat /proc/uptime`

Fain, acum îl am într-o variabilă. Notă mentală, puteți citi tot felul de lucruri interesante în variabile în acest fel. Trebuie să țin minte asta în viitor. ÎNVĂȚAT. De asemenea, ce-i cu chestia aia cu /proc? Ooh, tot felul de lucruri bune acolo, cum ar fi:

cat /proc/cpuinfo

OK, deci acum am acest număr zecimal mare. Cum îl convertesc în zile, astfel încât să am timpii de funcționare de genul „23,8 zile”? De asemenea, cat /proc/cpuinfo returnează două numere. Pe care îl vreau? Și cum îl despart astfel încât să am doar acel număr? Am citit un pic mai mult. Există câteva modalități de a despărți un șir, dar primul lucru pe care l-am întâlnit este comanda cut. Cum o pot folosi cu un șir? Am citit un articol despre pipeing și redirecționare. Văd că cele două numere sunt separate de un spațiu ca delimitator, astfel:

NUMBERIWANT=`echo ${uptime} | cut -d " " -f 1`

Cool. Trebuie să țin minte asta. Pot face lucruri interesante cu această țeavă. Îndosariez asta mental, împreună cu comanda cut, care va fi unul dintre cele mai utile instrumente de linie de comandă pe care le-am întâlnit.

Acum, cum să transform asta în zile…hm, dezamăgitor, bash are un suport matematic de rahat. Hm, articolul ăsta vorbește despre bc. Un pic de experimentare și:

uptime=`echo "scale=2; $uptime/86400" | bc`

Deci bc este programul folosit pentru a face calcule. Va trebui să țin minte asta. Am învățat despre ghilimele și pipe în pașii anteriori, așa că era evident cum să folosesc asta aici.

Acum cum fac să trimit acest ecou într-un fișier text pe care îl pot folosi ca un include PHP pe site (PHP a învățat cam în același mod)?

Ah, redirecționare!

echo $uptime > ./uptime.txt

Și așa mai departe. Dacă mă uit la vechile mele scripturi (inclusiv acesta), codificarea este ineficientă și nu neapărat cum aș face-o acum. Dar, pe măsură ce urmez acest proces de-a lungul anilor, abilitățile și setul meu de cunoștințe se îmbunătățesc și, vopsindu-mă în colțuri prin practici greșite, învăț cum să nu fac lucrurile. Metodologiile mele se îmbunătățesc astfel încât scripturile sunt mai ușor de întreținut – nu stând într-o sală de clasă sau citind o carte, ci înșurubându-mă pe mine însumi și învățând din asta.

NOTA: Nu sunt un dezvoltator profesionist. Scriu scripturi în principal pentru scopurile mele (de amator). Știu că persoanele cu pregătire în domeniul informaticii pot avea obiecții față de această metodă de învățare, dar până acum a funcționat bine pentru mine. Și este foarte amuzant pentru că, mai degrabă decât să fie doar un fel de exercițiu obișnuit de citire și memorare, obțin ceva „din el” pe măsură ce avansez – scripturi utile.

Apropo – marcați acest lucru dacă nu l-ați făcut. Este fantastic:

Advanced Bash Scripting Guide — cea mai mare parte din ceea ce știu despre bash a venit de aici.

Lasă un răspuns

Adresa ta de email nu va fi publicată.