Подготовка за контролна работа номер 2 по ОС

Print

Задачи за подготовка за Контролна работа № 2

при ас. д-р инж. Георги Пашев

контакти: This e-mail address is being protected from spambots. You need JavaScript enabled to view it ; http://gpashev.com

Зад. 1. Да се напише BASH скрипт, който изписва на потребителя "Моля, въведете 0 за кръг и 1 за елипса" и в зависимост от въведеното от потребителя число стартира подпрограма (функция) съответно за въвеждане на необходимите променливи и изчисляване и извеждане на лицето. С допълнителна команда (напр. php или awk) да се подсигури изчисление на дробни числа (понеже стандартната команда let в BASH поддържа работа само с цели числа).

#!/bin/bash

function calc_circle()
{
    echo "Vyvedete r"
    read r
    echo $( awk "BEGIN {print 3.14*$r*$r}"  )

}

function calc_elipse()
{
    echo "Vyvedete a"; read a; echo "Vyvedete b"; read b;
    echo $( awk "BEGIN {print 3.14*$a*$b}"  )
}



echo "Molya, vyvedete 0 za kryg ili 1 za elipsa"
read Case
case $Case in
0)
    calc_circle
;;
1)
    calc_elipse
;;
*)
    echo "Obyrkal si, brat"; exit 1;
;;
esac

Зад. 2. Да се напише BASH скрипт, който в директорията /etc намира всички *.sh файлове и копира в нова директория shells всички от тях, които са собственост на юзър root.

#!/bin/bash
LIST=$( find /etc -name "*.sh" -type f  )
 
if [ -e shells ]
then
    rm -rf shells
fi
mkdir shells
for i in $LIST
do
    OWNER=$( ls -l $i | awk '{print $3}'  )
    if [ "$OWNER" == "root" ]
    then
        cp $i shells/
    fi
done
 


Зад. 3. Да се напише BASH скрипт, който реализира функция за сумиране на числа, функция за намиране на произведение на числа и от командния ред, в зависимост от входните параметри да извиква едната или другата функция.

#!/bin/bash
 
function sum()
{
    let S=0
    for i in $*
    do
        let S+=i
    done
    echo $S
 
}
function mul()
{
    let S=1
    for i in $*
    do
        let S*=i
    done
    echo $S
}
 
echo "Result: $( $*  )"
 


Зад. 4. Да се напише BASH скрипт, който реализира функция killps, която убива процеси с име name, които са собтвеност на потребител user и се извиква така: killps name user и пише в out.log редове с ID, name на убития процес и дата и час на убиването.

#!/bin/bash
 
function killps()
{
    name=$1
    user=$2
    PSs=$( ps aux | grep $name | grep ^$user | grep -v zad4.sh | grep -v grep | awk '{print $2}'  )
    for i in $PSs
    do
        curPSName=$( ps aux | grep $i | awk '{print $11}'  )
        kill $i
        if [ $? -eq 0  ]
        then
            curDate=$( date  )
            echo "$i $curPSName $curDate" >> out.log
        fi        
    done
}
 
killps $*
 


Литература:

1) Cobault, Paul, Linux Fundamentals

2) Ryans Tutorials, BASH Scripting Tutorial