
- •4. Основы программирования на командном языке (sh)
- •4.1. Переменные Shell
- •4.2. Присваивание значений переменным
- •4.3. Вывод содержимого переменных
- •4.4. Специальные символы
- •4.4.1. Кавычки
- •4.4.2. Двойные кавычки
- •4.7. Построим простейшую Shell-процедуру (командный файл)
- •4.8. Специальные параметры интерпретатора команд
- •4.9. Простые условные операторы
- •4.9.1. And-if (&&) – Условное и
- •4.9.2. Or-if (||) – Условное или
- •4.10. Команда test
- •4.10.1. Cравнение строк
- •4.10.2. Cравнение чисел
- •4.10.3. Проверка состояния файла
- •4.10.4. Использование команды test в операторе if
- •4.11. Управляющие конструкции высокого уровня
- •4.11.1. Условный оператор (if)
- •4.12. Операторы цикла (for и while)
- •4.12.1. Оператор цикла for
- •Пример_1: Процедура print1 печатает (выводит в стандартный вывод) три файла, перечисленные в списке значений цикла for.
- •4.12.2. Оператор цикла while
- •4.13. Оператор выбора case
- •4.14. Арифметические операции с переменными Shell
- •4.15 Стандартные переменные Shell
- •4.16 Экспортирование переменных
- •4.17 Встроенные команды интерпретатора sh
- •4.18. Системные файлы
- •4.19. Запуск и режимы работы sh
4.13. Оператор выбора case
Оператор выбора case удобен для организации ветвления программы на основе совпадения шаблонов (образцов).
Можно выполнить подобную операцию с помощью цепочки if-else if, но оператор case короче, удобнее и нагляднее:
Формат оператора case:
case переменная
in
шаблон 1) команда
команда
. . . . . . .
команда ;;
. . . . . . . . . . . . . . . . . . . .
шаблон N. команда
команда
. . . . . . .
команда ;;
esac
Если значение переменной совпало со значением шаблона, то выполняются команды до ';;' , затем те что после esac.
Пример_1: Командная процедура menu
echo "
ls
date
pwd
which function do you wish? \c"
read command
case "$command"
in
ls –Fc
;;
date
;;
*) echo not available
;;
esac
4.14. Арифметические операции с переменными Shell
Shell не предназначен для проведения арифметических операций с числами. Параметры рассматриваются как строки. Однако для проведения операций с целыми числами всё-таки существует команда expr.
В команде expr используются следующие арифметические операции:
+ - / * %
Команда expr посылает результат на стандартный вывод.
Примеры:
%expr 3 + 2
5
%expr 7 "*" 8 (или так: %expr 7 \* 8
56
%n=100
%expr $n + 1
101
Так как expr посылает результат на стандартный вывод, можно использовать обратные апострофы, чтобы присвоить результат работы expr переменной:
%i=`expr 3 + 2`
echo $i
5
%n=100
%n=`expr $n + 1
echo $n
101
4.15 Стандартные переменные Shell
Некоторые имена переменных зарезервированы в Shell для специальных целей.
Вот некоторые из них:
HOME каталог, в который пользователь попадает при входе в систему или при выполнении команды cd без аргументов;
LOGNAME регистрационное имя пользователя;
PATH список полных имен каталогов, в которых производится поиск файла при указании его неполного имени;
IFS последовательность символов, являющихся разделителем в командной строке;
TERM тип терминала;
PS1 первичное приглашение интерпретатора команд (для интерпретатора sh это - '$'; для csh -'%')4
PS2 вторичное приглашение (по умолчанию - '>'); В интерактивном режиме перед вводом команды интерпретатор выводит первичную подсказку. Если нажата клавиша Enter, но для завершения команды требуется дальнейший ввод, то выводится вторичное приглашение.
Примечание. Список стандартных переменных и переменных, определенных пользователем, можно вывести по команде set.
Пример_1: ввод с клавиатуры командной процедуры, состоящей из нескольких строк:
%for n in 1 2 3
>do # продолжение ввода
>echo $n # командной процедуры
>done # после вторичной подсказки
1
2
3
%
Пример_2: модификация стандартной переменной:
%HOME=/usr/home/mydir
%PS2="=>"
Пример_3: к значению переменной PATH можно добавить новый каталог:
PATH=$PATH:/home/mydir
4.16 Экспортирование переменных
Часто возникает вопрос: можно ли передавать переменные Shell, созданные в одной программе, другой программе. Иначе говоря, может ли программа получить доступ к некоторым общим переменным? (В пределах одного сеанса).
Для этих целей применяется метод экспортирования переменных по команде export:
%export <список переменных>
Всякая программа, которая впоследствии будет исполняться, может получить доступ к экспортированным переменным, но не может их изменить
Очень часто экспортированные переменные используются при настройке программных продуктов:
mysqldir=/usr/mysql
export mysqldir
PATH=$PATH:$mysqldir/bin
export PATH
Команда export без аргументов позволяет просмотреть весь список экспортированных переменных.