POS/Lab 3 2022

Izvor: SI Wiki
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 komandu read.
  • 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