avrgavr@hp-avrgavr:~$ mkdir lab4
avrgavr@hp-avrgavr:~$ cd lab4/
Сохранение значений внетренних переменных shell и номеров процессов в системе в файле F1.varavrgavr@hp-avrgavr:~/lab4$ env > F1.var
avrgavr@hp-avrgavr:~/lab4$ ps - e >> F1.var
Изменение значений переменных PS1, PS2, сохранение в файле F2.var обновленных значений:avrgavr@hp-avrgavr:~$ PS1="->"
avrgavr@hp-avrgavr:~$ PS2="-->"
Данные значения необходимо занести в ~/.bashrc (/etc/profile) либо произвести export.
avrgavr@hp-avrgavr:~/lab4$ env > F2.var
Возврат к предыдущим значениям переменных:avrgavr@hp-avrgavr:~$ cp /etc/skel/.profile /home/avrgavr/.profile
6. Скопировать /etc/skel/.profile в директорию lab4, определить переменные DIGIT_FOR_LAB, MYOWNNAME, TIMEZONE, MYGROUP, DAY_OF_WEEK_TODAY, PATH, HOME
avrgavr@hp-avrgavr:~$ cp /etc/skel/.profile /home/avrgavr/lab4/
avrgavr@hp-avrgavr:~$ cp./.bashrc /home/avrgavr/lab4/
avrgavr@hp-avrgavr:~$ bash --init-file /home/avrgavr/lab4/.bashrc
Программа, которая по вводимой произвольной последовательности чисел осуществляет вычисление суммы и выводит конечный результат на экран и в файл sh. result. Используется значение переменной интерпретатора $#.user1@hp-avrgavr:~$ cat script
#!/bin/bash
if [ $# == 0 ]
then
echo No arguments are specified!
else
SUM=0
for value in $*
do
let SUM=SUM+$value
done
echo Sum value is SUM=$SUM
echo SUM=$SUM>sh. result
fi
user1@hp-avrgavr:~$ ./script
Sum value is SUM=31
user1@hp-avrgavr:~$ cat sh. result
SUM=31
Скрипт, который каждые две минуты выдает на экран сообщение, если наступило определенное время в определенный день. Режим запуска — фоновый. После каждого вывода на экран переменной MYOWNNAME удлинняется на один символ из последовательности «A» «B» «C» «D»...P. S.: Для ускорения проверки работоспособности скрипта было изменено задание: удлиннение переменной и вывод измененного значения на экран производится в определенное время с точностью до минуты каждые 20 секунд.
user1@hp-avrgavr:~$ cat script1
#!/bin/bash
if [ $# != 3 ]
then
echo No arguments specified!
exit
fi
MYMINUTE=$3
MYHOUR=$2
MYDAY=$1
MYOWNNAME="To be continued... "
while true
do
{
for i in "A " "B " "C " "D " "E " "F " "G "
do
sleep 20s
DAY=`date +%d`
HOUR=`date +%H`
MINUTE=`date +%M`
if [ $DAY -eq $MYDAY ]
then
if [ $HOUR -eq $MYHOUR ]
then
if [ $MINUTE - eq $MYMINUTE ]
then
MYOWNNAME=${MYOWNNAME/% /$i}
echo $MYOWNNAME
else
echo Your time is over this very minute
exit 0
fi
else
echo The Time has run out
exit 0
fi
else
echo The date is not sufficient
exit 0
fi
done
}
done
Проверка работоспособности скрипта:
user1@hp-avrgavr:~$ ./script1&
[1] 2231
user1@hp-avrgavr:~$ To be continued...A
user1@hp-avrgavr:~$
user1@hp-avrgavr:~$ To be continued...AB
Your time is over this very minute
[1]+ Done ./script1
Скрипт, проверяющий наличие процесса, связанного со скриптом из п. 8 и останавливающий его, если количество сообщений, выведенных на экран превысит некоторое число, хранящееся в переменной DIGITAL_FOR_LABПроверка на предопределенность переменной DIGITAL_FOR_LAB:
user1@hp-avrgavr:~$ ./script1&
[1] 2740
user1@hp-avrgavr:~$ ./script2
Variable DIGIT_FOR_LAB is not found!
user1@hp-avrgavr:~$
Для проверки работоспособности был изменен скрип из п. 8 — запуск проводится в требуемый час.
Измененный скрипт:
user1@hp-avrgavr:~$ cat script1.1
#!/bin/bash
if [ $# != 2 ]
then
echo No arguments specified!
exit
fi
MYHOUR=$2
MYDAY=$1
MYOWNNAME="To be continued... "
while true
do
{
for i in "A " "B " "C " "D " "E " "F " "G "
do
sleep 20s
DAY=`date +%d`
HOUR=`date +%H`
if [ $DAY - eq $MYDAY ]
then
if [ $HOUR - eq $MYHOUR ]
then
MYOWNNAME=${MYOWNNAME/% /$i}
echo $MYOWNNAME
else
echo The Time has run out
exit 0
fi
else
echo The date is not sufficient
exit 0
fi
done
}
done
Скрип по п. 9:
user1@hp-avrgavr:~$ cat script2
#!/bin/bash
if [ "$DIGIT_FOR_LAB" = "" ]
then
echo Variable DIGIT_FOR_LAB is not found! $DIGIT_FOR_LAB
else
if [ "$!" = "" ]
then
echo Background process was not launched!
else
LAUNCHEDPID=`ps - e | grep - c $!`
if [ $LAUNCHEDPID - ne 0 ]
then
{
echo Launched process: $!
let i=0
until [ "$i" - ge "$DIGIT_FOR_LAB" ]
do
{
sleep 20s;
let i+=1
}
done
echo It is time to kill the process!
kill $!
}
else
echo This process is not running at the moment
fi
fi
fi
Проверка работоспособности скрипта:
user1@hp-avrgavr:~$ echo $DIGIT_FOR_LAB
3
user1@hp-avrgavr:~$ ./script&
[1] 3136
user1@hp-avrgavr:~$ ./script2
Launched process: 3136
To be continued...A
To be continued...AB
To be continued...ABC
It is time to kill the process!
[1]+ Terminated./script
Скрипт, закрывающий все процессы, запущенные в п. 7, 8, 9 через 5-10 минут.Используется файл F1.var, созданный при старте имитируемой оболочки, содержащий PID всех процессов. Было изменено задание с целью ускорения проверки работоспособности скрипта: процессы закрываются спустя 30 секунд после запуска скрипта.
user1@hp-avrgavr:~$ cat script3
#!/bin/bash
ps > F2.var
comm -13 F1.var F2.var | cut --bytes 2-6 > F3.var
sleep 30s
cat F3.var | while read n
do
Process_launched=`ps | grep - c "$n"`
if [ $Process_launched - ne 0 ]
then
{
if [ $n - ne $$ ]
then
kill $n
echo $n was killed
fi
}
else
echo Process $n is not launched
fi
done
Проверка работоспособности скрипта:
user1@hp-avrgavr:~$ ./script&
[1] 7052
user1@hp-avrgavr:~$ ./script2 &
[2] 7058
user1@hp-avrgavr:~$ Launched process: 7052
user1@hp-avrgavr:~$ ./script3
To be continued...A
To be continued...AB
7052 was killed
Process 7053 is not launched
7058 was killed
Process 7062 is not launched
Process 7068 is not launched
[1]- Terminated ./script
[2]+ Terminated ./script2
Возврат в исходную оболочку:user1@hp-avrgavr:~$ exit
Завершить сеанс работы с ОС после 5 минут запуска некоторого скрипта:user1@hp-avrgavr:~$ timeout 300 ~/script;exit
To be continued...A
exit


