лекция6

advertisement
Операционная система
Linux
Лекция №6
Командная оболочка (shell, bash) является интерфейсом
командной строки в Unix-подобных ОС, то есть выполняет
команды, которые подает пользователь, или которые читаются с
файлов.
Файлы с командами оболочки называются сценариями
(скриптами, программами) оболочки. Эти сценарии не
компилируются, а интерпретируются оболочкой. Это означает,
что оболочка считывает сценарий от начала до конца, строку за
строкой, ища указанные там команды и выполняя их; в отличие
от этого подхода, компилятор преобразует целую программу к
виду, пригодному для выполнения машиной — потом файл с
таким кодом можно использовать в сценарии оболочки.
Сценарии оболочки очень широко применяются в Linux. Ими
являются большинство конфигурационных файлов, как
общесистемных, так и пользовательских, и многие прикладные
программы.
2
Пошаговое создание скрипта
1. Запустить текстовый редактор gedit (Приложения
->Стандартные), сохранить новый пустой файл под
именем script1.sh в каталоге с вашей фамилией. Затем
набрать в нем следующие строки
2. #!/bin/bash (обязательная первая строка скрипта —
путь к оболочке)
3. mkdir testdir
cd testdir
touch file1 file2 file3
ls -al
тело скрипта (команды)
4.[student@debian~]$ chmod u+x script1 (бит выполнения)
5.[student@debian~]$ ./script1.sh (или bash script1.sh)
(запуск скрипта)
3
Точка и слэш здесь заменяют
абсолютный путь к файлу
Комментарии в скрипте — все строки начинающиеся с #
являются комментариями (кроме самой первой).
Переменные разделяются на системные и пользовательские.
Системные переменные определяются и хранятся в окружении
родительской оболочки (переменные окружения). Имена этих
переменных состоят из заглавных букв, и могут быть показаны
командой "env" без аргументов, либо по отдельности командой
"echo", например "echo $HOME". Примерами системных
переменных являются PWD, HOME, USER.
Пользовательские переменные – их имена не могут
начинаться с цифр, вместо пробела используется знак
подчеркивания - например "val_1". Присваивание значения с
помощью знака = без пробелов val_1=123. Использовать или
показать значение "val_1" можно с помощью знака $
Пример:
[student@debian~]$ val_1=123
[student@debian~]$ echo "this is $val_1"
[student@debian~]$ this is 123
4
Аргументы командной строки
Это переменные, которые содержат аргументы выполняемого
скрипта. Доступ к этим переменным может быть получен через
имена $1, $2, ... $n, где $1 первый аргумент командной строки, $2
второй, и так далее. Аргументы располагаются после имени
скрипта и разделены пробелами. Переменная $0 - это имя
скрипта. Переменная $? - это код возврата, любое значение
кроме 0 означает завершение программы с ошибкой.
Пример:
[student@debian~]$ ./script1.sh 100 (скрипту передается значение
первого аргумента 100, которое может быть использовано в
командах внутри скрипта, обращение к нему через имя $1)
Ввод-вывод в скриптах
Для ввода с клавиатуры используется команда ''read''. Эта
команда считает значения набранные на клавиатуре, и присвоит
каждое определенной переменной .
read <имя_переменной>
Для вывода используется команда ''echo''.
echo <имя_переменной>
5
Арифметические операции
●
●
●
В bash возможно вычисление только целочисленных
выражений
Переменные и оператор заключаются в квадратные скобки
выражения начинающегося на знак $. Синтаксис:
$[арифметические операции]
например:
●
echo $[12 * 10]
●
echo $[5 / 2]
●
echo $[7 % 4]
●
n=$[$n+1] (увеличение счетчика на единицу)
●
Или можно использовать написание $((...)) более
независимо от типа командной оболочки.
6
Сравнение переменных
В скриптах шелла можно выполнять различные сравнения.
Если значения сравниваемых переменных являются
числами, то надо использовать следующие опции:
-eq Равно
-ne Не равно
-lt
Меньше
-le Меньше или равно
-gt Больше
-ge Больше или равно
●
Если переменные являются строками, то надо
использовать эти опции:
= Равно
!= Не равно
< Первая строка отсортирована перед второй
> Первая строка отсортирована после второй
●
7
Оператор условия "if"
Синтаксис:
Обратите внимание на пробелы после
if [ <условие> ]
открывающей скобки и перед закрывающей скобкой
then
<любые выражения или операторы>
fi
Пример (script2.sh)
#!/bin/bash
echo "Login:"
read username
if [ "$username" = "student" ]
then
echo "Login correct"
else
echo "Bad login"
fi
8
Пример меню на текстовой основе (script3.sh)
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Hello" ]; then
echo "Hello World"
exit
elif [ "$opt" = "Quit" ]; then
echo "done"
exit
else
clear
echo "Bad option"
fi
done
9
Задание на практику
1. Набрать и запустить на выполнение скрипты со слайдов
№3, 8, 9.
2. Написать скрипт, который имеет 2 аргумента командной
строки, и выводит их значения в строках «first arg = __»,
«second arg = __», сравнивает их и выводит результат
сравнения, а также строку «script name is __» и код
возврата.
3. Модифицировать скрипт так, чтобы код возврата был
отличен от 0.
4. Написать скрипт, который реализует меню на текстовой
основе для работы с файлами. Скрипт запрашивает у
пользователя имя файла, потом в зависимости от опции
либо открывает этот файл на редактирование (команда
gedit <имя файла>), либо копирует его в другую
10
директорию, либо удаляет.
Download