Script

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea altor semnificații, consultați Script (dezambiguizare) .

Termenul script , în informatică , desemnează un anumit tip de program , scris într-o anumită clasă de limbaje de programare , numite limbaje de scriptare . O clasă specifică a acestor programe sunt așa-numitele scripturi shell , adică scripturile concepute pentru a fi executate într-un shell al unui sistem de operare

Descriere

Distincția dintre un program normal și un script nu este clară, dar în general următoarele caracteristici pot fi identificate în scripturi:

  • complexitate relativ scăzută;
  • utilizarea unui limbaj interpretat ;
  • integrarea într-un proces automat de configurare a sistemului (de exemplu, la fiecare început sau la fiecare conectare a unui anumit utilizator), într-o pagină web (de obicei folosind limbajul JavaScript ) sau, în orice caz, pentru a efectua sarcini auxiliare și foarte specifice;
  • o anumită liniaritate (un script poate accepta, de asemenea, intrări de la utilizator, dar de obicei intrări diferite nu modifică substanțial structura diagramei bloc care descrie comportamentul scriptului);
  • lipsa unei interfețe grafice proprii;
  • reamintește alte programe pentru a efectua operațiuni mai sofisticate.

Script Shell

Scriptul shell identifică un script pentru un shell textual al unui sistem de operare , adică interfața liniei de comandă , al cărei limbaj este considerat un limbaj de programare simplu pentru un anumit domeniu. Un astfel de script efectuează de obicei sarcini legate de administrarea sistemului , cum ar fi manipularea fișierelor (de exemplu, redenumirea, copierea sau mutarea), executarea altor programe, tipărirea și manipularea textului. Avantajul principal și cel mai larg exploatat în comparație cu interacțiunea directă cu shell-ul prin tastarea unei comenzi după alta, este automatizarea, adică posibilitatea de a defini, o dată pentru totdeauna prin intermediul scriptului, o serie de operațiuni deosebit de similare sau care pot fi caracterizate în un mod sofisticat. În acest fel, scrierea unui scenariu îl eliberează pe autor, în ordine, de plictiseala repetării sau de nevoia de a-și aminti anumite detalii, lăsându-i sarcina simplă a executării acestuia.

Deși mulți interpreți de limbaj shell au interfețe de linie de comandă, cum ar fi diverse shell-uri de sistem de tip Unix (de exemplu, Bash , C shell , Zsh , Debian Almquist ) sau shell-uri Windows ( PowerShell , cmd. Exe sau command.com ), alte câteva limbi, cum ar fi AppleScript sau Windows Script Host (WScript.exe), nu le au. Alte exemple notabile de limbaje shell destinate în principal scrierii de scripturi sunt Digital Command Language ( DCL ) al sistemelor DEC sau Job Control Language ( JCL ) al sistemelor IBM .

Avantaje și dezavantaje

Adesea, scrierea unui script shell este mult mai rapidă decât scrierea unui cod echivalent în alte limbaje de programare. Numeroasele avantaje includ selectarea ușoară a programelor sau fișierelor, pornirea rapidă și depanarea interactivă. Un script shell poate fi folosit pentru a furniza o secvență și o legătură cu luarea deciziilor în jurul programelor existente, iar pentru scripturile moderat de mari absența unui pas de compilare este un avantaj. Executarea interpretativă facilitează scrierea codului de depanare într-un script și, de asemenea, relansarea prin detectarea și remedierea erorilor. Utilizatorii fără experiență pot utiliza scripturi pentru a personaliza comportamentul programului, iar scripturile shell oferă câteva posibilități limitate de procesare multiplă .

Pe de altă parte, scripturile shell sunt predispuse la erori costisitoare. Tipurile neintenționate cum ar fi rm -rf * / (în loc de rm -rf */ așteptat) sunt folclor în comunitatea Unix, un singur spațiu suplimentar convertește comanda dintr-unul care șterge toate subdirectoarele într-unul care șterge toate și, de asemenea, caută să ștergeți întreaga partiție rădăcină . Probleme similare pot transforma cp și mv în arme periculoase, iar abuzul de > poate șterge conținutul unui fișier. Acest lucru este făcut mai problematic de faptul că multe comenzi Unix diferă ca nume printr-o singură literă: cp , cn , cd .

Un alt dezavantaj semnificativ este viteza de execuție lentă și necesitatea de a începe un nou proces pentru aproape toate comenzile shell executate. Atunci când scriptul este o sarcină, acesta poate fi realizat prin crearea unei conducte în care un filtru de comandă eficient face cea mai mare parte a muncii, atenuând încetinirea; dar un script complex este, de obicei, cu câteva ordine de mărime mai lent decât un program convențional compilat care face o operație echivalentă. Există, de asemenea, probleme de compatibilitate între diferite platforme. Larry Wall , creatorul Perl , a scris că „ Este mai ușor să portezi un shell decât un script shell ”.

La fel, scripturi mai complexe pot fi executate în limitele limbajului de scriptare shell; Aceste limitări îngreunează scrierea codului de calitate datorită extensiilor diferitelor cochilii. De fapt, dacă v-ați gândit să rezolvați problemele shell cu limbajul original shell, ați putea crea probleme mai neașteptate.

Multe dezavantaje ale utilizării unor limbaje de scriptare sunt cauzate de defecte de proiectare în limbajul sau sintaxa de implementare și nu sunt neapărat impuse prin utilizarea unei linii de comandă text de bază, există o serie de shell-uri care utilizează alte limbaje de programare shell sau chiar limbaje reale de tip Scsh (care utilizează Scheme ).

Funcționalitate

Comenzi rapide

În cea mai simplă formă, un script shell poate oferi o variantă convenabilă a unei comenzi de sistem în care setările de mediu specifice, opțiunile de comandă sau opțiunile de post-procesare sunt aplicate automat, dar într-un mod care permite noului script să acționeze în continuare ca un normal Comanda Unix.

Un exemplu ar fi crearea unei noi versiuni a lui ls , comanda pentru listarea fișierelor (oferindu-i un nume de comandă mai scurt decât l ), care sunt salvate în mod normal în directorul bin al unui utilizator, cum ar fi: / home / nomeutente / bin / l și un set pre-furnizat și implicit de opțiuni de comandă.

 #! / bin / sh
   LC_COLLATE = C ls -FCas " $ @ "

Aici, prima linie (Shebang) indică care interpret ar trebui să fie folosit pentru a executa restul scriptului, a doua linie face o listă cu opțiunile pentru indicatori de format de fișier, coloane, toate fișierele (niciunul omis) și dimensiunea în blocuri. LC_COLLATE=C implicit pentru majuscule și minuscule ordinea de colaționare, și "$@" care face ca orice parametru dat la l fie trecut ca parametri ls, astfel încât toate opțiunile normale și sintaxa cunoscută a ls pot fi încă utilizate.

Prin urmare, utilizatorul trebuie să poată utiliza pur și simplu l pentru listele scurte utilizate în mod obișnuit.

Locuri de muncă în serie

Scripturile Shell permit ca numeroase comenzi care trebuie introduse manual într-o interfață de linie de comandă să fie executate automat și fără ca utilizatorul să aștepte pentru a activa fiecare pas al secvenței. De exemplu, într-un director cu trei fișiere de cod sursă C, în loc să executați manual cele patru comenzi necesare pentru a construi programul final, puteți crea în schimb un script shell C , numit construit și stocat în director împreună cu acesta din urmă, care le compilează automat:

 #! / bin / csh
compilarea ecoului ...
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o 
ecou făcut .

Scriptul ar trebui să permită unui utilizator să salveze fișierul în curs de editare, să întrerupă editorul, să îl ruleze prin comandă . / build pentru a crea programul actualizat, testați-l, apoi reveniți la editor. Cu toate acestea, din 1980, astfel de scripturi au fost înlocuite cu utilități precum make , care sunt specializate pentru programele „build”. Când tastăm o comandă (pe care o vom numi job pentru a o deosebi de procese) și apăsăm tasta „enter”, aceasta este executată, dar, deoarece am condus intrarea și ieșirea, putem controla și execuția acesteia. Unele comenzi sunt complexe și dacă rulați ar împiedica utilizarea shell-ului până la finalizare. Apoi puteți porni comanda în fundal și puteți reda shell-ul pentru alte utilizări; puteți apela comanda în prim-plan sau o puteți suspenda sau anula. Pentru a executa comanda în fundal, pur și simplu introduceți caracterul „&” la sfârșitul comenzii. Dacă am dori să imprimăm fișierul prova.txt în fundal ar fi suficient să dăm comanda lpr prova.txt &. Sistemul de operare atribuie un număr unic jobului și îl pornește marcându-l cu semnul „+” (job activ).

Dacă începem o nouă comandă, i se va atribui următorul număr și se va marca cu semnul „-” (în așteptarea executării). Pentru a vedea care și câte lucrări rulează, emiteți comanda joburi, obținând rezultatul relativ. Apoi, puteți permite comenzii să revină în prim-plan folosind comanda fg urmată de caracterul „%” și numărul lucrării. De exemplu, dacă ați dori să introduceți a doua comandă în prim-plan, ați tasta fg% 2. Comanda nu va putea reveni la fundal până când nu va fi terminată. Cu toate acestea, este posibil să se ocolească această limitare prin suspendarea lucrării cu combinația de taste „CTRL Z” și repornirea acesteia cu fg sau bg. O comandă terminată nu va notifica utilizatorul cu privire la încetarea activității sale, cu excepția cazului în care este indicat în mod explicit prin notificarea% 1 (în acest caz avertizează cu privire la terminarea primei comenzi). În cele din urmă, este posibil să încheiem forțat comanda dacă, de exemplu, intră într-o buclă infinită. Linux furnizează comanda kill urmată de numărul care identifică jobul (de ex.% 1).

Generalizare

Procesele batch simple nu sunt neobișnuite pentru sarcini izolate, dar utilizarea buclelor shell, testelor și variabilelor oferă utilizatorilor mult mai multă flexibilitate. Un bash (script shell Bourne-Again) convertește imaginile JPEG în PNG , oferind numele imaginilor pe linia de comandă - posibil prin caractere wildcard - în loc să fie listate în script, unde puteți crea acest fișier, de obicei salvat ca /home / nomeutente /bin/jpg2png

 #! / bin / bash
pentru jpg în  $ @  ; # face utilizarea $ jpg în loc de fiecare nume de fișier dat, la rândul său ,
    png = " $ { jpg % .jpg } .png" # găsiți versiunea PNG a numelui de fișier înlocuind .jpg cu .png
    echo convertind  $ jpg  ... # informații despre starea de ieșire către utilizatorul care execută scriptul
    dacă convertiți  $ jpg  jpg.to.png ; apoi # utilizați programul convert (comun în Linux) pentru a crea PNG într-un fișier temp
        mv jpg.to.png " $ png " # dacă a funcționat, redenumiți imaginea PNG temporară cu numele corect
    altfel # ... în caz contrar, plângeți-vă și ieșiți din script
        Eroare echo ': ieșire eșuată salvată în „jpg.to.png”.' 1 > & 2
        ieșirea 1
    fi # sfârșitul construcției de test „if”
făcut # sfârșitul buclei „pentru”
ecou toate conversiile reușite # spuneți utilizatorului veștile bune

Comanda jpg2png poate fi apoi executată pe un întreg director plin de imagini JPEG cu doar jpg2png *.jpg

Verosimilitate

O caracteristică cheie a scripturilor shell este că invocarea interpretilor lor este tratată ca o caracteristică de bază a sistemului de operare. Astfel, shell-ul utilizatorului, mai degrabă decât să poată executa doar scripturi de limbaj shell, sau un script care are doar directiva interpret interpretat corect dacă a fost rulat dintr-un shell, (ambele fiind limitări în primii ani ai scriptului shell script Bourne-Again ), scriptul shell este inițializat și executat chiar de sistemul de operare. Un script shell modern nu poate fi plasat la același nivel cu comenzile de sistem, dar multe comenzi de sistem sunt de fapt scripturi shell (sau mai general, scripturi, deoarece unele dintre ele nu sunt interpretate de un shell. : Perl , Python sau alte limbi). Acest lucru se aplică și codurilor de ieșire returnate, cum ar fi alte utilități de sistem, pentru a indica succesul sau eșecul, permițându-le astfel să fie identificate ca componente ale programelor mari, indiferent de modul în care sunt implementate aceste instrumente mai mari.

La fel ca comenzile de sistem standard, scripturile shell omit în mod clasic orice tip de extensie de fișier, cu excepția cazului în care sunt destinate citirii într-un shell care rulează printr-un mecanism special dedicat acestui scop (de exemplu: sh "." Sau source csh ) .

Programare

Multe shell-uri moderne oferă, de asemenea, diverse funcții disponibile în mod normal numai în utilizarea unor limbaje de programare generale mai sofisticate, cum ar fi controlul fluxului de construcții, variabile, comentarii, tablouri, subrutine și așa mai departe. Cu aceste tipuri de funcții disponibile, este posibil să scrieți aplicații destul de sofisticate, cum ar fi scripturile shell. Cu toate acestea, acestea sunt încă limitate de faptul că majoritatea limbajelor de tip shell au un suport redus sau deloc pentru tastarea datelor de sistem, clase, threading, matematică complexă și alte funcționalități complete ale limbajului comun și, în general, sunt mai lente. sau limbi interpretate scrise cu viteză ca obiectiv de performanță.

Alte limbaje de programare

Multe limbaje de scriptare puternice au fost introduse pentru sarcini care sunt prea mari sau complexe pentru a putea fi tratate convenabil cu script-uri shell obișnuite, dar pentru care beneficiile unui script sunt de dorit și dezvoltarea reală, generând limbajul de programare. dezavantajos. Specificul a ceea ce separă limbajele de scriptare de limbajele de programare la nivel înalt este o sursă frecventă de dezbateri. Dar, în general, un limbaj de scriptare este unul care necesită un interpret

Poate părea că se confruntă cu o afirmație speculativă, deoarece există adesea multe motive citate: „Cu toate acestea, centrul de scripturi de întreținere a sistemului, care alternativ ar putea fi scris într-o limbă, continuă să fie scris ca un script pentru sistem. Shell, întrucât nu este întotdeauna posibil să ne bazăm pe prezența motoarelor de limbaj scripting relevante.

Cu un limbaj de scriptare puteți:

  • lipiți codurile existente împreună
  • procesează fișiere text foarte mari
  • manipulați fișiere și directoare
  • profitați de operatori specializați la nivel înalt
  • creați aplicații mici cu un ciclu de dezvoltare scurt
  • creați aplicații cu o interfață grafică integrată
  • au portabilitate pe platformele Unix, Windows și Macintosh
  • au un cod interpretat (fără compilare / legare)

Exemple de limbaje de scriptare:

Ciclu de viață

Scripturile Shell servesc adesea ca o etapă timpurie în dezvoltarea software-ului și sunt adesea supuse conversiei după o implementare diferită de bază, cel mai frecvent convertită în Perl , Python sau C. Directiva de interpretare permite ca implementarea detaliată să fie complet ascunsă în script, în loc să fie expusă ca extensie de fișier și oferă reimplementare fără probleme în mai multe limbi, fără niciun impact asupra utilizatorilor finali.

Elemente conexe

Alte proiecte

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT