Лаб_раб-3_ver1.1 (538463), страница 3
Текст из файла (страница 3)
ls -l testdir/testfile
cat testdir/testfile
chmod 0200 testdir/testfile
cat testdir/testfile
chmod 0644 testdir/testfile
chmod 0444 testdir
ls testdir
cat testdir/testfile
chmod 0544 testdir/testfile
rm testdir/testfile
chmod 755 testdir
rm testdir/testfile
rm testfile
6) Отладить следующие скрипты:
а) проверка условия - пока i меньше или равно 20
#!/bin/sh
# Count from 1 to 20
i=1
while [ $i -le 20 ]
do
echo $i
i='expr $i +1' i=$ ($i+1)
done
exit 0
б) цикл выполняется до тех пор, пока значение переменной i не станет больше 20
#!/bin/sh
# 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).
Скрипт 1
#!/bin/sh
if [ $# -ge 1 ]
then
echo "You supplied $# command line arguments."
fi
echo
echo "Program exiting..."
echo
exit 0
Скрипт 2
#!/bin/sh
# цикл while
# Счетчик от 1 до 5
i=1
# -le обозначает "меньше или равно"
while [ $i -le 5 ]
do
echo $i
i=$[i+1]
done
exit 0
Скрипт 3
#!/bin/sh
# Программа иллюстрирует применение команды shift
while [ $# -ne 0 ]
do
echo "The value of $1 is now $1."
shift
done
echo
exit 0
Скрипт 4
#!/bin/sh
# Пример логического оператора AND
Var1=1
Var2=9
while [ $Var1 -eq 1 ] && [ $Var2 -gt 7 ]
do
echo "Var1 is equal to 1 and Var2 is greater than 7"
done
exit 0
Скрипт 5
#!/bin/sh
# Пример логического оператора OR
# В данном случае достаточно, чтобы одно из условий было истинно.
# Выполняется бесконечный цикл с оператором echo
# Прервать: CTRL+C
Var1=2
Var2=5
while [ $Var1 -eq 1 ] || [ $Var2 -gt 7 ]
do
echo "Var1 is equal to 1 and Var@ is greater than 7"
done
exit 0
alex@alex-desktop:~/Lab_rab-3$ ./Script5.sh
Скрипт 6
#!/bin/sh
# Вывод квадратных чисел 10 - 20
for num in 'jot 10 10 20'
do
square_root='echo "scale=5;sqrt($num)"|bc -l'
echo $square_root
done
exit 0