Shell de comandă. Interpret standard de comandă. Ce să faci când ceva nu este clar

=====================================================

LUCRARE DE LABORATOR Nr. 1 (timp de finalizare - 3 ore)

Subiect: „Introducere încoajă

1. Introducere în shell

Shell este un interpret de comenzi (procesor de comandă) care acționează ca o interfață între utilizator și nucleul Unix. Solaris oferă trei procesoare principale de comandă:

    Shell-ul Bourne implicit este /sbin/sh

    Procesor de comandă C -- /bin/csh

    Shell Korn-- ./bin/ksh

Pe lângă cele enumerate, Solaris oferă shell-uri suplimentare:

    J shell -- /sbin/jsh

    Korn restricționat l -- / usr/ bin/rsh

    T-shell -- /usr/bin/tcsh

    GNU Bourne Again -- /usr/bin/bash

    Z-shell – usr/bin/zsh

Alegere procesor de comenzi este o chestiune de preferință personală.

2. Rulați comenzi

Orice comandă în Unix constă din numele programului care urmează să fie lansat (comandă), opțiuni (chei) și argumente transmise programului. Linia de comandă este delimitată de spații sau file.

Exemplu

$ /bin/ping –t 10 192.168.2.13

argument

invitație shell

Dacă, la pornirea unui program, calea către fișierul executabil nu este specificată, atunci sistemul de operare scanează secvenţial directoarele specificate în variabila PATH. Dacă există un program cu același nume în directorul care este vizualizat, atunci acesta este lansat pentru execuție. Directorul de lucru curent nu este căutat pentru programe decât dacă este specificat în variabila PATH.

! Din motive de securitate, este recomandat ca administratorul să nu adauge directorul curent și directoarele personale (personale) ale utilizatorului la variabila PATH.

Exemple

Rulați un program care specifică calea completă

$ / usr/ local/ cos/ Ale mele_ program

Rularea unui program dintr-un director superior (părinte).

$ ../ local/ cos/ Ale mele_ program

Rularea unui program din directorul curent

$ ./ Ale mele_ program

3. Simboluri specialeîn coajă

Unele caractere shell au o semnificație specială.

3.1. Șabloane de generare a numelor de fișiere

? (semnul întrebării) se potrivește cu orice caracter, cu excepția primului punct;

(paranteza patrata) definiți un grup de simboluri (se selectează un simbol din grup);

- (semnul minus") definește intervalul de caractere valide;

! (Semn de exclamare) respinge următorul grup de caractere;

* (simbol cu ​​asterisc) se potrivește cu orice număr de caractere, cu excepția primului punct.

3.2. Simboluri de redirecționare I/O

< - redirecționare intrare;

>, >> - redirecţionarea ieşirii;

2>, 2>> - redirecționarea mesajelor de eroare;

| - transportor.

3.3. Caractere de substituție

$name_variableq - substituție variabilă;

$(comandă) sau `echipă` -înlocuirea comenzii;

~ - substituție tilde.

4. Căutați

Pentru a căuta rapid fișiere și directoare, utilizați comanda whereis; pentru o căutare mai profundă, utilizați comanda find (căutați fișiere care îndeplinesc cerințele specificate;).

5. Editor de text vi

Editorul de text vi este un editor universal prezent în orice Unix. Pe lângă editarea fișierelor text, editorul vi poate fi folosit pentru a edita linia de comandă.

Editorul vi are 3 moduri de operare (vezi figura).

Conectarea la editorul vi

Ieșire vi

Semnul „~” (tilde) din prima poziție marchează linii goale (inexistente) ale fișierului.

Modul principal este modul de comandă, în care comenzile sunt introduse prin apăsarea unei anumite secvențe de taste (nu sunt afișate în niciun fel pe ecran).

Deplasați-vă prin text în modul de comandă efectuate cu ajutorul săgeților și tastelor (stânga), (jos), (sus), (La dreapta).

Unele comenzi vi sunt listate în tabel.

Ștergerea liniei curente

Copierea liniei curente în buffer

Mișcarea cursorului

Introducerea caracterelor marcate de cursor în buffer

Introduceți o nouă linie în partea de jos

Inserarea unei noi linii în partea de sus

Adăugarea după cursor

Adăugați după linia curentă

Inserați înainte de cursor

Introduceți înaintea liniei curente

Înlocuirea unui caracter cu un caracter introdus de la tastatură

Lipirea textului din clipboard

. (punct)

Repetați ultima comandă executată

Anulează ultima comandă

Anulați toate modificările aduse liniei curente

Ștergerea unui caracter deasupra cursorului

În modul de introducere, toate caracterele tastate pe tastatură sunt inserate în text.

În modul ultima linie comanda pe care o introduceți este afișată pe ultima linie a ecranului.

6. Ajutor

Unix are un director electronic care conține o descriere a scopului comenzilor, sintaxa acestora, exemple de utilizare etc. Directorul este apelat cu comanda man:

7. Comenzi shell de bază

OMS– afișarea informațiilor despre utilizatorii activi;

ecou– trimite mesaje către terminal;

banner– trimite mesaje către terminal cu majuscule;

om– apelarea sistemului de ajutor online;

Data – ieșirea datei curente;

scrie– transferul de mesaje pe terminalul altui utilizator;

mesg– permiterea/interzicerea afișării mesajelor de la alți utilizatori;

Poștă– trimiterea/primirea corespondenței;

știri– familiarizarea cu noutățile sistemului;

pwd– afișarea numelui absolut al rutei din directorul de lucru curent;

CD– schimbarea directorului de lucru;

ls– afișarea informațiilor despre conținutul directorului;

mkdir– realizarea unui catalog;

rmdir– ștergerea unui director;

atingere– actualizarea marcajului de timp al fișierului;

cp- Copiere fișiere;

pisică– combinarea și afișarea conținutului fișierelor;

Mai mult– vizualizare pagină cu pagină a conținutului fișierului.

mv – mutarea sau redenumirea unui fișier;

rm– ștergerea fișierului;

alias– crearea unui pseudonim;

tr– conversia caracterelor;

Ieșire– finalizarea curentului coajă-A;

tricou– interceptarea rezultatelor conductei;

a tăia – selectarea câmpurilor dintr-un rând;

grep– căutare după șablon;

relatii cu publicul– scoateți fișierul la ieșire standard într-un format specificat;

fel– sortarea;

cap– ieșirea primelor rânduri ale fișierului;

coadă– ieșirea ultimelor rânduri ale fișierului;

WC– numărarea numărului de caractere, cuvinte și rânduri;

citit, ecou - citirea și ieșirea valorilor variabilelor;

Test- evaluarea sensului unei expresii;

expr, lăsa- calculul expresiilor aritmetice;

8. Coajă-programe

Shell vă permite să salvați o secvență de comenzi într-un fișier și apoi să o executați. Pentru a rula un fișier cu un program shell pentru execuție, trebuie să adăugați dreptul de execuție la drepturile de acces:

$ chmod +x nume_fișier_program

Ramificarea în programele shell este organizată folosind următorii operatori:

dacă-atunci-altfel

Operatori de buclă:

EXERCIȚII

1. Care dintre următoarele comenzi va avea ca rezultat afișarea unui mesaj de bun venit pe ecran? Care nu sunt? De ce?

$echo salut

$ echo salut

$ echo SALUT, LUME

$ banner Buna ziua

$ BANNER BUNA ZIUA, LUME

2. Imprimați un mesaj pe mai multe linii folosind comenzi ecouȘi banner.

3. Tipăriți data în două rânduri: pe prima linie zi, lună, an, pe a doua linie ora curentă, furnizând rezultatul cu un comentariu.

4. Folosind comanda scrie, trimite un mesaj la consolă. Trimite mesaje către mai multe terminale simultan.

5. Folosind comanda mesg, stabiliți dacă mesajele sunt permise pe terminalul dvs. Interziceți mesajele. Care va fi reacția sistemului dacă cineva va încerca să vă trimită un mesaj?

6. Stabiliți-vă numele ACASĂ- catalog.

7. Parcurgeți subarborele directorului pornind de la directorul /export/home folosind comenzile cd, lsȘi pwd.

8.. Creați în dvs ACASĂ-directoare subdirectoare de forma:

flori de fructe

mar pere struguri trandafir violet papadie

verde inchis

9. Fiind în propriul tău ACASĂ-directory, creați următoarele subdirectoare folosind o linie de comandă:

A/B/C/D

10. Fiind în propriul tău ACASĂ-directory, șterge toate subdirectoarele din director A.

11. În timp ce în ACASĂ-director, creați un fișier macintosh în catalogul existent mărși mai multe fișiere în directoare întunericȘi verde. Conectați-vă la director fcoboară. În timp ce în director fcoboară, copiați toate subdirectoarele frudeleîmpreună cu fișierele conținute în ele într-un director special creat coş.

12. În timp ce în director fcoboară, ștergeți directorul frudele.

13. Citiți fișierul .profil folosind comenzi pisicăȘi Mai mult.

14. Creați în ACASĂ-fișier text director Dosarul meu din mai multe linii folosind comanda pisică. Creați un fișier text MyFile, scriind aceleași rânduri în el. Cate fisiere ai primit? De ce?

15. Vizualizați conținutul fișierului creat în sarcina 2.2 Dosarul meu. Copiați fișierul Dosarul meu la dosar mycopy. Vizualizați conținutul ambelor fișiere.

16. Mutați fișierul mycopy la catalog flori.

17. În timp ce în ACASĂ-catalog, creați un link mylegătură pe fișier mycopy situat în director flori. Vizualizați fișierul link.

18. Adăugați o linie la fișier Ale melelegătură. Care dintre dosare Ale melelegătură, Ale melecopie, Ale melefişier schimbat? De ce?

19. Utilizând ce comandă puteți determina numărul de link-uri? Determinați numărul de link-uri pentru fișiere Ale melelegătură, Ale melecopie, Ale melefişier.

Ștergeți fișierul mycopy. Ce s-a întâmplat cu fișierul link? Determinați numărul de link-uri pentru fișiere Ale melelegătură, Ale melefişier.

20. Creați un alias dir, care tipărește conținutul directorului curent într-un format extins.

21. Deconectați-vă și conectați-vă din nou. Funcționează aliasul? dir? Ce ar trebui făcut pentru a vă asigura că porecla nu se pierde între sesiuni?

22. Creați un alias punct, care tipărește o listă de fișiere din directorul de lucru ale căror nume încep cu un punct.

23. Folosind comanda atingere, creați fișiere într-un director nou cu nume astfel încât, în același timp:

Șablon A* 5 fișiere potrivite;

Șablon * A a corespuns la 4 dosare;

Șablon ??.? potriviți 3 fișiere;

Șablon * aa* a corespuns la 2 dosare;

Șablon??? a corespuns 1 fișier.

24. Ce comandă ar trebui să introduceți pentru a face următoarele:

a) afișați numele tuturor fișierelor începând cu un punct;

b) afișați numele tuturor fișierelor care se termină cu ".TXT";

c) afișați numele tuturor fișierelor care conțin cuvântul "Ale mele";

25. Înlocuiește într-una fișierul specificat toate literele mici în litere mari, în celălalt – toate literele mari în litere mici. Eliminați orice spațiu duplicat din fișier.

26. Creați un fișier numit * . Ștergeți numai acest fișier. Aveți grijă când utilizați caractere de generare a numelui fișierelor!

27. Creați un fișier care are un spațiu în numele său. Cum se șterge un astfel de fișier?

28. Folosind comanda pisică dublați conținutul unui fișier prin adăugarea conținutului original la sfârșitul aceluiași fișier. Accesați directorul flori. Adăugați la fișier spisok lista de conținut a directorului flori. Vizualizați conținutul fișierului

29. Încercați să citiți folosind comanda pisică dosar inexistent. Care este răspunsul sistemului? Faceți același lucru redirecționând mesajele de eroare către un fișier eroarea mea. Ce vezi pe ecran? Vizualizați fișierul eroarea mea.

30. Creați o conductă pentru a lista numai numele și permisiunile fișierelor aflate în prezent în directorul dvs. de lucru.

31. Schimbați conducta construită astfel încât lista să fie salvată într-un fișier spisok Al lui ACASĂ-director, iar pe ecran a fost afișat doar numărul de fișiere din listă.

32. Afișați conținutul unui fișier /etc/passwd, sortate după câmpul nume de utilizator.

33. Creați un alias logatpe, care va afișa o listă ordonată alfabetic cu numele utilizatorilor care lucrează pe sistem.

33. Afișați data curentă cu majuscule folosind comenzi DataȘi banner.

34. Atribuiți unei variabile EU SUNT. Numele dvs. de înregistrare. Lansează altul coajă. Vedeți această variabilă? Ce trebuie să faceți pentru a-l vedea în generat coajă? Modificați valoarea unei variabile EU SUNT.în generat coajă. Ieșiți din cel născut coajă. Priviți valoarea acestei variabile în sursă coajă. Explicați rezultatul.

35. Scrie coajă-program info, care va cere utilizatorului să introducă numele, adresa, ziua, luna și anul nașterii și să afișeze aceste informații în ordinea inversă introdusă

36. Scrie coajă- un program care va afișa o solicitare pentru introducerea unui număr și va stoca numărul introdus într-o variabilă Yși imprimați un mesaj „Y este mai mare decât 7”, dacă valoare Y mai mult de 7, și „Y estenu mai mare decât 7” in caz contrar.

37. Scrieți un program shell care să afișeze următoarele statistici:

a) numele dvs.;

b) numărul de argumente cu care se lansează;

c) tipărește fiecare dintre argumentele sale și lungimea argumentului în caractere;

38. Scrie coajă- un program care determină numărul de argumente pe linia de comandă și afișează un mesaj de eroare dacă numărul de argumente nu este trei, sau argumentele în sine dacă numărul lor este trei.

39. Scrie coajă- un program care vă va solicita să introduceți un identificator de utilizator, să verificați identificatorul pentru conformitate cu cele utilizate în sistem și să afișați Numele completACASĂ-director sau, în cazul unui identificator nevalid, afișați un mesaj de eroare.

40. Scrieți un program shell Buna ziua, care oferă următorul răspuns la argumentele liniei de comandă:

Argument „-d”- programul va executa comanda Data;

Argument „-l”- programul va afișa conținutul directorului curent;

    Dacă nu există argumente sau argumente invalide pe linia de comandă, programul va imprima ajutor despre opțiunile sale.

41. Scrie un program cuvinte, care va solicita utilizatorului să introducă câte un cuvânt până când acesta introduce cuvântul Sfârşit. Amintește-ți toate cuvintele pe care le-ai introdus. După introducerea unui cuvânt Sfârşit afișează pe ecran toate cuvintele introduse.

42. Schimbați promptul de sistem astfel încât să conțină numele complet al căii din directorul de lucru curent .

43. Scrie un program virus, care creează o copie executabilă a sa cu un alt nume și apoi se șterge.

44. Scrieți un program virus2 , care caută în directorul programului curent limbajul de comandăși adaugă textului lor o comandă pentru a afișa cuvântul pe ecran Infectat!”.

45. Scrieți un program virus3 , care adaugă propriul cod la programele în limbajul de comandă pe care le găsește pentru a infecta alte programe.

46. ​​​​Scrieți un program virus4 , modificându-vă virusul astfel încât, atunci când este infectat, codul infectant să fie eliminat din programul infectant.

47. Scrie un program antivirus, care ar găsi toate programele shell infectate cu virusul dvs.

48. Modificați programul dezvoltat astfel încât nu numai să găsească programe infectate în directorul specificat de acesta, ci și să le „vindecă” prin salvarea versiunii infectate într-un fișier nou cu finalul adăugat la numele său . vir, și eliminarea atributului de execuție dintr-un astfel de fișier.

49. Scrieți un program virus5 , care ar:

a) ar infecta programele shell din directorul curent și subdirectoarele acestuia cu un virus numai dacă utilizatorul a introdus comanda ls;

b) s-ar comporta ca o echipă ls, fără a dezvălui nimic despre munca ta pe terminal.

50. Scrieți un program virus6 bazat pe programe virus2 -virus5 , al cărui cod de infectare nu a putut fi detectat de programul pe care l-ați dezvoltat antivirus, iar infecția ar avea loc pentru orice valoare a variabilei CALE.

51. Scrie un program supervirus, a cărui lansare vă infectează fișierele cu virusul dezvoltat în sarcina anterioară și de fiecare dată când vă conectați la sistem, se încearcă infectarea fișierelor prietenilor dvs. Program supervirus se șterge după prima lansare.

52. Scrieți un program superantivirus, care detectează și „vindecă” complet (dacă este specificată opțiunea corespunzătoare) toate fișierele din directorul specificat și subdirectoarele acestuia de la toți virușii dezvoltați.

După cum am menționat mai sus, pentru a construi algoritmi arbitrari este necesar să existe operatori de verificare a condițiilor. Coajă bash susține declarațiile de selecție dacăapoialtceva și caz, precum și operatorii de buclă pentru,in timp ce, pana cand, făcându-l un limbaj de programare puternic.

5.8.1 Operatori dacăȘi Test(sau )

Construcția operatorului condiționat într-o formă ușor simplificată arată astfel:

dacă list1 atunci list2 else list3 fi

Unde lista1, lista2 și lista3 sunt secvențe de comenzi separate prin virgule și care se termină cu un caracter punct și virgulă sau linie nouă. În plus, aceste secvențe pot fi incluse în acolade: (listă).

Operator dacă verifică valoarea returnată de comenzile de la lista1. Dacă există mai multe comenzi în această listă, atunci valoarea returnată de ultima comandă din listă este verificată. Dacă această valoare este 0, atunci comenzile de la lista2; dacă această valoare nu este zero, comenzile de la lista3. Valoarea returnată de un astfel de operator compus dacă, este aceeași cu valoarea produsă de ultima comandă a secvenței executate.

Format de comandă complet dacă are forma:

if list then list [ elif list then list ] ... [ else list ] fi

(aici parantezele pătrate înseamnă doar că ceea ce este conținut în ele nu este neapărat prezent în operator).

Ca o expresie care vine imediat după dacă sau elif, o comandă folosită frecvent Test, care poate fi notat și prin paranteze drepte. Echipă Test evaluează o expresie și returnează 0 dacă expresia este adevărată și 1 în caz contrar. Expresia este transmisă programului Test ca argument. În loc să scrii

expresie de testare,

Puteți include expresia între paranteze drepte:

[expresie].

Te rog noteaza asta Testși [ sunt două nume ale aceluiași program, nu o conversie magică efectuată de shell bash(doar sintaxa [ necesită includerea unei paranteze de închidere). Rețineți, de asemenea, că în loc de Testîn proiectare dacă orice program poate fi folosit.

În concluzie, dăm un exemplu de utilizare a operatorului dacă:

if [ -e textmode2.htm ] ; apoi

ls textmode*

altfel

pwd

Despre operator Test(sau […]) trebuie să avem o conversație specială.

5.8.2 Operator Testși condiționale

Expresii condiționale utilizate în enunț Test, se bazează pe verificare atributele fișierului, comparații de șiruri și comparații aritmetice obișnuite. Expresiile complexe sunt construite din următorul unar sau operatii binare(„cărămizi elementare”):

    Un fișier

Adevărat dacă există un fișier numit fișier.

    dosar B

Adevărat dacă fişier există și este dosar special dispozitiv de blocare.

    fișier C

Adevărat dacă fişier există și este un fișier de dispozitiv cu caractere speciale.

    Fișierul D

Adevărat dacă fişier există și este un director.

    Fișierul E

Adevărat dacă fișierul numit fişier există.

    Fișierul F

Adevărat dacă fișierul numit fişier există și este un fișier obișnuit.

    fișier G

Adevărat dacă fișierul numit fişier există și bitul său de schimbare a grupului este setat.

    Fișier H sau fișier -L

Adevărat dacă fișierul numit fişier există și este o legătură simbolică.

    fișier K

Adevărat dacă fișierul numit fişier există și bitul său „lipicios” este setat.

    Fișierul P

Adevărat dacă fișierul numit fişier există și este conductă numită(FIFO).

    Fișierul R

Adevărat dacă fișierul numit fişier există și are permisiunea de citire setată

    Fișierul S

Adevărat dacă fișierul numit fişier există și dimensiunea sa este mai mare decât zero.

    Tfd

Adevărat dacă descriptorul fișierului fd este deschis și indică către terminal.

    Fișierul U

Adevărat dacă fișierul numit fişier există și bitul de utilizator de modificare este setat.

    fișier W

Adevărat dacă fișierul numit fişier există și are setat permisiunea de scriere.

    fișier X

Adevărat dacă fișierul numit fişier există și este executabil.

    O dosar

Adevărat dacă fișierul numit fişier există și este deținut de utilizatorul indicat de ID-ul de utilizator efectiv.

    fișier G

Adevărat dacă fișierul numit fişier există și aparține grupului identificat prin ID-ul efectiv al grupului.

    Fișierul S

Adevărat dacă fișierul numit fişier există și este o priză.

    N fișier

Adevărat dacă fișierul numit fişier există și s-a schimbat de la ultima citire.

    fisier1 -nt fisier2

Adevărat dacă fișierul fisier1 are un timp de modificare mai târziu decât fisierul2.

    fisier1 -ot fisier2

Adevărat dacă fișierul fisier1 mai vechi de fisierul2.

    fisier1 -ef fisier2

Adevărat dacă fișierele fisier1Și fisierul2au aceleași numere de dispozitiv și inode(inod).

    O optname

Adevărat dacă opțiunea shell este activată optname. Pentru o explicație, consultați pagina de manual bash.

    șir Z

Adevărat dacă lungimea șirului este zero.

    șir N

Adevărat dacă lungimea șirului nu este zero.

    șir1 == șir2

Adevărat dacă șirurile se potrivesc. În loc de == poate fi folosit = .

    șir1 !== șir2

Adevărat dacă șirurile nu se potrivesc.

    șir 1< string2

Adevărat dacă linia șir 1 lexicografic precede șirul sfoară 2(pentru localitatea curentă).

    șir1 > șir2

Adevărat dacă linia șir 1 lexicografic vine după linie sfoară 2(pentru localitatea curentă).

    arg1 OP arg2

Aici OP- uh apoi una dintre operațiile de comparare aritmetică: -echivalentul(egal), -ne(nu este egal), -lt(mai puțin decât), -le(mai puțin sau egal), -gt(Mai mult), -GE(mai mult sau egal). Numerele întregi pozitive sau negative pot fi folosite ca argumente.

Din aceste expresii condiționale elementare puteți construi oricât de complexe doriți, folosind operațiile logice obișnuite ale NEGAȚII, ȘI și SAU:

    !(expresie)

Operator boolean de negație.

    expresie1 -a expresie2

operator boolean ȘI(ȘI). Adevărat dacă ambele expresii sunt adevărate.

    expresie1 -o expresie2

operator boolean SAU(SAU). Adevărat dacă oricare dintre cele două expresii este adevărată.

Aceleași expresii condiționate sunt folosite în operatori in timp ceȘi pana cand, pe care ne vom uita mai jos.

5.8.3 Operator caz

Format operator caz este:

cuvânt cu caz în lista [[(] model [ | model ] ...) ;; ]...esac

Echipă caz mai întâi produce extinderea cuvintelor cuvânt, și încearcă să potrivească rezultatul cu fiecare dintre eșantioane model unul câte unul. După ce se găsește prima potrivire, nu se mai efectuează verificări; se execută lista de comenzi care urmează modelul cu care a fost găsită potrivirea. Valoarea returnată de operator este 0 dacă nu au fost găsite potriviri de model. În caz contrar, se returnează valoarea produsă de ultima comandă din lista corespunzătoare.

Următorul exemplu de utilizare a instrucțiunii case este preluat din scriptul de sistem /etc/rc.d/rc.sysinit.

cazul „$UTC” în

da|adevarat)

CLOCKFLAGS="$CLOCKFLAGS -u";

CLOCKDEF="$CLOCKDEF (utc)";

nu|fals)

CLOCKFLAGS="$CLOCKFLAGS --localtime";

CLOCKDEF="$CLOCKDEF (ora locală)";

esac

Dacă variabila evaluează da sau adevărat, atunci prima pereche de comenzi va fi executată, iar dacă valoarea ei este nu sau fals, va fi executată a doua pereche.

5.8.4 Operator Selectați

Operator Selectați vă permite să organizați interacțiunea interactivă cu utilizatorul. Are urmatorul format:

selectați numele [în cuvânt; ] do listă ; Terminat

Mai întâi din șablon cuvânt este generată o listă de cuvinte care se potrivesc cu modelul. Acest set de cuvinte este transmis în fluxul de erori standard, fiecare cuvânt fiind însoțit de un număr de secvență. Dacă modelul cuvânt omisi, parametrii poziționali sunt derivați în același mod. Promptul standard PS3 este apoi emis și shell-ul așteaptă ca o linie să fie introdusă la intrarea standard. Dacă șirul introdus conține un număr corespunzător unuia dintre cuvintele afișate, atunci variabila Nume i se atribuie o valoare egală cu acel cuvânt. Dacă este introdusă o linie goală, numerele și cuvintele corespunzătoare sunt afișate din nou. Dacă se introduce orice altă valoare, variabila Nume i se atribuie o valoare zero. Șirul introdus de utilizator este stocat într-o variabilă RĂSPUNS. Lista comenzilor listă executat cu valoarea variabilei selectate Nume.

Iată un mic script:

#!/bin/sh

echo "Ce sistem de operare preferi?"

selectați var în „Linux” „Gnu Hurd” „Free BSD” „Altele”; do

pauză

Terminat

echo "Ați alege $var"

Ce sistem de operare preferi?
1) Linux
2) Gnu Hurd
3) BSD gratuit
4) Altele
#?

Apăsați pe oricare dintre cele 4 numere sugerate (1,2,3,4). Dacă introduceți 1, de exemplu, veți vedea mesajul:

„Ați alege Linux”

5.8.5 Operator pentru

Operator pentru funcționează puțin diferit decât în ​​limbajele obișnuite de programare. În loc să crească sau să scadă valoarea unei variabile cu una de fiecare dată când trece prin buclă, aceasta atribuie următoarea valoare dintr-o listă dată de cuvinte variabilei de fiecare dată când trece prin buclă. În general, designul arată cam așa:

pentru numele în cuvinte faceți lista făcută.

Reguli pentru construirea listelor de comenzi ( listă) sunt aceleași ca în operator dacă.

Exemplu. Următorul script creează fișierele foo_1, foo_2 și foo_3:

pentru a în 1 2 3 ; do

atinge foo_$a

Terminat

ÎN caz general Declarația for are formatul:

pentru nume [în cuvânt; ] do listă ; Terminat

În primul rând, cuvântul este dezvăluit cuvântîn conformitate cu regulile de divulgare a expresiei prezentate mai sus. Apoi variabila Nume valorile rezultate sunt atribuite una câte una și o listă de comenzi este executată de fiecare dată ist. Dacă " în cuvânt" lipsește, apoi lista de comenzi listă este executat o dată pentru fiecare parametru de poziție care este specificat.

Linux are un program secv, care ia ca argumente două numere și produce o succesiune a tuturor numerelor situate între cele date. Cu această comandă puteți forța pentru V bash funcționează exact la fel cum funcționează un operator similar în limbaje de programare convenționale. Pentru a face acest lucru, trebuie doar să scrieți ciclul pentru in felul urmator:

pentru a în $(sev 1 10) ; do

pisica fisier_$a

Terminat

Această comandă afișează conținutul a 10 fișiere: " fișier_1", ..., "fișier_10".

5.8.6 Operatori in timp ceȘi pana cand

Operator in timp ce functioneaza ca dacă, executând doar operatori din listă lista2 bucla continuă atâta timp cât condiția este adevărată și se anulează dacă condiția nu este adevărată. Designul arată astfel:

în timp ce list1 face list2 terminat.

în timp ce [-d directorul meu]; do

ls -l directorul meu >> fișier jurnal

echo -- SEPARATOR -- >> fișier jurnal

dormi 60

Terminat

Un astfel de program va înregistra conținutul directorului „mydirectory” în fiecare minut atâta timp cât directorul există.

Operator pana cand similar cu operatorul in timp ce:

până când list1 face list2 terminat.

Diferența este că rezultatul returnat la executarea unei liste de instrucțiuni lista1, luat cu negație: lista2 executat dacă ultima comandă din listă lista1 returnează o stare de ieșire diferită de zero.

5.8.7 Funcții

Sintaxă

Coajă bash permite utilizatorului să-și creeze propriile funcții. Funcțiile se comportă și sunt folosite exact ca comenzile shell obișnuite, ceea ce înseamnă că putem crea noi comenzi noi înșine. Funcțiile sunt construite după cum urmează:

nume functie() (lista)

Și cuvântul funcţie nu este necesar, Nume definește numele funcției prin care poate fi accesată, iar corpul funcției este format dintr-o listă de comenzi listă, situat între ( și ). Această listă de comenzi este executată de fiecare dată când numele Nume specificat ca numele comenzii de invocat. Rețineți că funcțiile pot fi definite recursiv, deci este permis să apelăm funcția pe care o definim în sine.

Funcțiile sunt executate în contextul shell-ului curent: pentru a interpreta funcția proces nou nu rulează (spre deosebire de executarea scripturilor shell).

Argumente

Când o funcție este apelată pentru execuție, argumentele funcției devin parametrii poziționali(parametri de pozitie) pe durata funcției. Ele sunt denumite $n, Unde n— numărul argumentului pe care vrem să-l accesăm. Numerotarea argumentelor începe de la 1, deci $1 - acesta este primul argument. De asemenea, putem obține toate argumentele simultan cu $* , și numărul de argumente care folosesc $# . Parametru de poziție 0 nu se schimba.

Dacă apare o comandă încorporată în corpul funcției întoarcere, execuția funcției este întreruptă și controlul este transferat la comandă după apelul funcției. Când funcția se termină, parametrii de poziție și parametrul special # sunt returnate valorile pe care le aveau înainte de începerea funcției.

Variabile locale (locale)

Dacă vrem să creăm parametru local, poate fi folosit cuvânt cheie local. Sintaxa pentru specificarea acestuia este exact aceeași ca pentru parametrii obișnuiți, doar definiția este precedată de un cuvânt cheie local: local nume=valoare.

Iată un exemplu de specificare a unei funcții care implementează comanda menționată mai sus secv:

seq()

local I=$1;

în timp ce [ $2 != $I ]; do

echo -n "$I";

I=$(($I + 1))

Terminat;

ecou $2

Vă rugăm să rețineți opțiunea -n operator ecou, anulează trecerea la linie nouă. Deși acest lucru nu este esențial pentru scopurile pe care le avem în vedere aici, poate fi util pentru utilizarea funcției în alte scopuri.

Funcția de calcul factorial fapt

Inca un exemplu:

fapt()

dacă [ $1 = 0 ]; apoi

ecou 1;

altfel

echo $(($1 * $(fapt $(($1 - 1)))))

Aceasta este funcția factorială, un exemplu de funcție recursivă. Observați extinderea aritmetică și înlocuirea comenzilor.

V. Kostromin (kos la rus-linux dot net) - 5.8. Shell ca limbaj de programare

Interpret de comandă

Pentru a oferi o interfață de linie de comandă, sistemul de operare folosește adesea interpreți de comandă, care pot fi limbaje de programare independente, cu propria lor sintaxă și funcționalitate distinctivă.

Sistemul de operare Windows 9x include interpretorul de comenzi command.com, iar Windows NT include shell-urile de comandă UNIX, popularele csh, ksh și altele.

De regulă, la reglarea la nivel scăzut a sistemului de operare, utilizatorul are posibilitatea de a schimba shell-ul implicit.

Funcții

Interpretul de comenzi execută comenzi în limba sa, date pe linia de comandă sau provenind de la intrare standard sau un .

Apelurile către utilitarele de sistem sau aplicații, precum și structurile de control, sunt interpretate ca comenzi. În plus, shell-ul este responsabil pentru extinderea tiparelor de nume de fișiere și pentru redirecționarea și legarea utilitarului I/O.

Împreună cu un set de utilitare, shell-ul este un mediu de operare, un limbaj de programare cu drepturi depline și un instrument puternic pentru rezolvarea atât a sistemului, cât și a unora. probleme aplicate, în special, automatizarea secvențelor de comenzi executate frecvent.

Interpret standard de comandă

Implementări și disponibilitate

Alternative

Alături de cele standard, mai folosesc și sistemele de operare deschise cochilii alternative tcsh, care diferă în sintaxa structurilor de control și comportamentul variabilelor.

Unele sisteme de operare alternative vin cu interpreți pentru propriile limbi ale fișierelor de comandă (cum ar fi limbajul fișierelor pe batch OS Microsoft Windows NT, limbaj OS/2 etc.)

Unii oameni preferă să folosească noi limbaje interpretate, cum ar fi Python, pentru a automatiza secvențele de comenzi executate frecvent.

Înveliș grafic

Shell-uri grafice pentru OS Windows

Cele mai recente versiuni ale sistemului de operare Windows folosesc mediul integrat Windows Explorer ca shell. Windows Explorer reprezintă mediul vizual controale, inclusiv Desktop, Meniul Start, Bara de activități și funcțiile de gestionare a fișierelor. Versiunile timpurii ale sistemului de operare Windows 3.xx au inclus un manager de programe ca shell grafic.

Mulți dezvoltatori terți oferă medii alternative care pot fi utilizate în locul shell-ului Explorer activat implicit de către Microsoft la sistemul Windows.

  • coajă Aston
  • BB4Win
  • BBlean
  • Cairo (în curs de dezvoltare)
  • Chroma
  • Emerge Desktop
  • Geoshell
  • Navigator Packard Bell
  • Manager de program
  • Desktop securizat
  • SharpE
  • Desktop Talisman
  • WinStep
  • Microsoft Bob

Vezi si

Fundația Wikimedia. 2010.

Vedeți ce este „Command Shell” în alte dicționare:

    - (shell Unix în engleză, adesea doar „shell” sau „sh”) un interpret de comandă folosit în sistemele de operare familia UNIX, în care am folosit... Wikipedia

    Acest termen are alte semnificații, vezi Dorință. wish (Windowing Shell) este un shell de comandă UNIX simplu scriptabil sau interactiv pentru X Window System și Mac OS X. Oferă utilizatorilor control asupra componentelor... ... Wikipedia

    - ... Wikipedia

    Solicitarea interpretului de linie de comandă este redirecționată aici. Este necesar un articol separat pe tema „Interpret de linie de comandă”. Aspect scoici (ing. Co ... Wikipedia

    Operating system shell (din limba engleză shell shell) este un interpret al comenzilor sistemului de operare (OS), oferind o interfață pentru interacțiunea utilizatorului cu funcțiile sistemului. În general, există shell-uri cu două tipuri de interfață pentru... Wikipedia

    Shell de comandă UNIX (în engleză Unix shell, adesea doar „shell” sau „sh”) este un interpret de comandă utilizat în sistemele de operare din familia POSIX de shell-uri compatibile, datând din shell-ul Bourne, care a apărut în Unix Versiunea 7. Cuprins 1 ... ... Wikipedia

    Shell de comandă UNIX (în engleză Unix shell, adesea doar „shell” sau „sh”) este un interpret de comandă utilizat în sistemele de operare din familia POSIX de shell-uri compatibile, datând din shell-ul Bourne, care a apărut în Unix Versiunea 7. Cuprins 1 ... ... Wikipedia

    Shell de comandă UNIX (în engleză Unix shell, adesea doar „shell” sau „sh”) este un interpret de comandă utilizat în sistemele de operare din familia POSIX de shell-uri compatibile, datând din shell-ul Bourne, care a apărut în Unix Versiunea 7. Cuprins 1 ... ... Wikipedia

Cărți

  • Scripturi Shell. Linux, OS X și Unix. Ghid, Taylor Dave. Scripturile Shell ajută administratorii de sistemși programatori să automatizeze sarcini de rutinăîncă de când au apărut primele computere. De la lansarea primului...

Această secțiune oferă documentație pentru a ajuta programatorul în limbaje de comandă coajă(sh, bash, ksh și altele)

interpret de comandă c-shell

0. Introducere

Interpretul de comenzi în mediul UNIX îndeplinește două funcții principale:

reprezintă o interfață interactivă cu utilizatorul, adică emite un prompt și procesează comenzile introduse de utilizator;
procesează și execută fișiere text, care conțin comenzi de interpret (fișiere batch);

În acest din urmă caz, sistemul de operare permite ca fișierele batch să fie tratate ca un tip de fișier executabil. În consecință, există două moduri de operare ale interpretului: interactiv și comandă.

UNIX (spre deosebire de, să zicem, DOS) are mai multe interprete de comandă diferite. Să enumerăm cele mai populare:

/bin/sh - Shell Bourne. Din punct de vedere istoric, este primul shell de comandă dezvoltat pentru prima versiune a sistemului de operare UNIX. În prezent, acest shell este shell-ul principal în versiunile UNIX System V.
/bin/csh - C-shell. Un shell a cărui sintaxă a limbajului de comandă este apropiată de limbajul C. Este shell-ul principal pentru versiunea Berkeley a sistemului de operare UNIX.
/bin/ksh - k-shell.
/bin/rsh - Shell restricționat. Reprezintă sh cu dizabilități(în primul rând pentru a proteja sistemul de operare de acțiunile neautorizate ale utilizatorului).

Sistemul de operare ConvexOS este o aromă de 4.3 BSD UNIX()BSD - Berkeley Series Distribution și, prin urmare, baza shell de comandă este csh.

1. Caracteristici principale

Lucrul cu linia de comandă

Interpretul percepe șirul tastat de utilizator ca o comandă (sau mai multe comenzi). Sintaxa shell vă permite să tastați

mai multe comenzi pe o linie, separate prin punct și virgulă. De exemplu

este echivalent cu două comenzi introduse secvenţial:

Dimpotrivă, dacă dorește, utilizatorul poate

continuați să tastați o comandă lungă pentru rândul următor, după ce a terminat linia curentă semn \\. Până când comanda este finalizată, veți primi un ``prompt secundar'' > în loc de primar (%). De exemplu,

% tar tv Makefile star.o star.c star.dat main.o main.c

echivalent

%tar tv Makefile star.o\

> star.c star.dat \

Fluxurile I/O sunt controlate într-un mod similar cu DOS (Mai precis, sistemul de operare DOS a adoptat sintaxa de redirecționare a firelor de execuție din UNIX) folosind simbolurile > , > > ,

Util caz special folosind mecanismul de redirecționare a firelor - redirecționarea către /dev/null, care vă permite să scăpați de mesajele inutile de pe ecran. Folosind același mecanism, puteți crea fișiere goale:

va crea un fișier gol myfile în directorul curent.

În plus, C-shell vă permite să grupați comenzi folosind paranteze. În acest caz, întregul construct din paranteze este considerat de către interpret ca o singură comandă. Acest lucru este util, de exemplu, în astfel de construcții:

% (comandă1 | comandă2)

Dacă omiteți parantezele, shell-ul nu va putea determina ce comandă doriți să introduceți fișierul myfile.

Următoarele „conveniențe” există în această implementare C-shell:

Puteți evita să tastați o comandă lungă până la sfârșit, dar încercați să apăsați tasta Tab după ce ați tastat parțial comanda (sau numele fișierului). C-shell va încerca să completeze el însuși caracterele lipsă sau va răspunde cu un scârțâit dacă alegerea este ambiguă.
Dacă ați tastat o comandă, dar ați uitat opțiunile acesteia, introduceți secvența H. C-shell vă va oferi un scurt ajutor. De exemplu,

Când introduceți numele complet al fișierului, utilizați combinația de taste ^D. Veți putea obține o listă a directorului pe care îl introduceți în formatul comenzii lf.
Bufferul de comenzi reține ultimele 20 de comenzi. În loc să tastați o comandă, o puteți apela din buffer folosind tastatura cu săgeți (desigur, numai dacă această comandă este în buffer).

Analiza liniei de comandă

Interpretul, după ce a primit linia de comandă, efectuează o serie de transformări pe aceasta, și anume:

Extinde aliasurile
Extinde metacaracterele (*, ?, [, ], ~, (, ))
Înlocuiește variabilele shell
Execută comanda dacă este o comandă de interpret încorporată sau pornește un proces dacă comanda este externă.

Să ne uităm la acești pași pas cu pas.

Alias. Comanda de alias încorporată vă permite să definiți aliasuri de comandă. Exemplu:

% alias mycat „pisica | mai mult”

definește mycat ca un alias pentru șirul cat | Mai mult. Prin urmare, mai departe aveți dreptul de a utiliza comanda mycat, care va fi extinsă de interpret oriunde o utilizați. Acesta este un mod de a defini nume scurte pentru comenzile compuse lungi.

Comanda integrată unalias mycat distruge aliasul introdus anterior mycat.

Metacaracterele. Metacaracterele vă permit să scurtați liste întregi de cuvinte (în principal nume de fișiere). Shell tratează un cuvânt care conține metacaractere ca un șablon pentru compilarea unei liste de nume de fișiere:

* în șablon înlocuiește orice succesiune de caractere. De exemplu, m* se va extinde la o listă cu toate fișierele care încep cu litera m. Există o mică excepție de la această regulă: pur și simplu * omite din listă acele fișiere ale căror nume încep cu un punct.
? înlocuiește un caracter. De exemplu m? se va extinde la o listă a tuturor numelor de fișiere care încep cu litera m și constă exact din două litere.
[.-.] vă permite să specificați intervalul pentru caracterul înlocuit. De exemplu, m va fi extins în ma mb mc me.
(...,...) vă permite să enumerați cuvinte pentru înlocuire. Deci, de exemplu, m(roșu, albastru, verde) va fi extins în mred mblue mggreen.

În cele din urmă, tilde vă permite să specificați directorul principal al utilizatorului:

~name/ este echivalent cu specificarea căii complete către directorul principal al numelui de utilizator (Spune /usr1/name/)
~/ este echivalent cu specificarea căii complete către propriul director principal.

Variabile Shell. Cuvintele care încep cu simbolul $ sunt interpretate de interpretul de comenzi ca nume de variabile. Variabilele sunt împărțite în variabile de mediu (vor fi cunoscute de toate programele numite din acest shell și sunt în acest sens globale) și variabile simple.

Comanda încorporată set name=value vă permite să definiți o variabilă simplă numită nume și să îi dați valoarea valorii. Când interpretul întâlnește expresia $nume pe linia de comandă, o va înlocui cu valoare. De exemplu,

%set culoare=albastru

va afișa linia albastră pe terminal. A

%set culoare=albastru

% echo new$culoare

va da newblue. În cele din urmă, prin intrare

%set culoare=albastru

% echo $(culoare)nou

primim o culoare nouă. Ultimul exemplu demonstrează cum să folosiți acolade pentru a separa un nume de variabilă de un cuvânt (pentru a economisi $colornew, interpretul va răspunde că variabila colornew nu este definită.

Comanda unset distruge variabilele definite anterior.

Pentru a defini o variabilă egal cu sfoară din mai multe cuvinte, includeți-l între ghilimele simple. Exemplu

% set color="albastru sau roșu sau verde"

Variabilele simple pot fi matrice de cuvinte (care trebuie diferențiate de cazul tocmai discutat, când variabila conține un șir de mai multe cuvinte. Pentru a declara o matrice, trebuie să folosiți paranteze:

% culori setate=(albastru roșu verde)

Acum echo $culori va produce un șir de trei culori (încercați!). Cu toate acestea, puteți lucra și pe elemente de matrice individuale (elementele sunt numerotate începând de la zero), astfel:

(ne facem verde). Numărul de elemente din matrice este conținut în variabila $#colors.

va da numărul 3 terminalului.

Sunt posibile combinații destul de complexe folosind șabloane, de exemplu:

% fișiere setate=(m*)

va returna numărul de fișiere din directorul curent începând cu litera m.

Variabilele de mediu sunt numite în același mod ca și variabilele simple. Diferența constă în modul în care sunt definite:

Comanda % setenv name value setează o variabilă de mediu numită nume. Rețineți diferența enervantă în sintaxă: atunci când definiți o variabilă de mediu, nu trebuie să utilizați semnul =.

O listă cu toate variabilele de mediu poate fi obținută folosind comanda încorporată printenv.

Puteți să nedefiniți o variabilă de mediu folosind unsetenv.

În cele din urmă, pentru a defini o matrice de variabile de mediu, NU folosiți paranteze, ci folosiți două puncte ca delimitatori de elemente de matrice:

% setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man

Comenzi și variabile încorporate

Lista celor mai importante comenzi C-shell încorporate cu scurte explicații:

alias definește un alias

bg transferă sarcina către modul de fundal execuţie

comanda chdir path pentru a merge la directorul de cale.

echo își imprimă toate argumentele la ieșirea standard

exec filename începe procesul de la fișier filename în loc de shell-ul curent (adică deasupra acestuia). Revenirea la shell nu este posibilă.

ieșirea termină coaja.

fg se traduce proces de fundal la sincron.

nume de fișier fișier oferă informații despre ce crede sistemul de operare despre acest fișier.

goto label sare necondiționat la linia din fișierul de comandă marcată cu label. Nu este folosit interactiv.

kill pid trimite un semnal de anulare procesului pid, ceea ce duce de obicei la oprirea procesului.

sursă nume de fișier citește și execută comenzi din fișierul nume de fișier.

set, setenv setarea variabilelor interne și de mediu.

shift var mută elementele matricei var spre stânga. În acest caz, dimensiunea matricei este redusă cu unul, iar elementul zero al matricei se pierde. Variabila var trebuie să fie o matrice.

time command execută comanda și afișează timpul necesar pentru execuție pe terminal.

unset distruge variabila shell.

unalias distruge un alias de comandă definit anterior.

@name=expr stochează rezultatul expresiei aritmetice expr în variabila nume.

Lista celor mai importante variabile încorporate C-shell cu scurte explicații:

matrice argv de parametri ai liniei de comandă (utilizate în modul de comandă)

cdpath este directorul în care merge shell-ul când i se dă comanda chdir fără un argument.

dimensiunea bufferului istoric pentru stocarea comenzilor.

directorul principal al utilizatorului de acasă

locația de e-mail în Sistemul de fișiere căsuța poștală a utilizatorului.

cale cale pentru a căuta comenzi externe.

promptul este promptul principal al shell-ului.

prompt1 prompt secundar.

calea plină a cochiliei fisier executabil shell-ul curent (/bin/csh)

Instrucțiuni de control și instrucțiuni de buclă

Din lista de comenzi shell încorporate, am exclus în mod deliberat declarații condiționaleși instrucțiuni bucle, care vor fi acoperite aici.

Execuție condiționată

Sintaxa instrucțiunii condițional if din C-shell este:

if (expr) comanda

expr poate fi fie o expresie aritmetică, fie o verificare a atributelor fișierului. Exemplu:

dacă (-f /etc/hosts) cat /etc/hosts

Să luăm în considerare ultimul caz mai detaliat. Sunt posibile următoarele verificări ale atributelor fișierului:

R este lizibil

W este disponibil pentru înregistrare

X este disponibil pentru execuție

E verificarea existenței fișierului

O verificați dacă sunteți proprietarul acestui fișier

Fișierul Z are dimensiune zero

Fișierul F este un fișier obișnuit

Fișierul P este o conductă numită

Fișierul D este un director

buclă while

Bucla rulează atâta timp cât condiția este adevărată. Exemplu:

while ($#fișiere > 0)

bucla foreach

Acest lucru este extrem de operator util, care vă permite să organizați o buclă prin elementele unei matrice de cuvinte

foreach varname (listă)

Corpul buclei este executat de câte ori există elemente în tabloul listă. În acest caz, variabila varname conține următoarea valoare a elementului matrice. Exemplu

pentru fiecare culoare (albastru roșu verde)

echo Culoarea este $culoare

pentru fiecare fișier (*.for)

echo Redenumirea $fișier

mv $fișier `nume de bază $fișier .pentru`.f

Folosit aici comanda standard de bază, care „taie”” sufixul dat de al doilea argument din cuvântul dat în primul argument și imprimă cuvântul rezultat la ieșirea standard. Utilizarea ghilimelelor în limbajul C-shell va fi discutată puțin mai târziu.

Operator condițional multivariat

Sintaxa unei instrucțiuni de comutare condiționată în C-shell este:

case pattern1: ... breaksw case (\it pattern2):

Operatorul permite transferul controlului în funcție de faptul că sfoară de sfoară la orice tipar din setul pattern1, pattern2, ... (caz în care controlul este trecut la blocul delimitat de case ... breaksw) sau nu (în acest caz controlul este trecut la implicit:... endsw branch. În general, declarație switch este foarte asemănător cu un operator similar în limbajul C. Astfel de constructe sunt adesea folosite în fișierele batch pentru a analiza răspunsul utilizatorului la intrebare pusa ().

2. Rularea shell-ului în modul de comandă

S-a remarcat deja că csh poate fi lansat în modul de comandă. Mai mult, instrucțiunile condiționate și instrucțiunile buclei sunt cel mai des folosite în fișierele batch. Aici ne vom uita la caracteristicile unui astfel de lucru în „echipă”.

Identificarea interpretului

Cea mai ușoară modalitate este de a lansa shell-ul în modul de execuție al unui anumit fișier mycommand dând acestui fișier atributul executabil comanda chmod:

% chmod +x comanda mea

Acum trebuie doar să introduceți comanda mycommand de la tastatură și sistemul de operare va lansa automat shell-ul în modul de comandă pentru a executa acest fișier. În felul acesta există unul stâncă subacvatică: Există mulți interpretori de comenzi în sistem și sintaxa lor de comandă este diferită. Cum îl va determina sistemul de operare pe cel de care aveți nevoie? Raspunsul este nu. Trebuie să spuneți în mod explicit sistemului de operare ce interpret doriți să rulați pentru a executa acest fișier batch. Pentru a face acest lucru, prima linie a fișierului dvs. ar trebui să aibă următoarea formă standard:

ceea ce va permite sistemului de operare să facă ceea ce trebuie. Dacă nu specificați aceste informații, sistemul de operare va presupune (din motive istorice) că fișierul este scris în limbajul Bourne shell și, cel mai probabil, veți primi multe mesaje de eroare de sintaxă.

Să mai notăm un lucru proprietate utilă Operare shell în modul de comandă: toate liniile care încep cu semnul # vor fi ignorate. Acest lucru vă permite să adăugați comentarii la textul fișierului de comandă.

Următorul fapt vă permite să lucrați cu linia de comandă folosind csh: atunci când rulați fișierul de comandă, mycommand, este definită automat o variabilă internă numită argv, reprezentând o serie de parametri ai liniei de comandă. De exemplu, următorul fișier batch imprimă pur și simplu toate argumentele sale și numărul lor pe terminal:

# Acest fișier pur și simplu scoate argumentele sale

# și numărul total de argumente

echo Argumente: $argv

echo Numărul de argumente: $#argv

Lansare explicită

Puteți aplica mai mult direct, dar mai puțin mod convenabil lansați un fișier batch - apelând shell-ul cu comutatorul -c nume de fișier. Exemplu:

% /bin/csh -c comanda mea arg1 arg2 arg3...

unde cheia trebuie imediat urmată de numele fișierului care urmează să fie lansat. Argumentele necesare sunt enumerate după. Rețineți că, cu această metodă de lansare, este posibil ca fișierul să nu aibă un atribut executabil.

Citate

Citatele joacă un rol important în sintaxa shell. Există trei tipuri de citate: simple ("), duble ("") și backticks (`).

Ghilimelele simple sunt folosite pentru a evidenția textul pe care shell-ul ar trebui să îl interpreteze literal. Cu alte cuvinte, textul din ghilimele simple nu este supus extinderii și interpretării. Exemplu:

ecou „Dolarul este $bun”

literalmente obținem Dollarul este $bun, chiar dacă semnul dolarului este un metacaracter coajă.

Ghilimele duble delimitează un șir de caractere pe care shell-ul îl va trata ca un singur cuvânt. Exemplu:

set colors="verde albastru roșu"; ecou $#culori

va returna numărul 1, ceea ce înseamnă că variabila culori este o variabilă simplă și nu o matrice. Orice lucru din ghilimele duble este supus interpretării de către shell.

Gitatele inverse vă permit să reprezentați un șir care constă din rezultatul unei comenzi. Deci expresia din backticks este tratată ca o comandă pe care o execută shell-ul și ceea ce această comandă imprimă la ieșirea standard este înlocuită ca un șir în locul în care apar acele backticks. Exemplu:

va pune în variabila mytty șirul pe care îl produce comanda tty (și anume numele și numărul terminalului curent).

  • Tutorial

De ce și pentru cine este articolul?

Inițial, acesta a fost un memento pentru studenții care încep să lucreze cu sisteme asemănătoare Unix. Cu alte cuvinte, articolul este destinat celor care nu au experiență anterioară în lucrul cu linia de comandă Unix, dar dintr-un motiv sau altul doresc sau trebuie să învețe cum să interacționeze eficient cu ea.

Nu va exista repovestire a mana (documentație), iar articolul nu anulează sau înlocuiește în niciun fel citirea acestora. În schimb, voi vorbi despre principalele lucruri (comenzi, tehnici și principii) pe care trebuie să le înțelegeți încă de la începutul lucrului în shell-ul Unix pentru ca munca să fie eficientă și plăcută.

Articolul se referă la medii de tip Unix cu drepturi depline, cu un shell complet funcțional (de preferință zsh sau bash) și o gamă destul de largă de programe standard.

Ce este coaja

Shell (shell, alias „linia de comandă”, alias CLI, alias „consolă”, alias „terminal”, alias „fereastră neagră cu litere albe”) este interfață text comunicare cu sistem de operare(Ei bine, strict vorbind, acesta este program, care oferă o astfel de interfață, dar acum această diferență este nesemnificativă).

În general, lucrul printr-un shell arată astfel: utilizatorul (adică tu) introduce o comandă de la tastatură, apasă Enter, sistemul execută comanda, scrie rezultatul execuției pe ecran și așteaptă din nou intrarea următoarea comandă.

Vedere tipică shella:

Shell-ul este modalitatea principală de a interacționa cu toate sistemele de server asemănătoare Unix.

Unde se găsesc sistemele de linie de comandă?

Acolo unde te-ar putea aștepta un shell Unix, opțiuni populare:
  • MacOS (bash);
  • acces de la distanță la server pentru muncă sau pentru un proiect web personal;
  • server de fișiere de acasă cu acces de la distanță;
  • Ubuntu, PC-BSD pe laptop/desktop - sistemele asemănătoare Unix astăzi sunt ușor de instalat și utilizat.

Ce probleme sunt rezonabile de rezolvat cu un shell?

Sarcini naturale pentru care coaja este potrivită, utilă și indispensabilă:
  • lucru interactiv în terminal:
    • realizarea de compilare, rularea joburilor prin make;
    • compararea fișierelor text;
    • analiza rapidă ad-hoc a datelor (număr de IP-uri unice în jurnal, distribuția înregistrărilor pe ore/minute etc.);
    • acțiuni în masă unice (omorâți multe procese; dacă lucrați cu un sistem de control al versiunilor, inversați sau rezolvați o grămadă de fișiere);
    • diagnosticarea a ceea ce se întâmplă în sistem (semafore, încuietori, procese, descriptori, spațiu pe disc etc.);
  • scripting:
    • scripturi de instalare, pentru care nu vă puteți baza pe prezența altor interpreți - aceasta nu este pentru începători;
    • funcțiile pentru personalizarea shell-ului interactiv (afectarea invitației, schimbarea directorului, setarea variabilelor de mediu) nu sunt, de asemenea, tocmai pentru începători;
    • scripturi unice, cum ar fi recodificarea în masă a fișierelor;
    • makefiles.

Absolut primii pași

Să începem: conectați-vă și deconectați-vă

Asigurați-vă că știți exact cum să porniți shell-ul și cum să ieșiți din el.

Dacă lucrați pe o mașină cu Ubuntu instalat, trebuie să lansați programul Terminal. Când ați terminat, puteți pur și simplu să închideți fereastra.

Pe MacOS - lansați și Terminalul.

A accesa server la distanta- utilizați ssh (dacă aveți MacOS, Ubuntu sau alt sistem asemănător Unix la nivel local) sau putty (dacă aveți Windows).

Cine sunt eu, unde sunt?

Rulați următoarele comenzi:
  • hostname - afișează numele mașinii (serverului) pe care vă aflați în prezent;
  • whoami - afișează datele de conectare (numele tău în sistem);
  • tree -d / |less - reprezentare pseudografică a arborelui de directoare pe mașină; ieșire din defilare - q ;
  • pwd - afișează directorul în care vă aflați în prezent; pe linia de comandă nu poți fi „doar așa”, trebuie să fii într-un director (=director curent, director de lucru). Directorul de lucru curent este probabil afișat în promptul dvs.
  • ls - lista de fișiere din directorul curent; ls /home - listă de fișiere din directorul specificat;

Istoricul comenzilor (istoric)

O proprietate importantă a unei linii de comandă cu drepturi depline este istoricul comenzilor.

Rulați mai multe comenzi: hostname, ls, pwd, whoami. Acum apăsați tasta sus. Comanda anterioară apare în linia de introducere. Puteți utiliza tastele sus și jos pentru a vă deplasa înainte și înapoi prin istoric. Când ajungeți la numele gazdă, apăsați Enter - comanda va fi executată din nou.

Comenzile din istoric nu pot fi doar executate în mod repetat, ci și editate. Derulați istoricul la comanda ls, adăugați comutatorul -l la ea (se dovedește ls -l , există un spațiu înainte de minus, dar nu după). Apăsați Enter - comanda modificată va fi executată.

Derularea istoricului, editarea și re-executarea comenzilor sunt cele mai frecvente acțiuni atunci când lucrați pe linia de comandă, așa că obișnuiți-vă.

Copiaza si lipeste

Linia de comandă este foarte centrată pe text: comenzile sunt text, datele de intrare pentru majoritatea programelor standard sunt text, iar rezultatul este cel mai adesea text.

Lucrul grozav despre text este că poate fi copiat și lipit, iar acest lucru este valabil și pe linia de comandă.

Încercați data comenzii +"%y-%m-%d, %A"
L-ai introdus integral manual sau ai copiat-o din articol? Asigurați-vă că îl puteți copia, îl puteți lipi într-un terminal și îl puteți executa.

Odată ce ați învățat cum să utilizați man, asigurați-vă că puteți copia și rula exemple de comenzi din ajutor. Pentru a verifica, căutați secțiunea EXEMPLE din ajutorul programului de date, copiați și rulați primul exemplu dat (doar în cazul în care: semnul dolar nu face parte din comandă, aceasta este o imagine simbolică a unui prompt de intrare).

Cum să copiați exact textul de pe terminal și să-l lipiți în terminal depinde de sistemul dvs. și de setările acestuia, așa că dați instrucțiuni universale, din păcate, nu va funcționa. Pe Ubuntu, încercați acest lucru: copiați - doar selectați cu mouse-ul, lipiți - butonul din mijloc al mouse-ului. Dacă nu funcționează sau dacă aveți un alt sistem, căutați pe Internet sau întrebați prietenii mai experimentați.

Chei și opțiuni

Pe măsură ce ați explorat istoricul comenzilor, ați întâlnit deja că comanda ls are cel puțin două opțiuni. Dacă îl numiți așa, va scoate o listă simplă:

Akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Dacă adăugați comutatorul -l, informații detaliate sunt afișate pentru fiecare fișier:

Akira@latitude-e7240: ~/shell-survival-quide> ls -l total 332 -rw-rw-r-- 1 akira akira 198 feb 13 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 feb. 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 Feb 13 11 :45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Aceasta este o situație foarte tipică: dacă adăugați modificatori speciali (taste, opțiuni, parametri) la un apel de comandă, comportamentul comenzii se schimbă. Comparați: arbore / și arbore -d / , nume de gazdă și nume de gazdă -f .

În plus, comenzile pot lua nume de fișiere, nume de directoare sau pur și simplu șiruri de text. Încerca:

Ls -ld /home ls -l /home grep root /etc/passwd

om

man - Ajutor cu comenzile și programele disponibile pe mașina dvs., precum și cu apelurile de sistem și cu biblioteca standard C.

Încercați: man grep , man atoi , man chdir , man man .

Derularea înainte și înapoi se face cu butoanele „sus”, „jos”, „PageUp”, „PageDown”, ieșirea din vizualizarea de ajutor se face cu butonul q. Căutare text specificîn articolul de ajutor: apăsați / (forward slash), introduceți text pentru a căuta, apăsați Enter. Treceți la următoarele apariții - tasta n.

Toate articolele de referință sunt împărțite în categorii. Cel mai important:

Este necesar să se indice din ce categorie trebuie prezentat certificatul în cazurile de coincidență de nume. De exemplu, man 3 printf descrie funcția de la bibliotecă standard C, iar man 1 printf este un program de consolă cu același nume.

Puteți vizualiza o listă cu toate articolele de ajutor disponibile pe computer folosind comanda man -k. (punctul face și parte din komada).

Mai puțin

Când vă aflați într-o fereastră de terminal mică, trebuie să vedeți foarte text lung(conținutul unui fișier, un om lung etc.), folosesc programe speciale „pagină” (de la cuvântul pagină, adică page flippers). Cel mai popular scroller este mai puțin și este ceea ce vă oferă defilarea atunci când citiți paginile de manual.

Încercați să comparați comportamentul:

Cat /etc/bash.bashrc cat /etc/bash.bashrc |mai putin

Puteți transfera fișierul în pager direct în parametrii:

Mai puțin /etc/bash.bashrc

Derulare în sus și în jos - butoanele „sus”, „jos”, „PageUp”, „PageDown”, ieșire - butonul q. Căutați un anumit text: apăsați / (forward slash), introduceți textul de căutat, apăsați Enter. Treceți la următoarele apariții - tasta n. (Recunoașteți instrucțiunile despre om? Nu e de mirare, mai puțin este folosit și pentru a afișa ajutor.)

Drepturi

Orice fișier sau director este asociat cu un set de „drepturi”: dreptul de a citi fișierul, dreptul de a scrie în fișier, dreptul de a executa fișierul. Toți utilizatorii sunt împărțiți în trei categorii: proprietarul fișierului, grupul proprietarului fișierului și toți ceilalți utilizatori.

Puteți vizualiza permisiunile fișierelor folosind ls -l . De exemplu:

> ls -l Makefile -rw-r--r-- 1 akira student 198 Feb 13 11:48 Makefile
Această ieșire înseamnă că proprietarul (akira) poate citi și scrie fișierul, grupul (studenții) poate doar să citească și toți ceilalți utilizatori pot citi doar.

Dacă primiți un mesaj cu permisiunea refuzată în timp ce lucrați, aceasta înseamnă că nu aveți suficiente drepturi asupra obiectului cu care doriți să lucrați.

Citiți mai multe în man chmod.

STDIN, STDOUT, transportoare (tevi)

Există 3 fluxuri de date standard asociate fiecărui program în execuție: flux de date de intrare STDIN, flux de date de ieșire STDOUT, flux de ieșire de erori STDERR.

Rulați programul wc, introduceți textul Good day today, apăsați Enter, introduceți textul Good day, apăsați Enter, apăsați Ctrl+d. Programul wc va afișa statistici privind numărul de litere, cuvinte și rânduri din textul dvs. și se va termina:

> Wc ziua bună astăzi ziua bună 2 5 24
În acest caz, ați furnizat un text de două rânduri la STDIN-ul programului și ați primit trei numere în STDOUT.

Acum rulați comanda head -n3 /etc/passwd , ar trebui să arate cam așa:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
În acest caz, programul principal nu a citit nimic din STDIN, ci a scris trei rânduri către STDOUT.

Vă puteți imagina astfel: programul este o conductă în care curge STDIN și STDOUT curge afară.

Cea mai importantă proprietate a liniei de comandă Unix este că programele „pipe” pot fi conectate între ele: ieșirea (STDOUT) a unui program poate fi transmisă ca date de intrare (STDIN) unui alt program.

O astfel de construcție a programelor conectate se numește conductă în engleză sau transportor sau conductă în rusă.

Combinarea programelor într-o conductă se face cu simbolul | (bară verticală)

Rulați comanda head -n3 /etc/passwd |wc , va arăta cam așa:

> head -n3 /etc/passwd |wc 3 3 117
Iată ce s-a întâmplat: programul cap a scos trei linii de text în STDOUT, care au mers imediat la intrarea programului wc, care la rândul său a numărat numărul de caractere, cuvinte și linii din textul rezultat.

Puteți combina câte programe doriți într-o conductă. De exemplu, puteți adăuga un alt program wc la conducta anterioară, care va număra câte cuvinte și litere au fost în rezultatul primului wc:

> head -n3 /etc/passwd |wc |wc 1 3 24

Crearea conductelor (pipe) este o sarcină foarte comună atunci când lucrați pe linia de comandă. Pentru un exemplu despre cum se face acest lucru în practică, citiți secțiunea „Crearea unei conducte cu o singură linie”.

Redirecționare I/O

Ieșirea (STDOUT) a unui program nu poate fi doar transferată într-un alt program printr-o conductă, ci și pur și simplu scrisă într-un fișier. Această redirecționare se face folosind > (mai mare decât semnul):

Data > /tmp/today.txt
Ca urmare a executării acestei comenzi, fișierul /tmp/today.txt va apărea pe disc. Vizualizați conținutul acestuia folosind cat /tmp/today.txt

Dacă un fișier cu același nume exista deja, conținutul său vechi va fi distrus. Dacă fișierul nu a existat, acesta va fi creat. Directorul în care este creat fișierul trebuie să existe înainte ca comanda să fie executată.

Dacă nu doriți să suprascrieți un fișier, ci mai degrabă să adăugați rezultate la sfârșitul acestuia, utilizați >> :

Data >> /tmp/today.txt
Verificați ce este acum scris în fișier.

În plus, puteți trece orice fișier programului în loc de STDIN. Încerca:

WC

Ce să faci când ceva nu este clar

Dacă întâmpinați un comportament de sistem pe care nu îl înțelegeți sau doriți să obțineți un anumit rezultat, dar nu știți cum, vă sfătuiesc să procedați în următoarea ordine (apropo, acest lucru se aplică nu numai shell-urilor):
  • Cât mai clar posibil, formulați întrebarea sau sarcina - nu este nimic mai dificil decât rezolvarea „ceva ce nu știu”;
  • amintiți-vă dacă ați întâmpinat deja aceeași problemă sau o problemă similară - în acest caz, merită să încercați soluția care a funcționat ultima dată;
  • citiți paginile de manual corespunzătoare (dacă înțelegeți ce pagini de manual sunt potrivite în cazul dvs.) - poate veți găsi exemple potrivite de utilizare a comenzilor, opțiunile necesare sau link-uri către alte comenzi;
  • gândește-te: este posibil să schimbi puțin sarcina? - poate, modificand putin conditiile, vei ajunge la o problema pe care deja stii sa o rezolvi;
  • pune întrebarea ta clar formulată într-un motor de căutare - poate că răspunsul poate fi găsit pe Stack Overflow sau pe alte site-uri;
Dacă niciuna dintre cele de mai sus nu ajută, cereți sfatul unui profesor, un coleg cu experiență sau un prieten. Și nu vă fie teamă să puneți întrebări „prostice” - nu este păcat să nu știți, este păcat să nu întrebați.

Dacă rezolvi o problemă dificilă (pe cont propriu, cu ajutorul internetului sau al altor persoane), notează-ți soluția în cazul în care aceeași problemă apare din nou pentru tine sau prietenii tăi. Îl poți înregistra într-un fișier text simplu, în Evernote sau îl poți publica pe rețelele sociale.

Metode de lucru

Copiaza si lipeste- din paginile de manual, din articolele de pe StackOverflow etc. Linia de comandă este formată din text, profitați de acest lucru: copiați și folosiți comenzi exemple, notați descoperirile de succes ca amintire, publicați-le pe Twitter și bloguri.

Trageți comanda anterioară din istoric, adăugați o altă comandă la conductă, rulați, repetați.Cm. Consultați și secțiunea „Crearea unei conducte cu o singură linie”.

Comenzi de bază

  • schimba in alt director: cd ;
  • vizualizarea conținutului fișierelor: pisică, mai puțin, cap, coadă;
  • manipulare fișiere: cp, mv, rm;
  • vizualizarea conținutului directorului: ls , ls -l , ls -lS ;
  • Structura directorului: arbore , arbore -d (directorul poate fi trecut ca parametru);
  • căutați fișiere: găsiți . -Nume ... ;

Analytics

  • wc, wc -l;
  • sort -k - sortează după câmpul specificat;
  • sort -n - sortare numerică;
  • diff - comparare fișiere;
  • grep , grep -v , grep -w , grep "\ " , grep -E - căutare text;
  • uniq , uniq -c - unicizarea șirurilor de caractere;
  • awk - în opțiunea awk „(printează $1)”, pentru a lăsa doar primul câmp din fiecare linie, $1 poate fi schimbat în $2, $3 etc.;

Diagnosticarea sistemului

  • ps axuww - informații despre procesele (programe care rulează) care rulează pe mașină;
  • top - vizualizare interactivă a proceselor cu cele mai mari resurse;
  • df - spațiu pe disc folosit și liber;
  • du - dimensiunea totală a fișierelor din director (recursiv cu subdirectoare);
  • strace , ktrace - ce numește sistemul face procesul;
  • lsof - ce fișiere folosește procesul;
  • netstat -na, netstat -nap - care porturi și socluri sunt deschise în sistem.

Este posibil să nu aveți unele programe; acestea trebuie să fie instalate suplimentar. În plus, unele opțiuni ale acestor programe sunt disponibile numai pentru utilizatorii privilegiați (root).

Execuție în vrac și semi-automată

La început, săriți peste această secțiune; veți avea nevoie de aceste comenzi și construcții atunci când ajungeți la scripting shell simplu.
  • testare - verificarea conditiilor;
  • while citire - bucla linie cu linie STDIN ;
  • xargs - înlocuirea șirurilor de caractere din STDIN în parametrii programului specificat;
  • seq - generarea de secvențe de numere naturale;
  • () - combina iesirea mai multor comenzi;
  • ; - faceți un lucru după altul;
  • && - se execută dacă prima comandă se finalizează cu succes;
  • || - executați dacă prima comandă eșuează;
  • tee - duplicați ieșirea programului în STDOUT și într-un fișier de pe disc.

Diverse

  • data - data curenta;
  • curl - descarcă un document de la adresa URL specificată și scrie rezultatul în STDOUT;
  • atingere - actualizați data modificării fișierului;
  • kill - trimite un semnal procesului;
  • adevărat - nu face nimic, returnează adevărat, util pentru organizarea buclelor eterne;
  • sudo - executați comanda ca root „a.

Crearea unei conducte cu o singură linie

Să ne uităm la un exemplu de sarcină reală: trebuie să omorâm toate procesele task-6-server care rulează ca utilizator curent.

Pasul 1.
Înțelegeți care program produce aproximativ datele necesare, chiar dacă nu în forma sa pură. Pentru sarcina noastră, merită să obțineți o listă a tuturor proceselor din sistem: ps axuww. Lansa.

Pasul 2.
Priviți cu ochii datele primite, veniți cu un filtru care va elimina unele dintre datele inutile. Acesta este adesea grep sau grep -v . Folosiți tasta „Sus” pentru a scoate comanda anterioară din istoric, alocați-i un filtru inventat și rulați-o.

Ps axuww |grep `whoami`
- numai procesele utilizatorului actual.

Pasul 3.
Repetați pasul 2 până când obțineți datele curate de care aveți nevoie.

"
- toate procesele cu numele cerut (plus, poate, altele suplimentare, cum ar fi vim task-6-server.c, etc.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v mai puțin
- numai procesele cu numele cerut

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v mai puțin |awk "(printați $2)"

Datele proceselor necesare, pasul 3 finalizat

Pasul 4.
Aplicați un manipulator final adecvat. Folosind tasta „Sus”, scoatem comanda anterioară din istoric și adăugăm procesare care va finaliza soluția problemei:

  • |wc -l pentru a număra numărul de procese;
  • >pids pentru a scrie pid-uri într-un fișier;
  • |xargs ucide -9 procese de ucidere.

Sarcini de instruire

Vrei să exersezi noi abilități? Încercați următoarele sarcini:
  • obțineți o listă cu toate fișierele și directoarele din directorul dvs. principal;
  • obțineți o listă cu toate articolele man din categoria 2 (apeluri de sistem);
  • numărați de câte ori apare cuvântul grep în pagina de manual a programului grep;
  • numără câte procese rulează în prezent ca root;
  • găsiți ce comandă apare în numărul maxim de categorii de ajutor (om);
  • numără de câte ori apare cuvântul var pe pagina ya.ru.
Sugestie: veți avea nevoie de find , grep -o , awk "(print $1)" , expresii regulate în grep , curl -s .

Ce să studiezi mai departe?

Dacă începe să-ți placă linia de comandă, nu te opri, continuă să-ți îmbunătățești abilitățile.

Iată câteva programe care vă vor fi cu siguranță utile dacă locuiți pe linia de comandă:

  • găsiți cu opțiuni complexe
  • apropo
  • localiza
  • telnet
  • netcat
  • tcpdump
  • rsync
  • ecran
  • zgrep, zless
  • visudo
  • crontab -e
  • sendmail
În plus, de-a lungul timpului merită să stăpânești un fel de limbaj de scripting, cum ar fi perl sau python, sau chiar ambele.

Cine are nevoie de asta?

Merită chiar să învățați astăzi linia de comandă și scriptul shell? Cu siguranță merită. Voi da doar câteva exemple de cerințele Facebook pentru candidații care doresc să obțină un loc de muncă la FB.