Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задача 1:
- Да се направи еден вид мени, од кое корисникот ќе може да избере ...
- 1-Да се излистаат сите извршни датотеки од домашниот директориум
- 2-да се прикажат сите датотеки креирани или модифицирани од даден корисник (се внесува преку тастатура)
- 3-да се прикажат сите моментално активни корисници чие што корисничко име е составено од 2 букви и 4 бројки.
- #!/bin/bash
- #Author 117007
- echo "Izberete edna od 3-te ponudeni opcii: "
- echo "1 - Listanje na site izvrsni datoteki od domasniot dir."
- echo "2 - Listanje na site datoteki kreirani/modificirani od daden user"
- echo "3 - Listanje na site aktivni korisnici cij user e sostaven od..."
- select var in 1 2 3
- do
- case $var in
- 1)
- files=`ls -l | grep ^-..x | awk '{print $10}'`
- for f in $files
- do
- echo $f
- done ;;
- 2)
- echo "Vnesete broj na index ili username: "
- read index
- files=`ls -l | grep ^- | grep $index | awk '{print $10}'`
- for f in $files
- do
- echo $f
- done ;;
- 3)
- users=`who | grep '^[a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9]' | awk '{print $1}'`
- for u in $users
- do
- echo $u
- done ;;
- none) break ;;
- *) echo "Ne vnesovte validen izbor! (Vneseno: $REPLY)";;
- esac
- done
- Задача 2:
- Да се напише скрипта која прима 2 текстуални датотеки како аргументи.
- Доколку содржината на 2те датотеки е иста - да се пребрише 2рата датотека.
- Доколку имаат различна, содржината од 2рата датотека да биде додадена на крајот
- од првата, и резултатот да биде пренасочен во нова датотека која ќе се вика
- Datoteka1_Datoteka2.txt
- Да се провери доколку внесените аргументи не се датотеки да се прикаже соодветна порака..
- #!/bin/bash
- #Author 117007
- if [ $# -ne 2 ]
- then
- echo "Mora da imate 2 argumenti! Exiting."
- exit 1
- fi
- if [ ! -f $1 -o ! -f $2 ]
- then
- echo "Ne se datoteki! Exiting."
- exit 1
- fi
- if [ $1 = $2 ]
- then
- echo "Ne moze dva pati istata datoteka! Exiting."
- exit 1
- fi
- dat1=$1
- dat2=$2
- ime1=`echo $dat1 | sed -e 's/\.txt$//'`
- ime2=`echo $dat2 | sed -e 's/\.txt$//'`
- #Za povekje formati: sed -e 's/\.txt//' -e 's/\.doc//' -e 's/\.pdf//' -e 's/\.rtf//' itn...
- novoIme=`echo "$ime1-$ime2.txt"`
- rez=`diff -q $dat1 $dat2 | wc -l`
- if [ $rez -eq 0 ]
- then
- echo "Datotekite imaat ista sodrzina. Kje bide prebrisana"
- rm $dat2
- if [ ! -f $dat2 ]
- then
- echo "Datotekata $dat2 bese uspesno izbrishana!"
- fi
- else
- cat $dat2 $dat1 > $novoIme
- echo "Novoto ime na datotekata e: $novoIme"
- fi
- UNIX командна процедура
- (25 поени) Да се напише командна процедура која во даден именик (прв аргумент) и сите негови подименици рекурзивно ќе ги пронајде сите датотеки модифицирани во даден временски интервал (втор аргумент). За секоја од пронајдените датотеки треба да се изброи колку пати се користат командите за филтрирање на текст и тој број да се додаде на крајот на самата датотека.
- Направете проверка дали се проследени потребните аргументи и доколку не се, прикажете соодветно упатство за употреба. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Да се внимава вториот аргумент на скриптата да биде во форматот "X – Y", каде X и Y означуваат час (на пример: "10 – 16", значи од 10:00 до 16:59 часот).
- Командната процедура снимете ја под името zad4-t2.sh, во вашиот домашен именик на os.finki.ukim.mk серверот.
- Решение:
- #!/bin/bash
- #Author 117007
- if [ $# -ne 2 ]
- then
- echo "Mora da imate 2 argumenti! Exiting."
- exit 1
- fi
- imenik=$1
- if [ ! -d $imenik ]
- then
- echo "Vnesenata pateka ne e Imenik! Exiting."
- exit 1
- fi
- chas=$2
- vreme=`echo $chas | grep '^[0-2][0-9] - [0-9][0-9]$' | wc -l`
- if [ $vreme -eq 0 ]
- then
- echo "Vnesete chas vo sledniot format: XX - YY ! Exiting."
- exit 1
- fi
- prv=`echo $chas | cut -c -2`
- vtor=`echo $chas | cut -c 6-`
- if [ $prv -gt 23 -o $vtor -gt 59 ]
- then
- echo "Greska! Chasot mora da bide od 00:00 do 23:59! Exiting."
- exit 1
- fi
- #Na ovoj nacin prebaruva samo do eden level, t.e. vo samiot folder.
- #Mnogu se komplicira rabotata pokasno koga sakame da go editirame fajlot koj sto e na N-ti lvl dlabocina.
- # Ako sakate celosnoto drvo: files=`ls -lR $imenik ...`
- files=`ls -l $imenik | grep ^- | awk '{print $10}'`
- for f in $files
- do
- vreme=`ls -l "${imenik}/${f}" --time-style=+"%H-%M" | awk '{print $7}'`
- fileTime=`echo $vreme | cut -c -2`
- if [ $fileTime -ge $prv -a $fileTime -le $vtor ]
- then
- pati=`cat ${imenik}/${f} | sed -n -e '/grep/p' -n -e '/sed/p' -n -e '/awk/p' | wc -l`
- echo $pati >> ${imenik}/${f}
- fi
- done
- #Ne zaboravajte koga ednas kje ja izvrsite skriptata, fajlovite sto gi ispolnuvat uslovite
- #kje bidat vo istiot moment modificirani (dodaden brojot na pojavuvanja na komandi za filtriranje),
- # i vremeto na last modified kje bide istiot moment na izvrshuvanje na skriptata...
- 3. Дадена е една текстуална датотека во TSV формат.
- Податоците кои се дадени се следни:
- Indeks Predmet Prezime Ime e-mail
- Датотеката се проследува како прв аргумент на скриптата.
- Ваша задача е да се обработи секоја линија од датотеката, така што за секој Predmet ќе се креира соодветен именик на локација (изворен именик) која што е дадена како втор аргумент на скриптата. Во именикот да се креираат подименици именувани со индексите на оние студенти кои го имаат запишано соодветниот предмет. Во секој подименик на студент да се креира датотека со екстензија .dat со генералиите за студентот. Името на датотеката ќе биде Indeks на студентот, а содржината на датотеката информациите за студентот испечатени секоја во нов ред.
- На почеток на скриптата направете проверка дали се проследени сите аргументи. Доколку не се, прикажете упатство за употреба и излезете неуспешно. Доколку датотеката не постои или не е од tsv тип, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Изворниот именик не мора да биде иницијално празен, може во него да има веќе креирани именици.
- Командната процедура зачувајте ја во домашниот именик под името zad4-t2.sh.
- Пример:
- 123456 OS Jankovski Janko janko@finki.ukim.mk
- 111111 OS Petkovski Petko petko@finki.ukim.mk
- 123456 SP Jankovski Janko janko@finki.ukim.mk
- 123444 OS Trajkovski Trajko trajko@finki.ukim.mk
- 222111 SP Stojkoski Stojko stojko@finki.ukim.mk
- . . .
- Излез:
- OS\
- 123456\
- 123456.dat
- 111111\
- 111111.dat
- 123444\
- 123444.dat
- SP\
- 123456\
- 123456.dat
- 222111\
- 222111.dat
- Содржина на датотеката 123456.dat
- Jankovski
- Janko
- janko@finki.ukim.mk
- #!/bin/bash
- a=`ls $1 | sed 's/^.*\.//'`
- if [[ ! $# -eq 2 ]]
- then
- echo "USAGE: `basename $0` dat.tsv/ lokacija/"
- exit 1
- elif [[ ! -f $1 ]]
- then
- echo "Datoteka $1 ne postoi"
- exit 1
- elif [[ ! -d $2 ]]
- then
- echo "Imenikot $2 ne postoi"
- exit 1
- elif [[ $a != "tsv" ]]
- then
- echo "Datotekata go nema soodvetniot format"
- exit 1
- fi
- tsv=$1
- datoteka=$2
- while read line
- do
- predmet=`echo $line | awk '{ print $2 }'`
- indeks=`echo $line | awk '{ print $1 }'`
- if [[ ! -d $datoteka/$predmet/$indeks ]]
- then
- mkdir -p $datoteka/$predmet/$indeks
- echo "$line" | awk '{ print $3, $4, $5; }' >> $datoteka/$predmet/$indeks/$indeks.dat
- else
- if [[ -d $datoteka/$predmet/$indeks ]]
- then
- echo "$line" | awk '{ print $3, $4, $5; }' >> $datoteka/$predmet/$indeks/$indeks.dat
- fi
- fi
- done < "$tsv"
- 4. Да се напише командна процедура која во даден именик (прв аргумент)
- и сите негови подименици рекурзивно ќе ги пронајде сите датотеки
- модифицирани во даден временски интервал (втор аргумент).
- За секоја од пронајдените датотеки треба да се изброи колку пати
- се користат командите за филтрирање на текст и тој број да се
- додаде на крајот на самата датотека.
- Направете проверка дали се проследени потребните аргументи и доколку не се,
- прикажете соодветно упатство за употреба.
- Доколку изворниот именик не постои, скриптата треба да го извести корисникот за
- тоа и да заврши неуспешно.
- Да се внимава вториот аргумент на скриптата да биде во форматот "X – Y",
- каде X и Y означуваат час (на пример: "10 – 16", значи од 10:00 до 16:59 часот).
- Командната процедура снимете ја под името zad4-t2.sh,
- во вашиот домашен именик на os.finki.ukim.mk серверот.
- #!/bin/bash
- rekurzija(){
- for i in `ls $1`
- do
- if [ -f $i ]
- then
- first=`echo $2 | awk '{ print substr($0,0,2)}'`
- second=`echo $2 | awk '{ print substr($0,4,2)}'`
- pom=`ls -l $i | awk '{ print $8 }'`
- timeB=`echo $pom | awk '{ print substr($0,0,2)}'`
- if [ $timeB -ge $first ]
- then
- if [ $timeB -le $second ]
- then
- awkNumbers=`cat $i | grep -o 'awk' | wc -l`
- sedNumbers=`cat $i | grep -o 'sed' | wc -l`
- TotalNumbers=$(($awkNumbers+$sedNumbers))
- echo $TotalNumbers >> $i
- fi
- fi
- elif [ -d $i ]
- then
- cd $i
- rekurzija .
- cd ..
- fi
- done
- }
- rekurzija $1 $2
- 5.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement