Documente Academic
Documente Profesional
Documente Cultură
Laborator nr. 4
Scripturi shell
unde func_name este numele functiei, parantezele marcheaza definirea functiei, iar
intre acolade este specificat corpul functiei. Se impune ca prima comanda sa fie separata
de acolada cu un blanc, iar ultima comanda sa fie terminata cu caracterul ';' daca acolada
se afla pe aceeasi linie cu comanda.
#!/bin/bash
function f()
{
echo "$# param: $*"
}
f "$*"
f "$@"
#!/bin/bash
# scriptul se apeleaza cu parametri in linia de comanda
func ()
{
echo "$1"
}
echo "primul apel: fara argumente."
func
echo "============================================================"
echo "al doilea apel: se trimit explicit parametrii din linia de comanda."
func $1
exit 0
Valorile de return
Odata efectuat apelul se iese din functie. Daca n este omis, codul returnat este cel al
ultimei comenzi executate. Valoarea returnata poate fi accesata prin variabila $? si poate fi
testata in structurile de control if, while si until.
1
Sisteme de Operare Laborator nr. 4
2. Exemple de scripturi:
#!/bin/sh
for filename
do
linecount="1"
while read line
do
echo "${linecount}: $line"
linecount="$(($linecount + 1))"
done < $filename
done
exit 0
#!/bin/sh
# validAlphaNum - caractere alfanumerice
validAlphaNum()
{
# Validare arg: return 0 daca toate caracterele sunt litere sau
cifre, # si 1 altfel
# sterge toate caracterele nedorite si verifica daca sirul initial
# este identic cu cel rezultat
compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')"
if [ "$compressed" != "$input" ] ; then
return 1
else
return 0
fi
}
# exemplu de utilizare
echo -n "Introduceti caractere: "
read input
if ! validAlphaNum "$input" ; then
echo "Introduceti doar litere si numere." >&2
exit 1
else
echo "date de intrare valide."
fi
exit 0
2
Sisteme de Operare Laborator nr. 4
#!/bin/bash
#
# open_file.sh: print the contents of orders.txt
declare LINE
exec 3< file.txt
while read LINE <&3 ; do
printf “%s\n” “$LINE”
done
exit 0
Fisierul file.txt este redirectat catre descriptorul de fisier 3 (ultimul care poate fi
utilizat de un program). Descriptorul 0 – intrarea standard, 1 – iesirea standard, 2 – stderr
– iesirea standard de eroare. Read primeste intrarea de la descriptorul 3.
#!/bin/bash
# max.sh: Maximum of two integers.
E_PARAM_ERR=251 # If less than 2 params passed to function.
EQUAL=250 # Return value if both params equal.
# Error values out of range of any
#+ params that might be fed to the function.
max2 33 34
return_val=$?
if [ "$return_val" -eq $E_PARAM_ERR ]
then
echo "Need to pass two parameters to the function."
elif [ "$return_val" -eq $EQUAL ]
then
echo "The two numbers are equal."
else
echo "The larger of the two numbers is $return_val."
fi
exit 0
3
Sisteme de Operare Laborator nr. 4
3. Probleme propuse pentru rezolvare:
3.2. Pornind de la scriptul realizat anterior, scrieti un nou script care sa primeasca
ca argumente in linia de comanda: numele proiectului, tipul fisierelor ce trebuie generate
(C/C++) si numarul de fisiere sursa si header ce trebuie generate. Numele fisierelor
header si sursa din directoarele inc si src sunt de forma:
<prj_name>_<numar>.<extensie> in functie de tipul proiectului (C/C++)
4
Sisteme de Operare Laborator nr. 4
4. Bibliografie: