POS/Lab 2 2016
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