Ghidul începătorului pentru Scripting Shell Elementele de bază
Termenul "scripting shell" este menționat de multe ori în forumurile Linux, dar mulți utilizatori nu sunt familiarizați cu acesta. Învățând această metodă de programare ușoară și puternică vă poate ajuta să economisiți timp, să învățați mai bine linia de comandă și să eliminați sarcini plictisitoare de gestionare a fișierelor.
Ce este Shell Scripting?
Fiind un utilizator Linux înseamnă să jucați cu linia de comandă. Îmi place sau nu, sunt doar câteva lucruri care se fac mult mai ușor prin această interfață decât prin îndreptare și clic. Cu cat folositi mai mult si invatati linia de comanda, cu atat veti vedea potentialul. Linia de comandă însăși este un program: shell-ul. Majoritatea distribuțiilor Linux folosesc astăzi Bash, și la asta intri cu adevărat comenzile.
Acum, unii dintre voi care ați folosit Windows înainte de a utiliza Linux pot aminti fișierele batch. Acestea erau fișiere de text minuțioase pe care le puteai umple cu comenzi pentru a le executa și Windows le rula la rândul lor. A fost o modalitate inteligentă și elegantă de a face niște lucruri, cum ar fi alergarea în laboratorul de liceu atunci când nu puteați deschide dosare de sistem sau creați comenzi rapide. Fișierele batch din Windows, în timp ce sunt utile, sunt o imitație ieftină a scripturilor shell.
Shell script-urile ne permit să programați comenzi în lanțuri și să le execute sistemul ca un eveniment scripted, la fel ca fișierele batch. Ele permit, de asemenea, funcții mult mai utile, cum ar fi înlocuirea comenzilor. Puteți invoca o comandă, cum ar fi data, și utilizați ieșirea ca parte a unei scheme de denumire a fișierelor. Puteți automatiza backup-urile și fiecare fișier copiat poate avea data curentă atașată la sfârșitul numelui. Scripturile nu sunt doar invocări ale comenzilor. Sunt programe în sine. Scripting-ul vă permite să utilizați funcții de programare - cum ar fi buclele "for", if / then / else și așa mai departe - direct în interfața sistemului de operare. Și nu trebuie să învățați altă limbă pentru că folosiți ceea ce deja știți: linia de comandă.
Aceasta este cu adevărat puterea de scripting, cred. Puteți să programați cu comenzi pe care le cunoașteți deja, în timp ce învățați capsele celor mai importante limbi de programare. Trebuie să faci ceva repetitiv și plictisitor? Script-l! Aveți nevoie de o comandă rapidă pentru o comandă într-adevăr convoluționată? Script-l! Doriți să construiți o interfață de linie de comandă cu adevărat ușor de folosit pentru ceva? Scriefli-o!
Înainte de a începe
Înainte de a începe seriile de scripting, să acoperim câteva informații de bază. Vom folosi shell-ul bash, pe care majoritatea distribuțiilor Linux le utilizează nativ. Bash este disponibil pentru utilizatorii de Mac OS și Cygwin și pentru Windows. Deoarece este atât de universal, ar trebui să puteți să scriu script, indiferent de platforma dvs. În plus, atâta timp cât toate comenzile care sunt menționate, scripturile pot funcționa pe mai multe platforme cu puțin sau deloc.
Scripting-ul poate folosi cu ușurință privilegiile "administrator" sau "superuser", deci este mai bine să testați scripturi înainte de a le pune la lucru. Utilizați, de asemenea, bunul simț, cum ar fi să vă asigurați că aveți copii de siguranță ale fișierelor pe care urmează să le rulați un script. De asemenea, este foarte important să utilizați opțiunile potrivite, cum ar fi -i pentru comanda rm, astfel încât interacțiunea dvs. să fie necesară. Acest lucru poate preveni unele greșeli urâte. Ca atare, citiți scripturile pe care le descărcați și fiți atenți cu datele pe care le aveți, doar în cazul în care lucrurile merg prost.
La baza lor, scripturile sunt doar fișiere cu text simplu. Puteți folosi orice editor de text pentru a le scrie: gedit, emacs, vim, nano ... Această listă continuă. Doar asigurați-vă că ați salvat-o ca text simplu, nu ca un text bogat sau un document Word. Deoarece iubesc ușurința de utilizare pe care nano o oferă, o să folosesc asta.
Permisiuni și nume de script
Scripturile sunt executate ca programe, iar pentru ca acest lucru să se întâmple, ei trebuie să aibă permisiunile corespunzătoare. Puteți face scripturile executabile executând următoarea comandă pe ea:
chmod + x ~ / somecrazyfolder / script1
Acest lucru va permite oricui să ruleze acel script special. Dacă doriți să restricționați folosirea acestuia numai de către utilizatorul dvs., puteți utiliza în schimb:
chmod u + x ~ / somecrazyfolder / script1
Pentru a rula acest script, va trebui să cd în directorul corespunzător și apoi să rulați scriptul astfel:
cd ~ / somecrazyfolder
./ script1
Pentru a face lucrurile mai convenabile, puteți plasa scripturile într-un director "bin" din directorul dvs. de acasă:
~ / Bin
În multe distribuții moderne, acest dosar nu mai este creat în mod implicit, dar îl puteți crea. Acest lucru este de obicei în cazul în care fișierele executabile sunt stocate care aparțin utilizatorului și nu altor utilizatori. Prin plasarea de script-uri aici, puteți să le rulați doar tastând numele lor, la fel ca și alte comenzi, în loc să trebuiască să cd în jur și să folosiți prefixul "./".
Înainte de a numi un script, totuși, trebuie să faceți următoarea comandă pentru a verifica dacă aveți instalat un program care utilizează acest nume:
care [comandă]
O mulțime de oameni numesc scripturile lor timpurii "test", iar când încearcă să o execute în linia de comandă, nu se întâmplă nimic. Acest lucru se datorează faptului că este în conflict cu comanda de test, care nu face nimic fără argumente. Asigurați-vă întotdeauna că numele dvs. de script nu intră în conflict cu comenzile, altfel s-ar putea să găsiți că faceți lucruri pe care nu intenționați să le faceți!
Instrucțiuni pentru scripturi
După cum am menționat anterior, fiecare fișier de script este în esență un text simplu. Asta nu inseamna ca poti scrie ceea ce doresti cu toata sanatatea. Atunci când un fișier text este încercat să fie executat, shell-urile vor analiza prin ele indicii dacă sunt scripturi sau nu și cum să se ocupe de totul în mod corespunzător. Din acest motiv, există câteva recomandări pe care trebuie să le cunoașteți.
- Fiecare scenariu ar trebui să fie cu "#! / Bin / bash"
- Fiecare linie nouă este o comandă nouă
- Liniile de comentariu încep cu o imagine #
- Comenzile sunt înconjurate de ()
Hash-Bang Hack
Când o corespondență trece printr-un fișier text, cea mai directă modalitate de a identifica fișierul ca script este făcând prima linie:
#! / Bin / bash
Dacă folosiți o altă coajă, înlocuiți-o aici. Liniile de comentariu încep cu hashes (#), dar adăugând bang (!) Și calea shell după ce este un fel de hack care va ocoli această regulă de comentariu și va forța scriptul să se execute cu shell-ul pe care această linie indică.
Noua linie = Noua comandă
Fiecare linie nouă trebuie considerată o comandă nouă sau o componentă a unui sistem mai mare. Dacă instrucțiunile / / else / else, de exemplu, vor prelua mai multe linii, dar fiecare componentă a acelui sistem se află într-o linie nouă. Nu lăsa o comandă sângerând în linia următoare, deoarece aceasta poate trunchia comanda anterioară și vă poate da o eroare la următoarea linie. Dacă editorul dvs. de text face acest lucru, ar trebui să dezactivați împachetarea textului pentru a fi în siguranță. Puteți dezactiva înfășurarea textului în nano-biți prin apăsarea tastelor ALT + L.
Comentariu Deseori cu #s
Dacă porniți o linie cu #, linia este ignorată. Aceasta o transformă într-o linie de comentarii, în care vă puteți aminti de ceea ce a fost rezultatul comenzii anterioare sau de ceea ce va face următoarea comandă. Din nou, dezactivați împachetarea textului sau rupeți comentariul în mai multe linii care încep cu un hash. Utilizarea unui număr mare de comentarii este o practică bună de păstrat, deoarece vă permite altor persoane să vă ajusteze scripturile mai ușor. Singura excepție este hack-ul Hash-Bang menționat mai sus, deci nu urmați #s cu! S. ;-)
Comenzile sunt înconjurate de paranteze
În zilele mai în vârstă, substituțiile de comandă au fost făcute cu semne distincte ("împarte tasta ~). Nu vom mai atinge încă acest lucru, dar, în timp ce majoritatea oamenilor se duc și explorează după ce au învățat elementele de bază, este probabil o idee bună să menționezi că ar trebui să folosești paranteze. Acest lucru se datorează în principal faptului că atunci când cuibăreți - puneți comenzi în alte comenzi - parantezele funcționează mai bine.
Primul tău script
Să începem cu un script simplu care vă permite să copiați fișierele și să adăugați date la sfârșitul numelui fișierului. Să o numim "datecp". În primul rând, hai să verificăm dacă acest nume este în conflict cu ceva:
Puteți vedea că nu există nici o ieșire a comenzii respective, așa că toți suntem pregătiți să folosim acest nume.
Să creăm un fișier gol în folderul ~ / bin:
atingeți ~ / bin / datecp
Și să schimbăm permisiunea acum, înainte să uităm:
Să începem apoi să ne construim scenariul. Deschideți acel fișier în editorul de text de alegere. După cum am spus, îmi place simplitatea nano-ului.
nano ~ / bin / datecp
Și, să mergem mai departe și să punem în primă condiție cerința, și un comentariu despre ceea ce face acest script.
Apoi, să declarăm o variabilă. Dacă ați luat vreodată algebră, probabil că știți ce înseamnă asta. O variabilă ne permite să stocăm informații și să facem lucruri cu ele. Variabilele se pot "extinde" când sunt menționate în altă parte. Adică, în loc să își afișeze numele, vor afișa conținutul stocat. Mai târziu, puteți spune aceeași variabilă pentru a stoca diferite informații și orice instrucțiune care apare după aceea va folosi noile informații. Este un înlocuitor foarte interesant.
Ce vom introduce în variabilă? Ei bine, să stocăm data și ora! Pentru a face acest lucru, vom apela comanda de date.
Uitați-vă la captura de ecran de mai jos pentru a construi ieșirea comenzii de date:
Puteți vedea că adăugând variabile diferite care încep cu%, puteți schimba rezultatul comenzii la ceea ce doriți. Pentru mai multe informații, puteți consulta pagina manuală a comenzii pentru dată.
Să folosim ultima iterație a comenzii date, "date +% m_% d_% y-% H.% M.% S" și să folosim asta în scriptul nostru.
Dacă ar fi trebuit să salvăm acest scenariu chiar acum, l-am putea executa și ne-ar fi dat rezultatul comenzii de date așa cum ne-am fi așteptat:
Dar, să facem ceva diferit. Să dăm un nume de variabilă, ca date_formatted la această comandă. Sintaxa corectă pentru aceasta este după cum urmează:
variabila = $ (argumente de comandă-opțiuni)
Și pentru noi, vom construi așa:
date_formatted = $ (data +% m_% d_% y-% H.% M.% S)
Aceasta este ceea ce numim înlocuire de comandă. În mod esențial, spunem că fiecare dată când se afișează variabila "date_formatted", se rulează comanda în interiorul parantezelor. Apoi, indiferent de ieșirea pe care o dau comenzile, ar trebui afișată în loc de numele variabilei, "date_formatted".
Iată un exemplu de script și rezultatele sale:
Rețineți că există două spații în ieșire. Spațiul din cadrul cotelor comenzii ecou și spațiul din fața variabilei sunt afișate ambele. Nu utilizați spații dacă nu doriți ca acestea să apară. De asemenea, rețineți că fără această linie de "ecou" adăugată, scenariul nu va da absolut nici un rezultat.
Să ne întoarcem la scenariul nostru. Să adăugăm în continuare partea de copiere a comenzii.
cp -iv $ 1 $ 2. $ date_formatted
Aceasta va invoca comanda de copiere, cu opțiunile -i și -v. Primul vă va cere verificarea înainte de a suprascrie un fișier, iar acesta din urmă va afișa ceea ce se află în jos pe linia de comandă.
Apoi, puteți vedea că am adăugat opțiunea "$ 1". Atunci când scripturile, un semn de dolar ($) urmat de un număr va denota acel argument numerotat al scriptului când a fost invocat. De exemplu, în următoarea comandă:
cp -iv Trogdor2.mp3 ringtone.mp3
Primul argument este "Trogdor2.mp3" iar al doilea argument este "ringtone.mp3".
Privind înapoi la scenariul nostru, putem vedea că menționăm două argumente:
Aceasta înseamnă că atunci când rulați scriptul, va trebui să furnizăm două argumente pentru ca scriptul să funcționeze corect. Primul argument, $ 1, este fișierul care va fi copiat și înlocuit ca prima argumentare a comenzii "cp -iv".
Al doilea argument, $ 2, va acționa ca fișier de ieșire pentru aceeași comandă. Dar, puteți vedea, de asemenea, că este diferit. Am adăugat o perioadă și am făcut referire la variabila "date_formatted" de mai sus. Curios despre ceea ce face?
Iată ce se întâmplă atunci când scriptul este rulat:
Puteți vedea că fișierul de ieșire este listat ca orice am introdus pentru $ 2, urmat de o perioadă, apoi ieșirea comenzii date! Are sens, corect?
Acum, când rulez comanda datecp, acesta va rula acest script și îmi permite să copiez orice fișier într-o locație nouă și să adaug automat data și ora la sfârșitul numelui fișierului. Utile pentru arhivarea lucrurilor!
Shell scripting-ul este inima de a face sistemul dvs. de operare pentru tine. Nu trebuie să înveți un nou limbaj de programare pentru a face acest lucru. Încercați să scriptați câteva comenzi de bază la domiciliu și începeți să vă gândiți la ceea ce puteți folosi pentru asta.
Scrii? Aveți vreun sfat pentru începători? Împărtășiți-vă gândurile în comentariile! Mai multe vor veni în această serie!