Sunteți pe pagina 1din 5

ATELIER

UNIX

Bash ca limbaj de programare


tefan Tanas i Sabin Corneliu Buraga

Caracterizare

(infoiasi)$ . script [ parametri ]

Un shell reprezint un macro-procesor capabil de a executa comenzi.


Un shell Linux (UNIX) este att un interpretor de comenzi, interfa
ntre utilizator i un bogat set de comenzi i utilitare, ct i materializarea unui limbaj de programare care ofer mecanisme complexe de
operare cu sistemul. Bash este un shell (interpretor de comenzi) specific
sistemului de operare Linux, conceput sub auspiciile GNU (GNU: is
Not Unix). Numele este un acronim de la Bourne-Again Shell, dup
Steve Bourne, autorul shell-ului sh pentru UNIX, predecesorul
bash-ului. Pentru sistemele de operare Linux, shell-ul implicit este bash.
Exist mai multe versiuni de bash disponibile, n prezent cea mai utilizat pe un sistem Linux fiind bash 2.0. Ca i alte pachete de programe
GNU, bash-ul este portabil i se gsete n aproape toate versiunile de
UNIX, iar independent l putem rula n OS/2, DOS i Windows NT.
Shell-ul bash ofer o multitudine de posibiliti administratorilor i
programatorilor de sistem, posednd toate caracteristicile unui limbaj
de programare de nivel nalt. n cele ce urmeaz vom descrie o parte
dintre cele mai interesante i utile aspecte ale acestui shell.

Script-uri bash
Comenzile bash pe care dorim s le execute shell-ul pot fi stocate n
fiiere. Acestor fiiere li dau drepturi de execuie (cu comanda chmod +x
fiier), dup care pot fi executate ca orice alt comand. Fiierele
coninnd comenzi ale unui limbaj de tip script, cum este cazul
bash-ului, se mai numesc i script-uri.
De obicei, la nceputul fiecrui fiier script se stabilete shell-ul care
va fi invocat de ctre sistemul de operare pentru a se executa comenzile
i construciile bash. Pentru bash vom avea: #!/bin/bash. Pentru a executa script-urile putem utiliza urmtoarele modaliti de apelare:

Execuia script-urilor bash


Utilizator

(infoiasi)$ ./script [ parametri ]


(infoiasi)$ bash script [ parametri ]

Parametrii pot s lipseasc, dac script-ul dorit a fi rulat se poate apela


i fr acetia. Comentariile se introduc prin simbolul # i sunt valabile pn la sfritul liniei (din acest punct de vedere sunt similare comentariilor // din C++ sau Java).
n cele ce urmeaz vom vedea c shell-ul bash ofer toate construciile unui limbaj de programare de nivel nalt, punnd la dispoziia
administratorilor de sistem un bogat set de faciliti.

Variabile
Deseori am dori ca anumite rezultate s le stocm temporar n memorie
pentru prelucrri ulterioare. Acest lucru poate fi realizat fie cu ajutorul
unor fiiere temporare (soluie ineficient, consumatoare de resurse ale
sistemului), fie prin intermediul variabilelor puse la dispoziie de shell.
Pentru shell-ul bash, toate variabilele sunt de tip ir de caractere, ele fiind
create din zbor. Pentru a vizualiza toate variabilele definite i valorile
corespunztoare acestora trebuie utilizat comanda set. Iniializarea
unei variabile se realizeaz cu operatorul = (acest operator nu trebuie s
fie precedat sau succedat de spaii): variabila=valoare. Numele variabilei trebuie precedat de simbolul $ atunci cnd referim valoarea respectivei variabile. Pentru bash, avem la dispoziie i comanda intern
let pentru a realiza atribuiri de valori unei variabile. Sunt acceptai i
operatorii +=, -= etc. prezeni n C ori Perl. De asemenea, shell-ul bash
pune la dispoziie un bogat set de faciliti pentru evaluri matematice
utiliznd numere ntregi (n alte shell-uri posibile doar cu ajutorul
comenzii expr). Astfel, pentru a evalua o expresie vom scrie acea expresie ntre paranteze rotunde duble precedate de caracterul $. Pentru efectuarea de calcule fracionare se poate utiliza comanda bc. Afiarea
coninutului unei variabile se poate realiza cu ajutorul comenzii echo.
(infoiasi)$ a = 10
bash: a: command not found

Execuie

Depanare

(infoiasi)$ a=10
(infoiasi)$ echo $a
10

Script bash

(infoiasi)$ v="-o cgi-bin"


Variabile
predefinite

Pasarea variabilelor
spre script

Forme speciale
ale variabilelor

(infoiasi)$ ls $v
total 4
-rwxr-xr-x

Controlul fluxului
Comparaii

Operaii
cu fiiere

1 user

99 Nov 27 18:42 form.cgi

(infoiasi)$ echo $((12 + 21/3))


19
Operaii
matematice

(infoiasi)$ v=15 ; z=4


(infoiasi)$ echo $((5 - $v % $z))
2
(infoiasi)$ echo `expr 3 - 1`

Comenzi
UNIX/Linux

Comenzi bash
interne

Ieire

28 NET REPORT aprilie 2002

Pentru ca echo s nu treac automat la rnd nou dup afiarea valorilor


se va utiliza opiunea -n. Opiunea -e permite utilizarea codurilor
escape (cele introduse de backslash). Aceste coduri escape (similare celor
prezente n limbajele C sau Perl) sunt:

ATELIER
UNIX
\a emite un sunet (alarm).
\b deplazeaz cursorul cu o poziie spre stnga (backspace).
\f trece cursorul pe rndul urmtor, rmnnd pe aceeai coloan.
\n trece cursorul pe prima poziie de pe linia urmtoare.
\r mut cursorul la nceputul liniei curente.
\t insereaz un caracter tab.
\nnn insereaz caracterul care are codul ASCII nnn (poate avea una,
dou sau trei cifre), n octal.
\xnnn insereaz caracterul care are codul ASCII nnn (poate avea una,
dou sau trei cifre), cod dat n hexa.
O comand nrudit este printf (foarte asemntoare ca funcionalitate cu funcia printf() din C). Atunci cnd dorim dup o variabil
s afim imediat un alt ir de caractere, numele variabilei trebuie ncadrat de acolade.
(infoiasi)$ nume=Maria

bash: nume: readonly variable


(infoiasi)$ unset nume
bash: unset: nume: cannot unset: readonly variable

Pentru ca o variabil s aib valoarea disponibil proceselor copil (e.g.


sub-shell-uri) ale shell-ului curent, va trebui exportat cu ajutorul
comenzii export:
export nume TERM PS1

n mod normal, variabilele nu sunt vizibile n procesele copil ale


shell-ului, ele fiind considerate locale procesului shell respectiv.
Atribuirea de valori unei variabile poate fi o atribuire condiionat.
Construcia ${var:-sir}, unde var este numele unei variabile, iar sir
este un ir de caractere, se evalueaz la valoarea variabilei var dac
aceasta este definit, iar n caz contrar la irul specificat.

(infoiasi)$ echo Ana$nume


AnaMaria

(infoiasi)$ echo ${anotimp:-Iarna}

(infoiasi)$ echo ${nume}na

Iarna

Mariana

(infoiasi)$ echo $anotimp

(infoiasi)$ echo $numena

(infoiasi)$ anotimp="E iarna iar"

(infoiasi)$

(infoiasi)$ echo ${anotimp:-Iarna}


E iarna iar

Ultima comand afieaz coninutul variabilei vna (n cazul nostru nefiind definit n prealabil va fi considerat vid).
Dac n loc de ghilimele vom folosi apostrofuri, atunci shell-ul nu
va mai expanda valoarea variabilei:
(infoiasi)$ curs=Web
(infoiasi)$ echo "Cursul meu preferat este $curs"

(infoiasi)$ echo $anotimp


E iarna iar

Expresia ${var:=sir} se evalueaz asemntor expresiei precedente,


iar n plus n cazul n care variabila var nu este setat se iniializeaz
cu irul de caractere indicat (util pentru cazul n care dorim s asignm
o valoare implicit unei variabile, dac aceasta nu este definit).

Cursul meu preferat este Web


(infoiasi)$ echo 'Cursul meu preferat este $curs'

(infoiasi)$ unset cale

Cursul meu preferat este $curs

(infoiasi)$ echo ${cale:=/tmp}


/tmp

O variabil poate primi ca valoare rezultatul execuiei unei comenzi.


Pentru acest lucru comanda trebuie ncadrat de apostrofuri inverse:

(infoiasi)$ cale=/home/user/tmp
(infoiasi)$ echo ${cale:=/tmp}
/home/user/tmp

(infoiasi)$ v=`wc -l void.html`

(infoiasi)$ unset cale

(infoiasi)$ echo $v

(infoiasi)$ echo ${cale:=/tmp}

8 void.html

/tmp
(infoiasi)$ echo $cale

O variant identic semantic este urmtoarea (preferat n versiunea 2.0


a shell-ului bash):
(infoiasi)$ v=$(wc -l void.html)

/tmp

Dac variabila var este setat, atunci valoarea expresiei ${var:+sir}


este dat de irul specificat i valoarea variabilei nu se modific, altfel
valoarea respectivei expresii este irul vid.

Pentru a terge o variabil se poate utiliza una dintre variantele:


(infoiasi)$ unset comanda
(infoiasi)$ unset variabila

(infoiasi)$ echo ${comanda:+ls}

(infoiasi)$ variabila=

(infoiasi)$ echo $comanda


(infoiasi)$ comanda=pwd

Citirea de la tastatur a valorii unei variabile se realizeaz cu comanda


read. Comanda readonly stabilete c valorile variabilelor specificate
nu pot fi modificate (aadar, variabilele devin constante).

(infoiasi)$ echo ${comanda:+ls}


ls
(infoiasi)$ echo $comanda
pwd

(infoiasi)$ read nume


Sabin
(infoiasi)$ echo $nume
Sabin

Construcia ${var:?sir} genereaz un mesaj de eroare sir dac


variabila var nu este setat, iar n caz contrar se evalueaz la valoarea
variabilei specificate.

(infoiasi)$ nume="Sabin Corneliu"


(infoiasi)$ echo $nume

(infoiasi)$ cale=

Sabin Corneliu

(infoiasi)$ echo ${cale:?"Calea de directoare este vida."}

(infoiasi)$ readonly nume

bash: cale: Calea de directoare este vida.

(infoiasi)$ nume=Victor

(infoiasi)$ cale=/home/busaco

aprilie 2002 NET REPORT 29

ATELIER
UNIX
(infoiasi)$ echo ${cale:?"Calea de directoare este vida."}
/home/busaco

Numrul de caractere memorate ntr-o variabil var se obine n urma


evalurii expresiei ${#var}.
(infoiasi)$ un_autor="Sabin Corneliu Buraga"
(infoiasi)$ echo ${#un_autor}
21

Variabile predefinite
n cadrul shell-ulului avem acces la un numr de variabile predefinite,
cele mai semnificative dintre acestea regsindu-se n tabelul Variabile
(prin convenie, variabilele predefinite ale sistemului au numele dat cu
majuscule).
Cteva exemple:
(infoiasi)$ echo $BASH_VERSION
2.04.11(1)-release
(infoiasi)$ echo $MACHTYPE
i386-redhat-linux-gnu

$0 conine numele script-ului;


$1, $2, ..., $9 reprezint parametrii din linia de comand ($1 conine
primul parametru, $2 al doilea etc.);
$* furnizeaz lista tuturor parametrilor din linia de comand;
$@ similar cu $*, dar parametrii sunt considerai elemente separate;
$# desemneaz numrul parametrilor din linia de comand;
$$ furnizeaz PID-ul procesului curent (aceast variabil se poate
folosi pentru a crea fiiere temporare cu nume unic, de exemplu avnd
numele /tmp/nume$$);
$? conine codul ntors de ultima comand executat (zero, semnificnd true, sau un numr pozitiv desemnnd valoarea logic false);
$! furnizeaz PID-ul ultimului proces executat n fundal;
$- desemneaz opiunile cu care a fost lansat shell-ul respectiv.
n cazul n care avem mai mult de nou parametri n linia de comand, pentru a putea avea acces la valorile tuturor parametrilor, vom
utiliza comanda shift. Aceasta realizeaz o deplasare a elementelor listei de parametri n sensul urmtor: valoarea lui $1 se pierde i primete
valoarea lui $2, $2 ia valoarea lui $3 i aa mai departe, iar $9 va lua valoarea parametrului urmtor celui referit de $9 nainte.
Pentru a observa cum lucreaz cteva din variabilele speciale de mai
sus vom considera fiierul cmd:

(infoiasi)$ echo $MAIL


/var/spool/mail/stanasa

#!/bin/bash

(infoiasi)$ echo $HOME

echo "Numele scriptului: $0"

/home/stanasa

echo "Parametri: $*"

(infoiasi)$ echo $TERM

echo "Numarul de parametri: $#"

linux

echo "PID: $$"

(infoiasi)$ echo $RANDOM

Apoi considerm urmtoarele execuii:

21144

(infoiasi)$ . cmd Perl C Java bash


Numele scriptului: bash

Valorile variabilelor de sistem predefinite pot fi consultate prin intermediul comenzii set. De asemenea, asupra lor se pot utiliza comenzile
export, readonly sau unset.

Variabile speciale
Exist cteva variabile speciale foarte utile n script-uri:

Parametri: Perl C Java bash


Numarul de parametri: 4
PID: 926
(infoiasi)$ ./cmd Victor Stefan Sabin
Numele scriptului: ./cmd
Parametri: Victor Stefan Sabin
Numarul de parametri: 3

Variabile
Variabil

Descriere
Conine calea complet a directorului corespunztor
utilizatorului curent. n cadrul specificatorilor de fiier, $HOME
poate fi substituit de caracterul tilda ~.
Furnizeaz numele de cont al utilizatorului curent.
USER
Conine numele de cont al utilizatorului curent.
LOGNAME
Desemneaz numele serverului.
HOSTNAME
Furnizeaz tipul mainii (procesorului).
HOSTTYPE
Desemneaz tipul sistemului de operare.
OSTYPE
Descrie tipul sistemului n formatul procesor - firma
MACHTYPE
productoare - tipul sistemului de operare.
Indic shell-ul implicit.
shell
Indic fiierul care a generat aceast instan a shell-ului.
BASH
BASH_VERSION Furnizeaz versiunea bash.
Conine numele fiierului unde sunt depozitate mesajele de
MAIL
e-m
mail primite.
Desemneaz structura prompt-ului principal al shell-ului.
PS1
Reprezint prompt-ul secundar al shell-ului (apare atunci
PS2
cnd o comand este scris pe mai multe rnduri).
Furnizeaz tipul de terminal.
TERM
Conine lista de directoare utilizat de shell pentru cutarea
PATH
comenzilor (fiierelor executabile).
Furnizeaz directorul curent de lucru (cel care a fost stabilit
PWD
de comanda cd).
Conine un numr generat aleator cuprins ntre 0 i 32767.
RANDOM
Dup utilizare, valoarea variabilei se modific automat.
HOME

30 NET REPORT aprilie 2002

PID: 1465

Se observ faptul c pentru primul apel fiierul care se execut este bash
(shell-ul), care execut comenzile din fiierul cmd (numele su este parametru). A doua variant de apel aduce rezultatul scontat: cmd este
fiierul care se execut.

Instruciuni
Shell-ul bash pune la dispoziia programatorilor o serie de structuri de
test: if i case i repetitive: for, while, until.
Structura condiional if are urmtoarea sintax:
if
lista_de_comenzi_1
then
lista_de_comenzi_2
[ elif
lista_de_comenzi_3
then
lista_de_comenzi_4 ]
...
[ else
lista_de_comenzi_N ]
fi

Secvena elif poate aprea de cte ori este nevoie. Dac ultima comand din prima list de comenzi se termin cu succes (returneaz valoarea zero), se execut instruciunile care urmeaz lui then, altfel se

ATELIER
UNIX
continu cu urmtorul elif sau else. Cnd se ajunge pe o ramur elif
se execut ca i cum ar fi un alt if. n programul de mai jos (denumit
rmtemp) apare structura if:
#!/bin/bash
if
echo "Stergerea fisierului \"temp\""
rm temp 2>/dev/null
then
echo "Fisierul \"temp\" a fost sters."
else

echo "Opiune necunoscut..."


fi
done

Comenzile pot fi executate condiionat folosind operatorii && i ||:


Contrucia: comanda1 && comanda2 funcioneaz astfel: se execut
prima comand, iar dac aceasta se ncheie cu succes (returneaz codul
0) se execut i cea de-a doua comand.
Pentru comanda1 || comanda2 lucrurile decurg similar, doar c a doua
comand se execut atunci cnd prima ntoarce un cod de eroare (nenul).
Un exemplu:

echo "Fisierul \"temp\" nu a putut fi sters."


fi

(infoiasi)$ gcc gaen.c -o gaend -O2 && strip gaend

Comanda rm terge fiierul temp dac exist i poate fi ters (e.g. utilizatorul care apeleaz script-ul are drepturile necesare), altfel afieaz
un mesaj de eroare (mesajul nu apare pe ecran ntruct ieirea standard
de eroare este redirectat la /dev/null).
Sintaxa structurii condiionale case este cea de mai jos:

Structura for are urmtoarea sintax:


for var [ in text ]
do
lista_de_comenzi
done

case expresie in
[ sir_de_valori_1 ")" lista_de_comenzi_1 ";;" ]
...
[ sir_de_valori_N ")" lista_de_comenzi_N ";;" ]
esac

Mai nti se evalueaz expresia dup care se ncerc o potrivire cu una


din valorile din irurile specificate. Dac s-a gsit o potrivire (acesta va
fi prima n ordinea definirii valorilor) se va executa lista de comenzi
corespunztoare, dup care structura case se va termina. Cuvntul esac
este oglinditul lui case i termin o construcie case.
Drept exemplu, considerm c fiierul opt are urmtorul coninut:

case $1 in
-* )
stop|start )

do
finger $U >> lista_utilizatori
done

echo "S-a detectat o optiune valida";;


echo "S-a detectat o optiune" ;;

while

echo "S-a detectat un parametru valid" ;;

?* )

echo "S-a detectat un parametru" ;;

echo "Mod de utilizare: $0 param" ;;

for U in `who | cut -c1-8`

Dup cum am vzut, n bash n locul construciei `who | cut -c1-8`


putem scrie $( who | cut -c1-8 ).
Sintaxa structurii repetitive while este furnizat n continuare:

#!/bin/bash
-a|-[fx-z] )

Variabila var va lua succesiv valori din textul specificat (cte o linie).
Dac textul lipsete variabila va lua ca valori parametri transmii n linia
de comand.
Programul de mai jos va genera un fiier coninnd informaii despre fiecare utilizator conectat:

lista_de_comenzi_1
do
lista_de_comenzi_2

esac

done

Pentru delimitarea mai multor valori se utilizeaz caracterul |. Pot


apare wildcard-uri (* va ine loc de zero sau multe caractere, iar ? va
ine locul unui singur caracter). Primul ir este echivalent cu -a|-f|x|-y|-z. Al doilea va selecta toate cuvintele care ncep cu caracterul -.
Construcia ?* va accepta toate cuvintele nevide (semnul de ntrebare
cere existena unui caracter).
Pentru a iei forat dintr-un script sau dintr-o funcie definit de
utilizator (vezi mai jos) vom utiliza comanda return urmat de un cod
de stare. Comanda exit va determina prsirea shell-ului curent.
O alt comand util este select care permite realizarea de interaciuni n mod text. Urmtorul exemplu d posibilitatea utilizatorului
s aleag ntre dou opiuni:

Se execut prima list de comenzi. Dac ultima comand din prima list
se ncheie cu succes (returneaz un cod de eroare nul), atunci se execut i
a doua list dup care se reia bucla, altfel se iese din structura repetitiv.
Urmtorul script va simula execuia comenzii cat:
while read -r linie
do
echo "$linie"
done

Pentru a iei forat dintr-un ciclu repetitiv se poate folosi break, iar
pentru a trece direct la urmtoarea iteraie se va utiliza continue, ca n
limbajele C sau Java. Un exemplu:

OPTIUNI="Salutari Iesire"
select opt in $OPTIUNI; do
if [ $opt = "Iesire" ]; then
echo "Am terminat..."

for dir in $PATH; do


test -z "$dir" && dir=.
if test -f $dir/tail; then

exit

tail="$dir/tail"

elif [ $opt = "Salutari" ]; then


echo "Salut! Ce mai facei?"
else # nici una din optiuni
clear # stergem ecranul

break
fi
done
echo "Am gasit comanda tail: $tail"

aprilie 2002 NET REPORT 31

ATELIER
UNIX
Comanda test

Script-uri sistem

Bash-ul permite utilizarea expresiilor condiionale prin intermediul


comenzii test. Aceasta are o form scurt n care lipsete numele
comenzii, iar condiia este ncadrat de parantezele drepte []. Cu ajutorul lui test se pot efectua comparaii aritmetice i asupra unor
irurilor de caractere, precum i teste asupra fiierelor. Pentru a testa diverse condiii, vom utiliza urmtoarele:
teste privitoare la fiiere
-a fiier - true dac fiierul exist.
-d fiier - true dac este director.
-e fiier - true dac fiierul exist.
-f fiier - true dac fiierul exist i este un fiier obinuit.
-g fiier - true dac fiierul exist i aparine grupului.
-h fiier - true dac fiierul exist i este o legtur simbolic.
-p fiier - true dac fiierul exist i este de tip pipe.
-r fiier - true dac fiierul exist i poate fi citit.
-s fiier - true dac fiierul exist i are dimensiunea nenul.
-w fiier - true dac fiierul exist i poate fi modificat.
-x fiier - true dac fiierul exist i este executabil.
teste referitoare la variabile
-z variabil - true dac variabila este nesetat (sau conine un ir
vid de caractere).
[-n] variabil - true dac variabila este setat.
teste privitoare la iruri de caractere i numere
ir1 == ir2 - true dac irul de caractere 1 coincide cu irul 2; se
poate utiliza un singur egal.
ir1 != ir2 - true dac cele dou iruri sunt diferite.
ir1 < ir2 - true dac irul 1 este naintea irului 2 n ordinea
lexicografic.
ir1 > ir2 - true dac irul 1 este dup irul 2 n ordinea
lexicografic.
arg1 OP arg2, unde OP poate fi: -eq, -ne, -lt, -le, -gt sau -ge true dac operatorii aritmetici binari returneaz true; acetia au
semnificaiile de egal, diferit, mai mic, mai mic egal, mai mare i
respectiv mai mare egal, iar arg1 i arg2 pot fi numere pozitive
sau negative.
De menionat faptul c n bash valoarea de adevr true este echivalent cu 0, iar valoarea logic false este dat de un numr nenul.
Exemplul urmtor listeaz directoarele din directorul curent:
#!/bin/bash
for director in * # variabila va lua ca valori numele
do

n continuare vom prezenta o serie de fiiere de comenzi bash speciale,


utilizate ndeosebi la configurarea sesiunii de lucru. Shell-ul permite ca
fiecare utilizator s poat scrie un script care s fie executat la fiecare nceput de sesiune de lucru n sistem. Acest fiier rezid n directorul
home (indicat dup cum am vzut de variabila sistem HOME) al utilizatorului i poate fi regsit sub numele de .bash_profile sau .profile.
n cadrul acestui fiier se pot defini alias-urile comenzilor folosite
frecvent, se pot stabili diferite valori ale variabilelor de mediu (e.g. TERM
ori PS1) sau se pot executa diverse comenzi (de exemplu, s se afieze
cu echo un mesaj de bun venit sau data curent). n plus, fiecare utilizator poate avea un script care va fi rulat la momentul prsirii sesiunii, acest fiier purtnd numele .bash_logout i fiind localizat tot n directorul home al acelui utilizator.
Administratorul sistemului poate pregti diferite fiiere de iniializare, valabile pentru toi utilizatorii. Aceste fiiere script sunt stocate n
directorul /etc. De exemplu, /etc/profile care va fi executat la oricare
deschidere a unei noi sesiuni de lucru a fiecrui utilizator. La crearea
unui cont, n directorul home al utilizatorului proaspt creat vor fi plasate
copii ale fiierelor .bash_profile i .bash_logout regsite n directorul
/etc/skel, utilizatorul putndu-le ulterior modifica dup dorin.
Un exemplu de script .bash_profile standard poate fi:
# .bash_profile
# incarcam alias-urile si functiile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# modificam mediul
PATH=$PATH:$HOME/bin
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASH_ENV PATH

Ori de cte ori este lansat un proces shell interactiv, va fi lansat mai nti
fiierul script /etc/bashrc, apoi $HOME/.bashrc. De altfel, n orice sistem UNIX (Linux) prin convenie orice nume de fiier terminat n rc
(de la run commands) desemneaz un fiier script de configurare. Spre
exemplu, script-urile de configurare a serviciilor sistem rulate la iniializarea sistemului de operare se gsesc n directorul /etc/rc.d/init.d.
ntr-un fiier .bashrc se pot defini alias-uri i se pot stabili diverse valori ale unor variabile de sistem:

# tuturor fiierelor din directorul curent


if [ -d $director ]

# .bashrc

then

alias h='history'

# afiseaza numele directorului

echo $director
fi
done

alias j="jobs -l"


alias l="ls -l"
alias f=finger
# modificam tipul de terminal

Resurse bibliografice
! M.Budiu, Articolele publicate n NET Report:
http://www.cs.cmu.edu/~mihaib/articles/articles.html

! S. Buraga, G. Ciobanu, Atelier de programare n reele de


calculatoare, Editura Polirom, Iai, 2001: http://www.infoiasi.ro/~lrc/

! C. Ramey, B. Fox, Bash Reference Manual, Free Software


Foundation, 1998
! R. Sage, UNIX pentru profesioniti, Editura de Vest, Timioara,
1993
! * * *, The Linux Documentation Project:
http://metalab.unc.edu/LDP/

32 NET REPORT aprilie 2002

TERM=vt100
# schimbam prompt-ul
# \h - numele masinii
# \u - numele utilizatorului
# \w - directorul de lucru (curent)
PS1="\h (\u): \w>"
export TERM PS1

Pentru fiecare utilizator, mai exist un fiier, denumit .bash_history


care este stocat n directorul home i care pstreaz ultimele comenzi
executate de utilizator.
Autorii sunt cadre didactice la Facultatea de Informatic, Universitatea
Al.I.Cuza din Iai, putnd fi contactai prin e-mail la
stanasa@infoiasi.ro i busaco@infoiasi.ro. n 98