Systemy Operacyjne (SOP)
Kolokwium nr 1
Grupa A
Imię i nazwisko: ................................................................................
Numer indeksu: ................................................................................
Zadanie 1. (5 pkt.)
Obliczyć ile katalogów znajduje się w katalogu bieżącym.
ls -pall | grep `[^.][/]$' | wc -l - najlepiej
ls -all | grep `^[d]' | wc -l - policzy też . i ..
echo $[ ` ls -all | grep `^[d]'` - 2 ] - najlepiej
Zadanie 2. (10 pkt.)
Napisać skrypt, który wypisze wszystkie swoje parametry, każdy w osobnej linii, wraz z ich numerami (np. w formacie „numer : parametr”; należy użyć pętli for).
a=1
for par in $@
do
b=$1
echo “parametr nr $a wynosi $b”
let a=a+1
shift 1
done
Zadanie 3. (15 pkt.)
Napisać skrypt działający według następujących reguł:
Dopuszczalne parametry wywołania skryptu to `a' oraz `b'. Pozostałe parametry są błędne.
Jeżeli podano 1 z dozwolonych parametrów należy wypisać drugi z nich.
Jeżeli podano dwa różne dozwolone parametry należy wypisać drugi z podanych parametrów.
W pozostałych przypadkach należy wypisać odpowiedni komunikat o błędzie.
case $# in
1)
case $1 in
a)
echo `b'
;;
b)
echo `a'
;;
*)
echo „zły parametr”
;;
esac
;;
2)
if [ $2 == `a' ] || [ $2 == `b' ]
then
echo $2
else
echo “złe parametry”
fi
;;
*)
echo ”zła liczba parametrów”
;;
esac
Systemy Operacyjne (SOP)
Kolokwium nr 1
Grupa B
Imię i nazwisko: ................................................................................
Numer indeksu: ................................................................................
Zadanie 1. (5 pkt.)
Wypisać nazwy pięciu (jeżeli jest ich mniej, to wszystkich) największych co do rozmiaru plików w danym katalogu posortowanych wg rozmiaru w kolejności malejącej.
ls -Sl | head -n5
Zadanie 2. (10 pkt.)
Napisać skrypt, który dla każdego pliku zwykłego w katalogu bieżącym wypisze jego nazwę oraz jego rozmiar w liniach. Uwaga: jeżeli nie ma odpowiednich praw dostępu, należy zamiast wielkości pliku wypisać komunikat „brak dostępu”.
for file in *
do
if [ -f $file ]
then
echo -n $file “:”
ls -all $file | cut -c 35-43
elif [ ! -r $file -o ! -x $file ]
then
echo ”brak dostępu”
fi
done
Zadanie 3. (15 pkt.)
Napisać skrypt (funkcję), który dla każdego podkatalogu danego katalogu ( oraz dalej w nich rekurencyjnie ) sporządzi plik o nazwie „INDEKS.DIR” zawierający listę wszystkich plików w nim się znajdujących. Uwaga: należy sprawdzać prawa dostępu do danego podkatalogu. Jeżeli nie ma wystarczających praw do wykonania określonej operacji - należy wypisać stosowny komunikat.
wyswietl () {
for file in *; do
if [ -d file ]; then
if [ ! -r $file -o ! -x $file ]; then
echo “brak dostępu”
else
cd $file
wyswietl
cd ..
fi
fi
done
ls -all > index.dir
}
wyswietl
Systemy Operacyjne (SOP)
Kolokwium nr 1
Grupa C
Imię i nazwisko: ................................................................................
Numer indeksu: ................................................................................
Zadanie 1. (5 pkt.)
Napisać polecenie, które wykasuje wszystkie pliki zwykłe należące do użytkownika o rozszerzeniu *.bak, rekurencyjnie, począwszy od bieżącego katalogu.
find . -name ”*.bak” -type f -user $USER -exec rm {} \;
Zadanie 2. (10 pkt.)
Napisać skrypt, który wpisze unikalne linie danego pliku tekstowego, posortowane malejąco według zadanego nr znaku (parametr skryptu )w linii. Jeżeli nie podano parametru skryptu należy go zainicjować jako wartość 1.
if [ $# -le 2 ]; then
sort -r -k1.${2:-1} $1 | uniq -u
else
echo “ble ble”
fi
Zadanie 3. (15 pkt.)
Napisać skrypt (funkcję rekurencyjną) obliczającą wartość wyrażenie wg następującego zależności:
jeżeli n = 0, to F(n) = 1 ,
w przeciwnym wypadku F(n) = n * F(n-1), dla n
1
F () {
a=$1
n=$1
if [ $a -eq 0 ]; then
n=1
echo $n
else
a=`expr $a - 1`
let n=${n}*`F $a`
echo $n
fi
return $n
}
F $1
Systemy Operacyjne (SOP)
Kolokwium nr 1
Grupa D
Imię i nazwisko: ................................................................................
Numer indeksu: ................................................................................
Zadanie 1. (5 pkt.)
Napisać polecenie, które powoduje zakończenie procesu o podanej nazwie. (użyć poleceń ps, grep, kill)
kill -9 `ps | grep `nazwa_procesu' | cut -c1-5
Zadanie 2. (10 pkt.)
Napisać skrypt wyszukujący w pliku linie rozpoczynające się od zadanego wzorca (parametr skryptu), następnie sortuje te linie malejąco wg 2-go znaku w linii i zapisuje do pliku o nazwie znalałem.txt.
if [ $# -eq 2 ]; then
grep ”^$1” $2 | sort -r -k1.2 > znalazłem.txt
else
echo ”złe paramatry: par 1 - wzorzec, par 2 -plik”
fi
Zadanie 3. (15 pkt.)
Napisać skrypt, który z listy parametrów wejściowych będących liczbami naturalnymi wybierze liczbę największą, najmniejszą oraz obliczy ich sumę. Wyniki należy wypisać, każdy w osobnej linii. Jeżeli skrypt będzie posiadał mniej niż 3 parametry wejściowe należy wypisać stosowny komunikat.
min=$1
max=$2
sum=0
if [ $# -ge 3 ]; then
for liczba in $@; do
if [ $liczba -lt $min ];then
min=$liczba
elif [ $liczba -gt $max]; then
max=$liczba
fi
let sum=${sum}+$liczba
done
echo “suma =$sum, min=$min, max=$max”
else
echo ”musisz podać co najmniej 3 liczby-parametry”
fi
4