Tutorial Shell Scripting

De la Wiki.lug.ro
Salt la: navigare, căutare

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)