ПОС/Лаб 3 2020
< ПОС
Пређи на навигацију
Пређи на претрагу
Лаб 3 се појављује у четвртом термину вежби.
Група 3
Задатак 1
Поставка
Написати скрипту која обрађује распоред аутобуских линија који се налази у фајлу busScheduler. Сваки ред је једна линија по формату време_поласка|полазно_место|долазно_место. Унутар скрипте поставити путању до фајла busScheduler. Скрипта прима следеће опције, уколико бар једна није наведена пријавити грешку:
- Опција -l без параметра исписује цео распоред аутобуских линија.
- Опција -f са параметром који представља назив полазног места. Ова опција треба да испише само линије чије је полазно место прослеђено.
- Опција -a без параметра додаје нову линију на крај фајла busScheduler. Ако је наведана[sic] ова опција скрипта треба да обезбеди кориснику унос времена, полазног и долазног места. Потребно је проверити исправност унетог времена, оно мора бити у 24-часовном формату hh:MM. Уколико није треба пријавити грешку кориснику и прекинути скрипту.
- Опција -b са параметром који представља време у формат hh:MM. Ова опција треба да испише све линије које полазе након задатог времена сортиране по времену поласка.
Ставка | Поени |
---|---|
Читање аргумената | 3 |
Приказ целог распореда | 2 |
Исписивање свих линија одређеног полазног места | 3 |
Додавање линије | 3 |
Исписивање свих линија након задатог времена | 5 |
Сума | 14 |
Решење
#!/bin/bash
busScheduler="/home/pos/busScheduler" # ovo je proizvoljno
opcije=":laf:b:"
while getopts $opcije opt; do
case $opt in
l) ispisiRaspored=1
;;
a) dodajLiniju=1
;;
f) nazivPolaznog=$OPTARG
;;
b) vreme=$OPTARG
;;
*) printf -- 'korišćenje:\n./skripta.sh -l -a -f polaznoVreme -b vreme\n'
exit 1
;;
esac
done
if [ ! $ispisiRaspored ]; then
printf -- '-l je obavezna opcija\n'
exit 2
fi
if [ ! $dodajLiniju ]; then
printf -- '-a je obavezna opcija\n'
exit 3
fi
if [ ! "$nazivPolaznog" ]; then
printf -- '-f je obevezna opcija\n'
exit 4
fi
if [ ! "$vreme" ]; then
printf -- '-b je obavezna opcija\n'
exit 5
fi
shift $(($OPTIND - 1))
# opcija -l
cat $busScheduler
# opcija -a
printf -- "unesi vreme: "
read unetoVreme
if [ -z "$(echo $unetoVreme | sed -n '/^[0-2][0-9]:[0-5][0-9]$/p')" ] || [ "$(echo $unetoVreme | sed -n '/^2[4-9]/p')" ]; then
printf -- "pogrešno uneto vreme.\n"
exit 6
fi
printf -- "unesi polazno mesto: "
read polaznoMesto
printf -- "unesi polazno vreme: "
read polaznoVreme
"$unetoVreme|$polaznoMesto|$polaznoVreme" >> $busScheduler
# opcija -f
grep "|$nazivPolaznog|" "$busScheduler"
# opcija -b
printf -- "unesi vreme: "
read unetoVreme
hhmm="$(echo $unetoVreme | sed -En 's/^([0-2][0-9]):([0-5][0-9])|.*$/\1\2/p')"
oldIFS="$IFS"
IFS=$'\n'
for line in $(cat $busScheduler); do
[ "$(echo $line | sed -En 's/^([0-2][0-9]):([0-5][0-9])|.*$/\1\2/p')" -gt $hhmm ] && echo $line
done | sort -n
IFS=$oldIFS