Tutorial Shell Scripting
Cuprins
Cum scriem scripturi shell
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:
- folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:
#!/bin/bash
- dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:
chmod permisiuni script Exemplu: # chmod +x scriptul-meu # chmod 755 scriptul-meu
- executarea scriptului dupa cum urmeaza:
Sintaxa bash scriptul-meu sh scriptul-meu ./scriptul-meu Exemple # bash scriptul-meu # sh scriptul-meu # ./scriptul-meu
Acum suntem pregatiti sa scriem primul script shell care va afisa "Acesta este primul meu script". Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:
# touch scriptul-meu.sh # mcedit scriptul-meu.sh
#!/bin/bash clear echo "Acesta este primul meu script"
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:
# ./scriptul-meu.sh
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:
# chmod +x scriptul-meu.sh
Acest script va sterge ecranul si va afisa apoi pe acesta "Acesta este primul meu script" Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.
Exercitiu. Scrieti si executati urmatorul script:
#!/bin/bash clear echo "Buna $USER" echo "Astazi este"; date echo "Numarul userilor logati este"; who | wc -l echo "Calendarul este" cal
Variabilele in Shell
In shell scripting exista doua tipuri de variabile:
- Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;
- Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:
# set
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:
# echo $USER # echo $HOME
Cum sa utilizam variabilele definite de utilizator
Sintaxa numele_variabilei=valoare
Urmatoarea atribuire este corecta:
# numar=10
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.
# 10=numar
Salvati si executati urmatorul script
#!/bin/bash clear numar=10 echo $numar
Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)
- Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un "underscore" (_) urmat de cel putin un caracter alfanumeric.
Exemple HOME SYSTEM_VERSION vehicul numar
- Nu folosite spatii in nici una din partile semnului egal.
Urmatoarea atribuire este corecta:
numar=10
Urmatoarele atribuiri sunt insa incorecte:
numar =10 numar= 10 numar = 10
- Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:
no=10 No=11 NO=20 nO=2
- Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:
vehicul= vehicul=""
Cum afisam si accesam variabilele definite de utilizator
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:
Sintaxa: $numele_variabilei
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:
# vehicul=autobuz # numar=10
Pentru afisarea variabilelor se va folosi:
# echo $vehicul # echo $numar
Pentru afisarea valorii variabilei vehicul nu folositi echo vehicul deoarece va afisa cuvantul vehicul si nu continutul acestei variabile.
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.
#!/bin/bash numele_meu=ADI sistemul_meu = DEBIAN numarul_meu=10 echo "Numele meu este $numele_meu" echo "Sistemul meu este $sistemul_meu" echo "Numarul meu este numarul_meu, poti vedea acest numar?"
Comanda echo
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.
Sintaxa generala a comenzii este:
#echo [optiuni] [insiruire de caractere, variabile...]
Optiunile folosite sunt urmatoarele:
-e activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza
-E dezactiveaza interpretarea acestuia
\\ afiseaza caracterul backslash in sine
\a efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)
\b are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat
\c sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui "\c"
\n face trecerea la o linie noua
\r are efectul apasarii tastei enter
\t afiseaza caracterul tab (invizibil)