ЛАБОРАТОРНАЯ РАБОТА №3ed (559720), страница 3
Текст из файла (страница 3)
# Count from 1 to 20
i=1
until [ $i -gt 20 ]
do
echo $i
i='expr $ +1'
done
exit 0
7) Отладить следующие скрипты:
#!/bin/sh
# Пример логического оператора AND
# В данном примере echo не запускается, т.к. VarA =1, VarB не больше 7, #поэтому оба условия не истинны, тест не проходит и возвращает значение #0.
VarA=1
VarB=9
while [ $VarA -eq 1 ] && [ $VarB -gt 7 ]
#сокр запись команды под названием test (-eg , истина , если 1 = 2 операнду.
do
echo "VarA is equal to 1 and VarB is greater than 7"
done
exit 0
#!/bin/sh
# Пример логического оператора OR
#В данном случае достаточно, чтобы одно из условий было истинно. #Выполняется бесконечный цикл с оператором echo
/#Прервать - CTRL-C
VarA=2
VarB=5
while [ $VarA -eq 1 ] || [ $VarB -gt 7 ]
do
echo "VarA is equal to 1 and VarB is greater than 7"
done
exit 0
8) Отладить следующий сценарий:
#!/bin/sh
# Вывод квадратных корней чисел 10-20
for num in ' jot 10 10 20'
do
square_root='echo "scale=5; sqrt($num)" | bc -lr'
echo $square_root
done
exit 0
Утилита jot печатает строку из 10 чисел, начиная с 10 и заканчивая 20 (10 10 20), scale=5 указывает bc, что в выводе числа после десятичной точки следует сохранить 5 значащих цифр. Знак ; используется для разделения операторов, содержащихся в одной строке. Функция sqrt команды bc возвращает квадратный корень из заданного числа, т.к. интерпретатор заменяет переменную ее значением, bc получает число, а не имя переменной. Далее вывод команды перенаправляется команде bc. Опция -l указывает на необходимость предварительной загрузки математической библиотеки, где содержится функция sqrt.
9) Отладить сценарий программы по угадыванию числа.
#!/bin/sh
# Игра по угадыванию чисел
clear
guess_count=1 #Счетчик инициализируется значением 1
echo
echo "Number guessing game written in bourne shell script"
echo
echo -n "Enter upper limit for guess: "
read up_limit
rnd_number='jot - r 1 1 $ up_limitr' # Получение случайного числа
echo
echo "Irve thought of a number between 1 and $up_limit."
echo
echo - n "Please guess a number between 1 and $up_limit: "
read guess
# Сравнение со случайным числом
while true #строка 17
do
if [ $guess - gt $rnd_number ] #строка 19
then
echo
echo "Your guess was too high/ Please try again."
guess_count='expr $guess_count + 1'
echo - n "Please guess a number between 1 and $up_limit: "
read guess
elif [ $guess -lt $rnd_number ]
then
echo
echo "Your guess was too low/ Please try again."
guess_count='expr $guess_count + 1'
echo - n "Please guess a number between 1 and $up_limit: "
read guess
else
break
fi
done
# Мы достигаем этой точки, если игрок отгадал число.
echo
echo "Correct!"
echo
echo "yon guessed the number in $guess_count guesses."
echo
exit 0
Переменная guess_count хранит число попыток, сделанных игроком.
Команда jot выполняется для присвоения переменной rnd_number случайного числа в диапазоне от 1 до верхнего предела, заданного пользователем. Переменная guess сохраняет число, введенное игроком.
Оператор elif проверяет два или более условий (else if). Сначала выполняется оператор if, если условие истинно, выполняется его код, затем управление передается следующему оператору. В строке 17 начинается бесконечный цикл. В строке 19 проверяется условие: число, введенное игроком больше, чем случайное число, выбранное программой. Если да, игроку выводится сообщение, значение переменной guess_count увеличивается на 1, а затем запрашивается новое число. После того, как игрок вводит новое число, оно сохраняется в переменной guess и цикл while выполняется вновь. Если введенное число не больше случайного числа, оператор elif проверяет, меньше ли оно. Если да, игроку выводится сообщение, значение переменной guess_count увеличивается на 1, а затем запрашивается новое число. После ввода цикл while выполняется вновь. И наконец, если ни одно из условий не истинно, запускается блок else (здесь не нужны проверки, ведь если число ни больше и ни меньше, следовательно, оно равно загаданному). Оператор else прерывает бесконечный цикл, и программа передает управление первому оператору, следующему за оператором done. Последние выражения программы сообщают пользователю о том, что он угадал число, и о количестве предпринятых попыток (для этого выводится значение переменной guess_count).
2.5 Вопросы к защите лабораторной работы
-
Назначение и возможности языка командного интерпретатора Bourne Shell.
-
Что такое сценарий и для чего он предназначен?
-
Перечислите базовые классы и типы прав доступа к файлу.
-
Какие подстановки выполняет командный интерпретатор?
-
Использование условных операторов в скриптах.
-
Укажите различные форматы команды организации циклических операций.
-
Использование логических операторов AND/OR.
-
Использование функций в сценариях.
-
Для чего используются файловые дескрипторы?
-
Как выполнить отладку сценария командного интерпретатора?
-
Поясните на примере, как выполняется перехват прерываний?
14