ПОС/Лаб 3 2022 — разлика између измена
< ПОС
Пређи на навигацију
Пређи на претрагу
(Treći lab ove godine od `<@793489760256917515>`) |
|||
| (Није приказана једна међуизмена другог корисника) | |||
| Ред 3: | Ред 3: | ||
Написати скрипту која служи за вођење евиденције о лицима. Евиденција се налази у датотеци чији редови имају формат <code><презиме> <име> <ЈМБГ> <досије></code>. Један ред представља евиденцију о једном лицу. Поље <code><досије></code> садржи путању до директоријума у коме се налазе датотеке везане за ту особу. | Написати скрипту која служи за вођење евиденције о лицима. Евиденција се налази у датотеци чији редови имају формат <code><презиме> <име> <ЈМБГ> <досије></code>. Један ред представља евиденцију о једном лицу. Поље <code><досије></code> садржи путању до директоријума у коме се налазе датотеке везане за ту особу. | ||
Скрипта има следеће аргументе: | |||
* | * Опција <code>-l</code> без параметара која треба да испише сва имена, презимена и матичне бројеве лица која се налазе у датотеци. | ||
* | * Опција <code>-a</code> без параметара треба да омогући додавање информације о новом лицу тако што уколико је ова опција наведена скрипта треба да омогући унос презимена, затим имена и на крају ЈМБГ. Потребно је након тога да провери исправност унетог ЈМБГ (број садржи тачно 13 цифара). Уколико није исправан, треба исписати поруку о грешци и прекинути скрипту. На крају ако је ЈМБГ исправан, треба креирати директоријум за досије са називом <code>прво_слово_презимена_ЈМБГ_прво_слово_имена</code>. За унос података користити команду <code>read</code>. | ||
* | * Опција <code>-s</code> са параметром који представља две цифре. На основе те две цифре скрипта треба да испише сва имена и презимена лица која имају у свом ЈМБГ на место 8. и 9. цифре те две цифре. (Ове две цифре представљају политичку регију где је неко рођен). | ||
Путања до датотеке и путања до директоријума где се креирају директоријуми за досијее треба да буду дефинисане као променљиве унутар саме скрипте. Пример датотеке: | Путања до датотеке и путања до директоријума где се креирају директоријуми за досијее треба да буду дефинисане као променљиве унутар саме скрипте. Пример датотеке: | ||
| Ред 14: | Ред 14: | ||
==== Решење ==== | ==== Решење ==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
| Ред 21: | Ред 19: | ||
list=0 | list=0 | ||
append=0 | append=0 | ||
file="/home/pos/(imefajla)" #ili gde se vec nalazi fajl, nije naglaseno | |||
opcije='las:' | opcije='las:' | ||
while getopts $opcije opt; do | while getopts $opcije opt; do | ||
| Ред 38: | Ред 36: | ||
if [ $list ]; then | if [ $list ]; then | ||
cat $file | cut ... | cat $file # Коментар: "| cut ..." | ||
fi | fi | ||
| Ред 56: | Ред 54: | ||
fi | fi | ||
if [ $cifre ] | if ! [ -z $cifre ] | ||
then | |||
old_IFS=$IFS | |||
IFS=$'\n' | |||
echo $ | for linija in $(cat $file) | ||
done | 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 | fi | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Тренутна верзија на датум 18. април 2023. у 19:24
Група 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