Documente Academic
Documente Profesional
Documente Cultură
Shell in UNIX
2.4.1.Tipuri de shell
2.4.2. Fisiere de configurare
2.4.3. Shell-ul ca program
2.4.4. Shell-ul ca proces
2.4.5. Shell-ul ca limbaj de comanda
2.4.6. Shell-ul ca limbaj de programare
2.4.7. Transferul fisierelor pe /de pe server
Conf.dr.Carmen Timofte
Sisteme de operare
2.4.1.Tipuri de shell
bash Bourne Again Shell - conceput sub auspiciile GNU. Denumirea este un acronim de la
Bourne-Again Shell, dup numele lui Steve Bourne, autorul shell-ului sh pentru UNIX,
predecesorul bash-ului; prompt: $, # ;
bsh - Bourne Shell - in care este prezentat interpreterului de comenzi Shell; este varianta
clasic, in care sunt scrise majoritatea fiierelor de comenzi; prompt: $, # ;
csh - CShell - are o sintax mai apropiat de limbajul C, oferind fa se Bourne Shell (sh)
posibilitatea de a lucra cu variabile structurate, capacitatea de a memora i reutiliza ultimele
comenzi introduse,
posibilitatea de a defini i utiliza pseudonime pentru facilitarea introducerii unor comenzi mai
complexe.
De exemplu comanda: %alias lista ' ls -aFx \!* introduce pseudonimul lista n locul
comenzii ls -aFx, pseudonim ce poate fi utilizat ulterior ca o comand.
posibilitatea trecerii unui proces din foreground la background, prin utilizarea comenzilor fg
(foreground) respectiv bg (background); prompt: %, # ;
ksh- Korn Shell -derivat din sh, a preluat o serie de caracteristici ale csh; faciliti:
editarea liniilor de comand similar cu editarea textelor la vi sau emacs;
utilizeaz pseudonimelor din csh, extinznd sfera de cuprindere i la subprograme
constituite din funcii Shell;
grad nalt de portabilitate;
posibilitatea utilizrii de variabile structurate asemntor csh; prompt: $, # ;
Conf.dr.Carmen Timofte
Sisteme de operare
(*)
Documentare: man nume_shell
Intrare in shell: nume_shell
Iesire din shell: exit
Bourne
C
TC
Korn
BASH
______________________________________________________
__
command history
No
Yes
Yes
Yes
Yes
command alias
No
Yes
Yes
Yes
Yes
shell scripts
Yes
Yes
Yes
Yes
Yes
filename completion
No
Yes*
Yes
Yes*
Yes
No
No
Yes
Yes*
Yes
job control
No
Yes
Yes
Yes
Yes
Conf.dr.Carmen Timofte
Sisteme de operare
$env
(environment-echipament)
ce conine urmtoarele valori mai semnificative:
$HOME= refer catalogul alocat utilizatorului (home directory);
Setrile mediului:
env afiseaza setarile
mediului
stty -
afiseaza
Conf.dr.Carmen Timofte
Sisteme de operare
(*)
ntr-o linie de comand construciile prefixate cu $, sunt nlocuite cu valorile variabilelor de mediu
sau variabile Shell;
Conf.dr.Carmen Timofte
Sisteme de operare
(*)
(list_comenzi)
De exemplu: $pwd;(cd /usr/user1;pwd);pwd
prin care efectul comenzii cd este anulat de ntlnirea parantezei nchise, deoarece cd a schimbat
calea numai pentru subprocesul lansat pentru executarea acelei liste de comenzi.
execuia listei de comenzi n cadrul unui proces curent, atunci se va specifica
acest lucru prin: {list_comenzi}
Exemplu: $pwd;{cd /usr/user1;pwd);pwd
prin care efectul comenzii cd se pstreaz i dup terminarea listei de comenzi
cuprinse ntre acolade.
funcie Shell compus dintr-o list de comenzi inclus ntre acolade
nume () {list_comenzi}
apelul funciei se face prin nume [parametru]
cnd parametrii poziionali $1, $2, ... , $9 sunt iniializai cu valorile parametrilor
actuali din linia de comand.
Conf.dr.Carmen Timofte
Sisteme de operare
emite promt-ul,
ateapt introducerea comenzii,
decodific linia de comand (iruri de caractere desprite prin
spaii)- maxim 256 de caractere, iar restul se ignora;
primul cuvnt din linia de comand este interpretat ca
nume_comand ($nume_comand [arg1] ...[arg n])
se ncearc lansarea n execuie a comenzii specificate (dac este
comand intern o execut, dac este extern o caut n PATH)
ateapt sau nu terminarea execuiei comenzii n funcie de sintaxa
liniei de comand (cu sau fr & - n background)
ciclul se reia pn la CTRL+D, exit sau login
Conf.dr.Carmen Timofte
Sisteme de operare
Conf.dr.Carmen Timofte
Sisteme de operare
(*)
Simularea comenzii ls l nume_dir
main()
{
int p[2],i,j;
pipe(p);
if(fork()==0)
{
close(0);
dup(p[0]);
close(p[1]);
execl("/bin/sort","/bin/sort",0);
}
else
{
close(1);
dup(p[1]);
close(p[0]);
execl("/bin/ls","/bin/ls",0);
}
}
Conf.dr.Carmen Timofte
Sisteme de operare
Sisteme de operare
10
(*)
Conf.dr.Carmen Timofte
Sisteme de operare
11
(*)
exp:
$who |lpr
trimite la imprimanta utilizatorii conectai n sistem; comanda who se execut
concurent cu lpr, ieirea lui who fiind conectat direct la intrarea programului lpr;
comenzile sunt executate simultan, sincronizarea este realizat direct de kernel;
exp:
who > fis
lpr < fis
rm fis
trimite la imprimanta utilizatorii conectai n sistem; comenzile se execut
secvenial, iar fiierul temporar fis este gestionat de utilizator;
Conf.dr.Carmen Timofte
Sisteme de operare
12
(*)
secvena de instruciuni care simuleaz pipe-ul shell
(procese2/ex7.c):
main()
{
int p[2],i,j;
pipe(p);
if(fork()==0)
{
close(0);
dup(p[0]);
close(p[1]);
execl("/bin/who","/bin/who",0);
}
else
{
close(1);
dup(p[1]);
close(p[0]);
execl("/bin/lpr","/bin/lpr",0);
}
}
Conf.dr.Carmen Timofte
Sisteme de operare
13
Conf.dr.Carmen Timofte
Sisteme de operare
14
(*)
Variabile Shell
o Atribuire valori: var= valoare
o Referirea variabilelor: $var
o Pot fi exportate, cu export var
o Sunt de 3 tipuri:
Ale sistemului iniializate de shell la deschiderea unei sesiuni cu
valori precizare n fiierele /etc/environment, /etc/profile,
.profile din HomeDirectory; acestea sunt: $HOME, $PATH,
$PS1, $PS2, $LOGNAME, $MAIL, $SHELL, $TERM
variabile
Nr.argument= $#
Numele shell script-ului este $0
Argunemtele sunt: $@
PID-ul procesului este: $$
Argumentul al 2-lea este: $2
15
(*)
Ale utilizatorului definite de utilizator; exp:
$TEST1=HELLO WORLD
$echo $TEST1
HELLO WORD
$DEMO=HELLO
$echo $DEMO
HELLO
Conf.dr.Carmen Timofte
Sisteme de operare
16
(*)
Trimiterea var. comenzilor ca parte a unei
comenzi (cu{})
$name=gr1000
$echo $name
gr1000
$echo ${name}a
gr100a
$echo $name a
gr1000 a
Conf.dr.Carmen Timofte
Sisteme de operare
17
(*)
Definirea var.de la tastatur
$cat interactiv
echo Introducei numele:
read nume
echo Hello $nume
Conf.dr.Carmen Timofte
Sisteme de operare
18
(*)
$a=fred
$echo $a
$a (afieaz textul $a)
$echo $a
fred
Conf.dr.Carmen Timofte
Sisteme de operare
19
Sisteme de operare
20
test,
basename,
dirname,
eval,
exec,
exit,
getopts,
hash,
kill,
newgrp,
set,
shift,
times,
trap,
type,
ulimit,
umask,
wait
Conf.dr.Carmen Timofte
10
$var
${var}
${var-thing}
${var=thing}
${var?message}
${var+thing}
Conf.dr.Carmen Timofte
Sisteme de operare
21
while list_comenzi;
do list_comenzi;
done
until list_comenzi;
do list_comenzi;
done
case word in
pattern) list_comenzi;
esac
Conf.dr.Carmen Timofte
Sisteme de operare
22
11
(*)
Exp:
$for number in 1 2 3
>do
> case $number in
> 1)echo one;;
> 2)echo two;;
> *)echo it is oen or two;;
> esac
>done
Conf.dr.Carmen Timofte
Sisteme de operare
23
Conf.dr.Carmen Timofte
Sisteme de operare
24
12
Exemple de script-uri
1- afiarea variabilei introduse de utilizator (nume)
echo Numele Dvs.?
read nume
echo Hello $nume
Conf.dr.Carmen Timofte
return 0;
Sisteme de operare
25
exist mai multe modaliti de transfer; vom exemplifica modul din prompt MSDOS
din prompt-ul MS-DOS lansai comanda:
c:\>ftp
>?
v arat toate subcomenzile ftp
>o infocib.ase.ro
-deschide conexiunea cu server-ul de ftp
de pe infocib
user: contul_vostru
password: parola_voastra
>lcd c:\dir_local
schimb directorul de pe maina local,
acolo unde se gsesc fiierele voastra/ sau
unde dorii s le punei pe cele aduse
>bin
trecerea modului de transfer din
ASCII n binar; se recomand pt.fiiere
ZIP, EXE, imagini etc.
>hash
vizualizarea transferului fiecrui 2048
B
>cd dir_server
schimb directorul din home directoryul user-ului
>put fis.ext
pune fiierul din directorul local curent
pe server-ul infocib, n directorul din
home-ul utilizatorului
>mput *.ext
multiple put pune toate fiierele cu
extensia .ext, cernd confirmare la fiecare
>get fis.ext
ia de pe server i pune pe local
>mget *
- multiple get
>quit
nchidere sesiune
Conf.dr.Carmen Timofte
Sisteme de operare
26
13