ПОС/Лаб 2 2016

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

Лаб 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