Probleme SO

download Probleme SO

of 2

description

Sisteme de operare examen

Transcript of Probleme SO

\\\ Probleme SO ///Problema 1. Sa se scrie un script shell numit is_shell.sh care verifica daca un fisier dat este la rndul su un script shell. Numele fisierelor de verificat sunt date ca parametri in linia de comanda astfel : is_shell.sh [fis1] [fis2] . In cazul in care un fisier fisx exista si este un script Shell, se va afisa mesajul Fisierul fisx este un script Shell , iar in caz contrar : Fisierul fisx NU este un script Shell Daca nu se specifica nici un parametru in linia de comanda, scriptul is_shell.sh va afisa lista tuturor scripturilor Shell din directorul curent. Se vor trata situatiile de eroare legate de validarea parametrilor.Rezolvare:#!/bin/bashif test $# -eq 0 then echo "nu sau dat fisiere si atunci fisierele shell din dir curent sunt" file *.sh|grep "shell script"|cut -d ':' -f1 exitfi

for fisier in $@do if test -e $fisier then file $fisier|grep "shell script">/dev/null if test $? -eq 0 then echo "Fisierul $fisier este script shell!" else echo "Fisierul $fisier nu este script shell!" fielse echo "Fisierul nu prea exista!" fi done

Problema 2. Sa se scrie un script shell numit find_file.sh care verifica daca un fisier dat se gaseste intr-un director dat sau in subdirectoarele acestuia. Numele directorului si al fisierului sunt date ca parametri in linia de comanda, astfel : find_file.sh [dirx] fisx In cazul in care fisierul fisx exista in directorul dirx sau unul dintre subdirectoarele acestuia, se va afisa mesajul urmator : Fisierul fisx exista in directorul dirx , iar in caz contrar : Fisierul fisx NU exista in directorul dirx si nici in subdirectoarele acestuia +Daca nu se specifica parametrul dirx, se considera directorul curent si subdirectoarele sale. Se vor trata situatiile de eroare legate de validarea parametrilor.Rezolvare:#!/bin/bashif test $# -eq 0 then echo "Nu s-au dat argumente "exitfiif test $# -eq 1 then echo "S-a tastat doar numele fisierului si cautarea va fi in directorul curent `pwd`" dir=`pwd` fis=$1fiif test $# -eq 2 then fis=$2 if test -d $1 then dir=$1 else dir=`pwd`echo s-a introdus un director invalid. Se cauta in directorul curent fi echo "directorul in care se cauta este $dir iar fisierul este $fis"fiif test $# -gt 2 then echo "prea multi parametrii" exitfiif test -e "$fis" then find "$dir" "$fis" 2>&1 1>/dev/nullif test $? -eq 0then echo -e "Fisierul $fis exista in \n `find "$dir" -name "$fis" -print 2>/dev/null`"else echo "Fisierul $fis nu se gaseste in $dir si nici in subdirectoarele sale!" fielse echo "Fisierul nu exista" fi

Problema 3. Sa se scrie un script shell numit list_files.sh care afiseaza lista fisierelor obisnuite (de tip -f la testare) existente intr-un director dat. Numele directorului este dat ca parametru, astfel : list_files.sh [dirx] Daca nu se specifica parametrul dirx, se considera directorul curent. Se vor trata situatiile de eroare legate de validarea parametrilor i in mod special situatia in care directorul dat este vid.Rezolvare:#!/bin/bashif test $# -eq 0 then Dir=`pwd` echo nu sau introdus parametrii. se cauta in directorul curentfi if test $# -eq 1 then if test -d $1 thenDir=$1 echo se cauta in $Dir else Dir=`pwd` echo parametrul nu e director. Se cauta in directorul curent fifiif test $# -gt 1 then echo "prea multi parametrii" exitfiecho "Se cauta in directorul $Dir fisierele de tip f"verify_empty=`ls -A $Dir`if test -z "$verify_empty" then echo "Directorul $Dir este nu are fisiere!" exitfi#echo "Fisierele din directorul $Dir de tip f sunt : "for i in $Dir/* #furnizeaza numele fisierelor din director, un nume la un pas do if test -f "$i" thenls -l "$i" fidone

Problema 4. Sa se scrie un script shell numit path_dirs.sh care afiseaza lista tuturor directoarelor continute in variabila de mediu $PATH. Afisarea se face cate un director pe o linie. Scriptul va afisa un mesaj daca un director apartinand utilizatorului curent este in traseele continute de $PATH. Observatie : La afisarea variabilei $PATH se obtine implicit o lista de forma dir1:dir2:dir3:dir4 . Aceasta lista de directoare va trebui afisata sub o forma noua : dir1 dir2 dir3 dir4Rezolvare:#!/bin/bashold=$IFSIFS=:path=`printf "%s\n" $PATH`IFS=$olduser=`whoami`for p in $pathdoecho -e "$p"[[ "$p" =~ "${user}" ]] && echo -e "Aceasta cale ale legatura cu userul curent.\n";done