ПОС/Лаб 3 2022

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Група 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