Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator nr.4
Tema: Scripturi shell UNIX
Chiinu 2016
2. Realizati un script shell UNIX care permite curarea ecranului iar apoi afieaz structura de fiiere
i directoare a directorului pe care l-a i furnizat ca argument. Indicaie : comanda care cur ecranul
este clear. Studiai pagina de manual a acestei comenzi !
SOURCE CODE
#!/bin/bash
# curatim ecranul
clear
# verificam daca a fost transmis un argument
if [[ -z $1 ]]; #daca este egal cu 0 atunci
then
#afisam structura completa a directoarelor utilizatorului curent
ls -R ~/
else
#daca este transmis argumentul atunci afisam structura completa in
baza argumentului
ls -R $1
fi
./ClearTree.sh ../Lab4/
3. Modificai scriptul precedent pentru a afia structura de fiiere i directoare a dosarului ./ClearTree.sh
4. Realizai un script shell UNIX care calculeaz suma primelor N numere naturale, N fiind argumentul
scriptului.
SOURCE CODE
#!/bin/bash
suma=0
contor=1
while [[ $contor -le $1 ]]; do
suma=$((suma+$contor))
contor=$(( contor+1 ))
done
echo $suma
5. Realizai un script shell UNIX care cere utilizatorului sa introduc doua iruri de caractere i apoi
afieaz un mesaj de informare dac cele doua iruri sunt sau nu egale. Mai exact, dac cele doua iruri
de caractere sunt egale se afieaz la terminal un mesaj de tipul Cele doua iruri de caracter sunt
egale, iar dac sunt diferite - un mesaj de tipul Cele doua iruri de caractere sunt diferite.
SOURCE CODE
#!/bin/bash
echo "Introduceti primul sir de caractere: "
read sir_1
echo "Introduceti al doilea sir de caractere: "
read sir_2
if [[ $sir_1 == $sir_2 ]]; then
echo "Cele doua iruri de caracter sunt egale"
else
echo "Cele doua iruri de caractere sunt diferite"
fi
6. Realizai un script care primete drept argument calea ctre un director, verifica dac acesta este un
director i n caz afirmativ afieaz coninutul acestuia i al subdirectoarelor.
SOURCE CODE
#!/bin/bash
if [[ -d $1 ]]; then
ls -R $1
fi
7. Realizai un script care permite copierea unui director specificat de ctre utilizator, cu ntreg
coninutul sau de fiiere i directoare ntr-un director numit copie.
SOURCE CODE
#!/bin/bash
sursa="$1"
destinatia="$1-copie"
mkdir $destinatia
cp -rvf "$sursa" "$destinatia"
8. Realizai un script shell UNIX care calculeaz suma primelor cinci numere pare, utiliznd un ciclu
while.
SOURCE CODE
#!/bin/bash
contor=1
index=1
while [[ $contor -le 5 ]]; do
if [[ $(($index%2)) -eq 0 ]]; then
echo "$contor - $index este numar par"
contor=$(($contor + 1))
fi
index=$(($index + 1))
done
9. Realizai un script care permite afiarea denumirii unei luni, n situaia n care utilizatorul specifica
numrul lunii. De exemplu pentru 3 afieaz martie.
SOURCE CODE
#!/bin/bash
Lunile_Anului=(ZERO Ianuarie Februarie Martie Aprilie
Iulie August Septembrie Octombrie Noiembrie Decembrie)
echo ${Lunile_Anului[$1]}
Mai
Iunie
10. Realizati un script shell UNIX care nu afieaz dect fiierele dintr-un anumit director furnizat ca
argument.
SOURCE CODE
#!/bin/bash
directory=$1;
find $1 -type f
11. Analog, creai un script shell UNIX care nu afieaz dect subdirectoarele dintr-un anumit director
furnizat ca argument.
SOURCE CODE
#!/bin/bash
directory=$1
find $1 -type d
12. Realizai un script shell UNIX care permite afiarea numrului de fiiere i de subdirectoare dintrun director furnizat drept argument (verificai pentru nceput dac directorul exista). Se vor lua n
considerare doua cazuri :
a) cutare superficiala (va limitai doar la directorul curent fr a va preocupa de subdirectoare);
b) cutare n profunzime (cutare n toate sub-directoarele din dosarul de baza)
SOURCE CODE
#!/bin/bash
# directorul furnizat ca argument
directory=$1;
# verificam daca argumentul a fost transmis + daca este director
if [[ ! -z $directory && -d $directory ]];
then
# afisam un mic menu pentru a alege tipul de cautare conform
conditiei
echo "Tipul de cautare"
echo "================"
echo "a) cutare superficiala"
echo "b) cutare n profunzime"
# citim de la tastatura optiunea aleasa
read TipCautare
# folosim instructiunea CASE pentru fiecare scenariu ales de
$USER
case $TipCautare in
a )
# scenariul pentru cautarea superficiala
echo "Start cutare superficiala"
ls -1 $directory | wc -l
;;
b )
# scenariul pentru cautarea in profunzime
fi
esac
;;
13. Scriei un script care afieaz numrul de utilizatori conectai i numrul de procese lansate n
momentul lansrii scriptului.
SOURCE CODE
#!/bin/bash
NumbersOfUsers=$(ps -eaho user | sort -u | wc -l)
echo "Numarul de utilizatori: $NumbersOfUsers"
ps -eaho user | sort -u
echo "Numarul de procese lansate la moment: "
ps ax | wc -l | tr -d " "
14. Scriei un script care afieaz numerele de la 1 pn la valoarea N transmisa scriptului n calitate de
parametru:
a) Folosii n acest scop o bucl while do done
SOURCE CODE
#!/bin/bash
N=$1
contor=1
while [[ $contor -le $N ]]; do
echo $contor
contor=$(( contor+1 ))
done
contor=$(($contor+1))
done
media=$(($media/($contor-1)))
echo "Media = $media"
15. Realizai un script shell UNIX care realizeaz un meniu afiat n bucla care permite urmtoarele
opiuni :
a) pentru opiunea 1 afieaz un mesaj de ntmpinare ;
b) pentru opiunea 2 afieaz data curenta;
c) pentru opiunea 3 afieaz procesele care ruleaz la acel moment (comanda ps);
d) pentru opiunea 4 va ntreab numrul procesului care trebuie oprit ("ucide" procesul trimindu-i
semnalul SIGKILL);
e) pentru opiunea 5 cura ecranul;
f) pentru opiunea 6 prsete scriptul;
SOURCE CODE
#!/bin/bash
while :
do
echo "---------------------------------"
echo "
M E N U"
echo "---------------------------------"
echo "1. afieaz un mesaj de ntmpinare"
echo "2. afieaz data curenta"
echo "3. afieaz procesele care ruleaz la acest moment"
echo "4. Kill Proces"
echo "5. Curata ecran"
echo "6. Iesire"
echo "---------------------------------"
read -r -p "Enter your choice [1-6] : " c
case $c in
1) echo "Mesaj de intimpinare pentru $USER";;
2) date;;
3) echo '*** Top 10 Procese care consuma Memorie:'; ps -auxf | sort
-nr -k 4 | head -10;
echo; echo '*** Top 10 Procese care consuma CPU:';ps -auxf | sort
-nr -k 3 | head -10;
echo; ;;
4) read -r -p "Numarul procesului de UCIS: " P ; kill -9 $P;;
5) clear;;
6) exit;;
*) "Select between 1 to 6 only"
esac
done
pentru
copia