Задачи за подготовка за Контролна работа № 2
при ас. д-р инж. Георги Пашев
контакти: georgepashev@gmail.com; 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 $*
Литература: