ПОС/Лаб 3 2022
< ПОС
Пређи на навигацију
Пређи на претрагу
Група 1
Задатак 1
Написати скрипту која служи за вођење евиденције о лицима. Евиденција се налази у датотеци чији редови имају формат <презиме> <име> <ЈМБГ> <досије>
. Један ред представља евиденцију о једном лицу. Поље <досије>
садржи путању до директоријума у коме се налазе датотеке везане за ту особу.
Скрипта има следеће аргументе:
- Опција
-l
без параметара која треба да испише сва имена, презимена и матичне бројеве лица која се налазе у датотеци. - Опција
-a
без параметара треба да омогући додавање информације о новом лицу тако што уколико је ова опција наведена скрипта треба да омогући унос презимена, затим имена и на крају ЈМБГ. Потребно је након тога да провери исправност унетог ЈМБГ (број садржи тачно 13 цифара). Уколико није исправан, треба исписати поруку о грешци и прекинути скрипту. На крају ако је ЈМБГ исправан, треба креирати директоријум за досије са називомпрво_слово_презимена_ЈМБГ_прво_слово_имена
. За унос података користити командуread
. - Опција
-s
са параметром који представља две цифре. На основе те две цифре скрипта треба да испише сва имена и презимена лица која имају у свом ЈМБГ на место 8. и 9. цифре те две цифре. (Ове две цифре представљају политичку регију где је неко рођен).
Путања до датотеке и путања до директоријума где се креирају директоријуми за досијее треба да буду дефинисане као променљиве унутар саме скрипте. Пример датотеке:
Petrovic Petar 1234561234569 /home/pos/P1234561234569P Jovanovic Ivan 1234512345123 /home/pos/J1234512345123I Markovic Milica 5678956789123 /home/pos/M5678956789123M
Решење
#!/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