ПОС/Лаб 2 2016 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(+l2 2016)
 
м (+data-solutions)
 
(Није приказано 5 међуизмена 2 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
Лаб 2 се појављује у '''трећем''' термину вежби.
Лаб 2 се појављује у '''трећем''' термину вежби.
{{решења}}


== Група 3c ==
== Група 3c ==
Ред 9: Ред 9:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
while getopts :q:g opt
while getopts :q:g opt
do
do
Ред 27: Ред 27:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
[ -z $PATH ] && export PATH="/home/pos" || export PATH="$PATH:/home/pos"
[ -z $PATH ] && export PATH="/home/pos" || export PATH="$PATH:/home/pos"
</syntaxhighlight>
</syntaxhighlight>
Ред 36: Ред 37:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
#!/bin/sh
comm -12 <(ls -a /etc/skel) <(ls -a /home/pos)
comm -12 <(ls -a /etc/skel) <(ls -a /home/pos)
Ред 47: Ред 48:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sed '/football/ s/$/GOOOL/' file
sed '/football/ s/$/GOOOL/' file
</syntaxhighlight>
</syntaxhighlight>
Ред 58: Ред 59:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
# pretpostavka da je već izvršeno sudo su
# pretpostavka da je već izvršeno sudo su
export VISUAL=emacs
export VISUAL=emacs
Ред 71: Ред 72:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
#!/bin/sh
for i in $(echo $PATH | tr ':' ' '); do
for i in $(echo $PATH | tr ':' ' '); do
Ред 85: Ред 86:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sed -E 's|\w\w([0-9]{2})([0-9]{4})\w|20\1/\2|' file
sed -E 's|\w\w([0-9]{2})([0-9]{4})\w|20\1/\2|' file
</syntaxhighlight>
</syntaxhighlight>
Ред 96: Ред 97:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
expr `radi1.sh` + `radi2.sh`
expr `radi1.sh` + `radi2.sh`
</syntaxhighlight>
</syntaxhighlight>
Ред 102: Ред 104:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
echo $((`radi1.sh` + `radi2.sh`))
echo $((`radi1.sh` + `radi2.sh`))
</syntaxhighlight>
</syntaxhighlight>
Ред 113: Ред 116:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
dubina=2
dubina=2
find /home/pos/ -maxdepth $dubina -name "*.conf" | xargs chmod -w
find /home/pos/ -maxdepth $dubina -name "*.conf" | xargs chmod -w
# bolje rešenje
find /home/pos/ -maxdepth $dubina -name "*.conf" -exec chmod -w +
</syntaxhighlight>
</syntaxhighlight>


Ред 126: Ред 133:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
ip=15.10.10.15
ip=15.10.10.15
echo $ip |  
echo $ip |  
Ред 137: Ред 144:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
#!/bin/sh
[ `whoami` = 'pos' ] && radi.sh
[ `whoami` = 'pos' ] && radi.sh
Ред 144: Ред 151:
Друго решење:  
Друго решење:  


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
#!/bin/sh
[ "$USER" = 'pos' ] && radi.sh
[ "$USER" = 'pos' ] && radi.sh
Ред 156: Ред 163:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
#!/bin/sh
#!/bin/bash
find /usr -maxdepth 1 -executable | xargs -n 1 sudo du -sh
 
velicina=0
for i in $(find /usr -maxdepth 1 -executable | sudo du -s {}\;); do
    velicina=$(( $velicina + $i ))
done
echo $velicina
</syntaxhighlight>
</syntaxhighlight>


[[Категорија:ПОС]]
[[Категорија:ПОС]]
[[Категорија:Лабораторијске вежбе]]
[[Категорија:Лабораторијске вежбе]]

Тренутна верзија на датум 30. јун 2021. у 15:33

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