ПОС/Лаб 2 2016
Лаб 2 се појављује у трећем термину вежби.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
Група 3c
Задатак 1
Поставка
(3п) Дати команду која у скрипти поставља аргументе. Аргументе које поставља су одвојене опције и позициони параметри. Од опција у скрипти се очекују q и g, где q има параметар.
Решење
while getopts :q:g opt
do
case $opt in
q) ;;
g) ;;
*) echo 'Usage: script [-q parameter] [-g] '
exit -1
;;
esac
done
Задатак 2
Поставка
(4п) Написати команде које ће омогућити да скрипта skripta.sh у директоријуму /home/pos покреће само навођењем њеног имена без навођења апсолутне путање или директоријума.
Решење
#!/bin/sh
[ -z $PATH ] && export PATH="/home/pos" || export PATH="$PATH:/home/pos"
Задатак 3
Поставка
(7п) Написати скрипту која исписује колико фајлова са истим називом постоји у директоријумима /etc/skel и /home/pos. Разматрати и скривене фајлове.
Решење
#!/bin/sh
comm -12 <(ls -a /etc/skel) <(ls -a /home/pos)
Група 4
Задатак 1
Поставка
(3п) Написати команду sed која убацује линију текста GOOOL након сваке линије која садржи реч football.
Решење
sed '/football/ s/$/GOOOL/' file
Усвојена претпоставка да се чита из фајла file.
Задатак 2
Поставка
(4п) За потребе овог задатка извршити промену корисника у root. То се ради помоћу команде sudo su и уношењем шифре student. Написати команде које су потребне да би команда visudo отворила едитор emacs. Команда visudo ће отворити едитор који се налази у променљивој VISUAL. Ако је та променљива празна отвориће је у подразумеваном едитору (сматрати да подразумеван едитор није emacs). За промену корисника у стандардног корисника извршити команду exit.
Решење
# pretpostavka da je već izvršeno sudo su
export VISUAL=emacs
alias visudo='[ -z $VISUAL ] && $EDITOR || $VISUAL'
Условљена претпоставка да је $EDITOR подразумевани едитор.
Задатак 3
Поставка
(7п) Написати скрипту која проналази директоријум из листе у променљивој PATH који садржи највећи број фајлова и директоријума. Скрипта треба да испише име пронађеног директоријума.
Решење
#!/bin/sh
for i in $(echo $PATH | tr ':' ' '); do
ls $i | wc -l | tr -d '\n'
echo " $i"
done | sort -nr | head -1 | cut -d' ' -f2
Група 5
Задатак 1
Поставка
(3п) Написати команду sed која мења студентски налог са бројем индекса. Нпр. aa000001d мења се 2000/0001. Година уписа је већа или једнака 2000.
Решење
sed -E 's|\w\w([0-9]{2})([0-9]{4})\w|20\1/\2|' file
Усвојена претпоставка да се чита из фајла file.
Задатак 2
Поставка
(4п) Написати скрипту која покреће две скрипте и сабира њихове повратне вредности. Имена скрипти су radi1.sh и radi2.sh. Збир исписује као резултат.
Решење
#!/bin/sh
expr `radi1.sh` + `radi2.sh`
Друго решење:
#!/bin/sh
echo $((`radi1.sh` + `radi2.sh`))
Условљена претпоставка да се скрипте radi1.sh и radi2.sh налазе у PATH-у, те да није потребна апсолутна путања за њихово извршавање.
Задатак 3
Поставка
(7п) Написати скрипту која свим фајловима са екстензијом .conf у директоријуму /home/pos уклања права за упис. Фајлови се претражују до произвољне дубине директоријума.
Решење
#!/bin/sh
dubina=2
find /home/pos/ -maxdepth $dubina -name "*.conf" | xargs chmod -w
# bolje rešenje
find /home/pos/ -maxdepth $dubina -name "*.conf" -exec chmod -w +
Дубина је одређена променљивом "dubina".
Група 6
Задатак 1
Поставка
(3п) Написати команду sed која мења IP адресу тако што други број у њој замени са xx. Нпр. 15.10.10.15 мења са 15.xx.10.15.
Решење
ip=15.10.10.15
echo $ip |
sed 's/\([0-9]\+\.\)[0-9]\+\./\1xx./'
Задатак 2
Поставка
(4п) Написати скрипту, која позива скрипту radi.sh, само ако је покрене корисник pos.
Решење
#!/bin/sh
[ `whoami` = 'pos' ] && radi.sh
Друго решење:
#!/bin/sh
[ "$USER" = 'pos' ] && radi.sh
Условљена претпоставка да се скрипта radi.sh налази у PATH-у, те да није потребна апсолутна путања за њено извршавање.
Задатак 3
Поставка
(7п) Написати скрипту која проналази све извршиве фајлове у директоријуму /usr и рачуна њихову укупну величину. Скрипта треба да испише израчунату величину у бајтовима/карактерима.
Решење
#!/bin/bash
velicina=0
for i in $(find /usr -maxdepth 1 -executable | sudo du -s {}\;); do
velicina=$(( $velicina + $i ))
done
echo $velicina