POS/Lab 2 2016

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Lab 2 se pojavljuje u trećem terminu vežbi.

  • Za pitanja sa više odgovora, tačni odgovori su podebljani i uokvireni
  • Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni, tako da se prikažu kada izaberete taj tekst (primer: ovako)
  • Pritisnite levo dugme ispod za sakrivanje i otkrivanje svih odgovora, ili desno dugme za uključivanje i isključivanje interaktivnog režima:

Grupa 3c

Zadatak 1

Postavka

(3p) Dati komandu koja u skripti postavlja argumente. Argumente koje postavlja su odvojene opcije i pozicioni parametri. Od opcija u skripti se očekuju q i g, gde q ima parametar.

Rešenje

while getopts :q:g opt
do
    case $opt in
	q) ;;
	g) ;;
	*) echo 'Usage: script [-q parameter] [-g] '
	   exit -1
	   ;;
    esac
done

Zadatak 2

Postavka

(4p) Napisati komande koje će omogućiti da skripta skripta.sh u direktorijumu /home/pos pokreće samo navođenjem njenog imena bez navođenja apsolutne putanje ili direktorijuma.

Rešenje

#!/bin/sh
[ -z $PATH ] && export PATH="/home/pos" || export PATH="$PATH:/home/pos"

Zadatak 3

Postavka

(7p) Napisati skriptu koja ispisuje koliko fajlova sa istim nazivom postoji u direktorijumima /etc/skel i /home/pos. Razmatrati i skrivene fajlove.

Rešenje

#!/bin/sh
comm -12 <(ls -a /etc/skel) <(ls -a /home/pos)

Grupa 4

Zadatak 1

Postavka

(3p) Napisati komandu sed koja ubacuje liniju teksta GOOOL nakon svake linije koja sadrži reč football.

Rešenje

sed '/football/ s/$/GOOOL/' file

Usvojena pretpostavka da se čita iz fajla file.

Zadatak 2

Postavka

(4p) Za potrebe ovog zadatka izvršiti promenu korisnika u root. To se radi pomoću komande sudo su i unošenjem šifre student. Napisati komande koje su potrebne da bi komanda visudo otvorila editor emacs. Komanda visudo će otvoriti editor koji se nalazi u promenljivoj VISUAL. Ako je ta promenljiva prazna otvoriće je u podrazumevanom editoru (smatrati da podrazumevan editor nije emacs). Za promenu korisnika u standardnog korisnika izvršiti komandu exit.

Rešenje

# pretpostavka da je već izvršeno sudo su
export VISUAL=emacs
alias visudo='[ -z $VISUAL ] && $EDITOR || $VISUAL'

Uslovljena pretpostavka da je $EDITOR podrazumevani editor.

Zadatak 3

Postavka

(7p) Napisati skriptu koja pronalazi direktorijum iz liste u promenljivoj PATH koji sadrži najveći broj fajlova i direktorijuma. Skripta treba da ispiše ime pronađenog direktorijuma.

Rešenje

#!/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

Grupa 5

Zadatak 1

Postavka

(3p) Napisati komandu sed koja menja studentski nalog sa brojem indeksa. Npr. aa000001d menja se 2000/0001. Godina upisa je veća ili jednaka 2000.

Rešenje

sed -E 's|\w\w([0-9]{2})([0-9]{4})\w|20\1/\2|' file

Usvojena pretpostavka da se čita iz fajla file.

Zadatak 2

Postavka

(4p) Napisati skriptu koja pokreće dve skripte i sabira njihove povratne vrednosti. Imena skripti su radi1.sh i radi2.sh. Zbir ispisuje kao rezultat.

Rešenje

#!/bin/sh
expr `radi1.sh` + `radi2.sh`

Drugo rešenje:

#!/bin/sh
echo $((`radi1.sh` + `radi2.sh`))

Uslovljena pretpostavka da se skripte radi1.sh i radi2.sh nalaze u PATH-u, te da nije potrebna apsolutna putanja za njihovo izvršavanje.

Zadatak 3

Postavka

(7p) Napisati skriptu koja svim fajlovima sa ekstenzijom .conf u direktorijumu /home/pos uklanja prava za upis. Fajlovi se pretražuju do proizvoljne dubine direktorijuma.

Rešenje

#!/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 je određena promenljivom "dubina".

Grupa 6

Zadatak 1

Postavka

(3p) Napisati komandu sed koja menja IP adresu tako što drugi broj u njoj zameni sa xx. Npr. 15.10.10.15 menja sa 15.xx.10.15.

Rešenje

ip=15.10.10.15
echo $ip | 
    sed 's/\([0-9]\+\.\)[0-9]\+\./\1xx./'

Zadatak 2

Postavka

(4p) Napisati skriptu, koja poziva skriptu radi.sh, samo ako je pokrene korisnik pos.

Rešenje

#!/bin/sh
[ `whoami` = 'pos' ] && radi.sh

Drugo rešenje:

#!/bin/sh
[ "$USER" = 'pos' ] && radi.sh

Uslovljena pretpostavka da se skripta radi.sh nalazi u PATH-u, te da nije potrebna apsolutna putanja za njeno izvršavanje.

Zadatak 3

Postavka

(7p) Napisati skriptu koja pronalazi sve izvršive fajlove u direktorijumu /usr i računa njihovu ukupnu veličinu. Skripta treba da ispiše izračunatu veličinu u bajtovima/karakterima.

Rešenje

#!/bin/bash

velicina=0
for i in $(find /usr -maxdepth 1 -executable | sudo du -s {}\;); do
    velicina=$(( $velicina + $i ))
done
echo $velicina