Advertisement
Guest User

Untitled

a guest
Jun 14th, 2018
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.70 KB | None | 0 0
  1. Задача 1:
  2. Да се направи еден вид мени, од кое корисникот ќе може да избере ...
  3. 1-Да се излистаат сите извршни датотеки од домашниот директориум
  4. 2-да се прикажат сите датотеки креирани или модифицирани од даден корисник (се внесува преку тастатура)
  5. 3-да се прикажат сите моментално активни корисници чие што корисничко име е составено од 2 букви и 4 бројки.
  6.  
  7.  
  8. #!/bin/bash
  9. #Author 117007
  10.  
  11. echo "Izberete edna od 3-te ponudeni opcii: "
  12. echo "1 - Listanje na site izvrsni datoteki od domasniot dir."
  13. echo "2 - Listanje na site datoteki kreirani/modificirani od daden user"
  14. echo "3 - Listanje na site aktivni korisnici cij user e sostaven od..."
  15.  
  16. select var in 1 2 3
  17. do
  18. case $var in
  19. 1)
  20. files=`ls -l | grep ^-..x | awk '{print $10}'`
  21. for f in $files
  22. do
  23. echo $f
  24. done ;;
  25. 2)
  26. echo "Vnesete broj na index ili username: "
  27. read index
  28. files=`ls -l | grep ^- | grep $index | awk '{print $10}'`
  29. for f in $files
  30. do
  31. echo $f
  32. done ;;
  33. 3)
  34. users=`who | grep '^[a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9]' | awk '{print $1}'`
  35. for u in $users
  36. do
  37. echo $u
  38. done ;;
  39.  
  40. none) break ;;
  41.  
  42. *) echo "Ne vnesovte validen izbor! (Vneseno: $REPLY)";;
  43. esac
  44. done
  45.  
  46.  
  47. Задача 2:
  48. Да се напише скрипта која прима 2 текстуални датотеки како аргументи.
  49. Доколку содржината на 2те датотеки е иста - да се пребрише 2рата датотека.
  50. Доколку имаат различна, содржината од 2рата датотека да биде додадена на крајот
  51. од првата, и резултатот да биде пренасочен во нова датотека која ќе се вика
  52. Datoteka1_Datoteka2.txt
  53. Да се провери доколку внесените аргументи не се датотеки да се прикаже соодветна порака..
  54.  
  55. #!/bin/bash
  56. #Author 117007
  57.  
  58. if [ $# -ne 2 ]
  59. then
  60. echo "Mora da imate 2 argumenti! Exiting."
  61. exit 1
  62. fi
  63.  
  64. if [ ! -f $1 -o ! -f $2 ]
  65. then
  66. echo "Ne se datoteki! Exiting."
  67. exit 1
  68. fi
  69.  
  70. if [ $1 = $2 ]
  71. then
  72. echo "Ne moze dva pati istata datoteka! Exiting."
  73. exit 1
  74. fi
  75.  
  76. dat1=$1
  77. dat2=$2
  78.  
  79. ime1=`echo $dat1 | sed -e 's/\.txt$//'`
  80. ime2=`echo $dat2 | sed -e 's/\.txt$//'`
  81. #Za povekje formati: sed -e 's/\.txt//' -e 's/\.doc//' -e 's/\.pdf//' -e 's/\.rtf//' itn...
  82.  
  83. novoIme=`echo "$ime1-$ime2.txt"`
  84.  
  85. rez=`diff -q $dat1 $dat2 | wc -l`
  86. if [ $rez -eq 0 ]
  87. then
  88. echo "Datotekite imaat ista sodrzina. Kje bide prebrisana"
  89. rm $dat2
  90. if [ ! -f $dat2 ]
  91. then
  92. echo "Datotekata $dat2 bese uspesno izbrishana!"
  93. fi
  94. else
  95. cat $dat2 $dat1 > $novoIme
  96. echo "Novoto ime na datotekata e: $novoIme"
  97. fi
  98.  
  99. UNIX командна процедура
  100. (25 поени) Да се напише командна процедура која во даден именик (прв аргумент) и сите негови подименици рекурзивно ќе ги пронајде сите датотеки модифицирани во даден временски интервал (втор аргумент). За секоја од пронајдените датотеки треба да се изброи колку пати се користат командите за филтрирање на текст и тој број да се додаде на крајот на самата датотека.
  101. Направете проверка дали се проследени потребните аргументи и доколку не се, прикажете соодветно упатство за употреба. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Да се внимава вториот аргумент на скриптата да биде во форматот "X – Y", каде X и Y означуваат час (на пример: "10 – 16", значи од 10:00 до 16:59 часот).
  102. Командната процедура снимете ја под името zad4-t2.sh, во вашиот домашен именик на os.finki.ukim.mk серверот.
  103.  
  104. Решение:
  105.  
  106. #!/bin/bash
  107. #Author 117007
  108.  
  109. if [ $# -ne 2 ]
  110. then
  111. echo "Mora da imate 2 argumenti! Exiting."
  112. exit 1
  113. fi
  114.  
  115. imenik=$1
  116. if [ ! -d $imenik ]
  117. then
  118. echo "Vnesenata pateka ne e Imenik! Exiting."
  119. exit 1
  120. fi
  121.  
  122. chas=$2
  123. vreme=`echo $chas | grep '^[0-2][0-9] - [0-9][0-9]$' | wc -l`
  124.  
  125. if [ $vreme -eq 0 ]
  126. then
  127. echo "Vnesete chas vo sledniot format: XX - YY ! Exiting."
  128. exit 1
  129. fi
  130.  
  131. prv=`echo $chas | cut -c -2`
  132. vtor=`echo $chas | cut -c 6-`
  133.  
  134. if [ $prv -gt 23 -o $vtor -gt 59 ]
  135. then
  136. echo "Greska! Chasot mora da bide od 00:00 do 23:59! Exiting."
  137. exit 1
  138. fi
  139.  
  140.  
  141. #Na ovoj nacin prebaruva samo do eden level, t.e. vo samiot folder.
  142. #Mnogu se komplicira rabotata pokasno koga sakame da go editirame fajlot koj sto e na N-ti lvl dlabocina.
  143. # Ako sakate celosnoto drvo: files=`ls -lR $imenik ...`
  144.  
  145. files=`ls -l $imenik | grep ^- | awk '{print $10}'`
  146. for f in $files
  147. do
  148.  
  149. vreme=`ls -l "${imenik}/${f}" --time-style=+"%H-%M" | awk '{print $7}'`
  150.  
  151. fileTime=`echo $vreme | cut -c -2`
  152.  
  153. if [ $fileTime -ge $prv -a $fileTime -le $vtor ]
  154. then
  155. pati=`cat ${imenik}/${f} | sed -n -e '/grep/p' -n -e '/sed/p' -n -e '/awk/p' | wc -l`
  156. echo $pati >> ${imenik}/${f}
  157. fi
  158.  
  159. done
  160.  
  161.  
  162. #Ne zaboravajte koga ednas kje ja izvrsite skriptata, fajlovite sto gi ispolnuvat uslovite
  163. #kje bidat vo istiot moment modificirani (dodaden brojot na pojavuvanja na komandi za filtriranje),
  164. # i vremeto na last modified kje bide istiot moment na izvrshuvanje na skriptata...
  165.  
  166. 3. Дадена е една текстуална датотека во TSV формат.
  167. Податоците кои се дадени се следни:
  168. Indeks Predmet Prezime Ime e-mail
  169. Датотеката се проследува како прв аргумент на скриптата.
  170. Ваша задача е да се обработи секоја линија од датотеката, така што за секој Predmet ќе се креира соодветен именик на локација (изворен именик) која што е дадена како втор аргумент на скриптата. Во именикот да се креираат подименици именувани со индексите на оние студенти кои го имаат запишано соодветниот предмет. Во секој подименик на студент да се креира датотека со екстензија .dat со генералиите за студентот. Името на датотеката ќе биде Indeks на студентот, а содржината на датотеката информациите за студентот испечатени секоја во нов ред.
  171. На почеток на скриптата направете проверка дали се проследени сите аргументи. Доколку не се, прикажете упатство за употреба и излезете неуспешно. Доколку датотеката не постои или не е од tsv тип, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Изворниот именик не мора да биде иницијално празен, може во него да има веќе креирани именици.
  172. Командната процедура зачувајте ја во домашниот именик под името zad4-t2.sh.
  173.  
  174. Пример:
  175.  
  176. 123456 OS Jankovski Janko janko@finki.ukim.mk
  177. 111111 OS Petkovski Petko petko@finki.ukim.mk
  178. 123456 SP Jankovski Janko janko@finki.ukim.mk
  179. 123444 OS Trajkovski Trajko trajko@finki.ukim.mk
  180. 222111 SP Stojkoski Stojko stojko@finki.ukim.mk
  181. . . .
  182. Излез:
  183.  
  184. OS\
  185. 123456\
  186. 123456.dat
  187. 111111\
  188. 111111.dat
  189. 123444\
  190. 123444.dat
  191. SP\
  192. 123456\
  193. 123456.dat
  194. 222111\
  195. 222111.dat
  196. Содржина на датотеката 123456.dat
  197.  
  198. Jankovski
  199. Janko
  200. janko@finki.ukim.mk
  201.  
  202. #!/bin/bash
  203. a=`ls $1 | sed 's/^.*\.//'`
  204.  
  205. if [[ ! $# -eq 2 ]]
  206. then
  207. echo "USAGE: `basename $0` dat.tsv/ lokacija/"
  208. exit 1
  209.  
  210. elif [[ ! -f $1 ]]
  211. then
  212. echo "Datoteka $1 ne postoi"
  213. exit 1
  214.  
  215. elif [[ ! -d $2 ]]
  216. then
  217. echo "Imenikot $2 ne postoi"
  218. exit 1
  219.  
  220. elif [[ $a != "tsv" ]]
  221. then
  222. echo "Datotekata go nema soodvetniot format"
  223. exit 1
  224. fi
  225.  
  226. tsv=$1
  227. datoteka=$2
  228.  
  229. while read line
  230. do
  231.  
  232. predmet=`echo $line | awk '{ print $2 }'`
  233. indeks=`echo $line | awk '{ print $1 }'`
  234.  
  235. if [[ ! -d $datoteka/$predmet/$indeks ]]
  236. then
  237. mkdir -p $datoteka/$predmet/$indeks
  238.  
  239. echo "$line" | awk '{ print $3, $4, $5; }' >> $datoteka/$predmet/$indeks/$indeks.dat
  240.  
  241. else
  242. if [[ -d $datoteka/$predmet/$indeks ]]
  243. then
  244. echo "$line" | awk '{ print $3, $4, $5; }' >> $datoteka/$predmet/$indeks/$indeks.dat
  245. fi
  246. fi
  247.  
  248.  
  249. done < "$tsv"
  250.  
  251. 4. Да се напише командна процедура која во даден именик (прв аргумент)
  252. и сите негови подименици рекурзивно ќе ги пронајде сите датотеки
  253. модифицирани во даден временски интервал (втор аргумент).
  254. За секоја од пронајдените датотеки треба да се изброи колку пати
  255. се користат командите за филтрирање на текст и тој број да се
  256. додаде на крајот на самата датотека.
  257. Направете проверка дали се проследени потребните аргументи и доколку не се,
  258. прикажете соодветно упатство за употреба.
  259. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за
  260. тоа и да заврши неуспешно.
  261. Да се внимава вториот аргумент на скриптата да биде во форматот "X – Y",
  262. каде X и Y означуваат час (на пример: "10 – 16", значи од 10:00 до 16:59 часот).
  263. Командната процедура снимете ја под името zad4-t2.sh,
  264. во вашиот домашен именик на os.finki.ukim.mk серверот.
  265.  
  266. #!/bin/bash
  267. rekurzija(){
  268. for i in `ls $1`
  269. do
  270. if [ -f $i ]
  271. then
  272. first=`echo $2 | awk '{ print substr($0,0,2)}'`
  273. second=`echo $2 | awk '{ print substr($0,4,2)}'`
  274. pom=`ls -l $i | awk '{ print $8 }'`
  275. timeB=`echo $pom | awk '{ print substr($0,0,2)}'`
  276. if [ $timeB -ge $first ]
  277. then
  278. if [ $timeB -le $second ]
  279. then
  280. awkNumbers=`cat $i | grep -o 'awk' | wc -l`
  281. sedNumbers=`cat $i | grep -o 'sed' | wc -l`
  282. TotalNumbers=$(($awkNumbers+$sedNumbers))
  283. echo $TotalNumbers >> $i
  284. fi
  285. fi
  286. elif [ -d $i ]
  287. then
  288. cd $i
  289. rekurzija .
  290. cd ..
  291. fi
  292. done
  293. }
  294.  
  295. rekurzija $1 $2
  296.  
  297.  
  298. 5.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement