Tutorial Shell Scripting

De la Wiki.lug.ro
Versiunea din 28 februarie 2006 12:07, autor: Xsimio (Discuție | contribuții) (Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator))

Salt la: navigare, căutare

Bazele programarii Shell (bash)

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 pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter "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)

Operatii aritmetice

Pentru efectuarea operatiilor aritmetice este folosira comanda expr:

Sintaxa:

expr argument1 operator_matematic argument2

Operatorul matematic poate fi:

+ adunarea

- scaderea

/ impartirea

% restul impartirii

\* inmultirea

Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.

Observatii:

  • inmultirea se face folosind \* si nu *
  • executia comenzii expr se face folod\sind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:
#echo "expr 4 + 5"
#echo 'expr 4 + 5'
#echo `expr 4 + 5`

Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii expr.