POS/Lab 3 2022
< ПОС
Pređi na navigaciju
Pređi na pretragu
Grupa 1
Zadatak 1
Napisati skriptu koja služi za vođenje evidencije o licima. Evidencija se nalazi u datoteci čiji redovi imaju format <презиме> <име> <ЈМБГ> <досије>
. Jedan red predstavlja evidenciju o jednom licu. Polje <досије>
sadrži putanju do direktorijuma u kome se nalaze datoteke vezane za tu osobu.
Skripta ima sledeće argumente:
- Opcija
-l
bez parametara koja treba da ispiše sva imena, prezimena i matične brojeve lica koja se nalaze u datoteci. - Opcija
-a
bez parametara treba da omogući dodavanje informacije o novom licu tako što ukoliko je ova opcija navedena skripta treba da omogući unos prezimena, zatim imena i na kraju JMBG. Potrebno je nakon toga da proveri ispravnost unetog JMBG (broj sadrži tačno 13 cifara). Ukoliko nije ispravan, treba ispisati poruku o grešci i prekinuti skriptu. Na kraju ako je JMBG ispravan, treba kreirati direktorijum za dosije sa nazivomпрво_слово_презимена_ЈМБГ_прво_слово_имена
. Za unos podataka koristiti komanduread
. - Opcija
-s
sa parametrom koji predstavlja dve cifre. Na osnove te dve cifre skripta treba da ispiše sva imena i prezimena lica koja imaju u svom JMBG na mesto 8. i 9. cifre te dve cifre. (Ove dve cifre predstavljaju političku regiju gde je neko rođen).
Putanja do datoteke i putanja do direktorijuma gde se kreiraju direktorijumi za dosijee treba da budu definisane kao promenljive unutar same skripte. Primer datoteke:
Petrovic Petar 1234561234569 /home/pos/P1234561234569P Jovanovic Ivan 1234512345123 /home/pos/J1234512345123I Markovic Milica 5678956789123 /home/pos/M5678956789123M
Rešenje
#!/bin/bash
list=0
append=0
file="/home/pos/(imefajla)" #ili gde se vec nalazi fajl, nije naglaseno
opcije='las:'
while getopts $opcije opt; do
case $opt in
l) list=1
;;
a) append=1
;;
s) cifre= $OPTARG
;;
*) echo "Nepravilno koriscenje skripte"
exit -1
;;
esac
done
if [ $list ]; then
cat $file # Коментар: "| cut ..."
fi
if [ $append ]; then
echo "unesi prezime"
read prezime
echo "unesi ime"
read ime
echo "unesi jmbg"
read jmbg
if ! [ "$(echo jmbg | sed -E 's/[0-9]{13}')" ]; then
echo "neispravan jmbg"
exit -2
fi
prvo_slovo= echo $prezime | sed -E 's/([a-z]{1})([a-Z]*)/\1/'
mkdir "$prvo_slovo _$jmbg"
fi
if ! [ -z $cifre ]
then
old_IFS=$IFS
IFS=$'\n'
for linija in $(cat $file)
do
lcifre=$(echo $linija | cut -d " " -f3 | cut -c 8,9)
if [ "$lcifre" = "$cifre" ]
then
echo $linija | cut -d " " -f1,2
fi
done
IFS=$old_IFS
fi