Шрифт:
Интервал:
Закладка:
# mkdir /image
# modprobe usb_storage
# mount /dev/sda1 /image
Теперь на новом винчестере нужно создать разделы. Это можно сделать с помощью утилиты fdisk или с помощью программы установки — как вам удобнее. Если же вы восстанавливаете систему после сбоя, ничего создавать не нужно — все уже создано. Не забудьте только создать раздел подкачки (тип раздела /dev/hda2 должен быть Linux swap):
# mkswap /dev/hda2
Теперь развернем образ (обратите внимание на параметры if и of программы dd — на этот раз их аргументы поменялись местами):
# dd if=/image/image.bin of=/dev/hda1
Сейчас нам нужно изменить корневую файловую систему, чтобы попасть «внутрь» развернутого образа:
# mkdir /install
# mount /dev/hda1 /install
# chroot /install /bin/bash
Теперь корнем стал каталог /install, к которому примонтирован новый винчестер, а в качестве командной оболочки используется /bin/bash. Все, что нам осталось сделать — это перезаписать загрузчик. Если у вас LILO, введите команду:
# lilо
А если GRUB:
# grub-install /dev/hda
Теперь перезагрузите компьютер (reboot) — ваша система успешно восстановлена после клонирования.
Глава 8
Язык командного интерпретатора
Для автоматизации часто выполняемых работ по обслуживанию системы вам понадобится объединять команды в сценарии. С простейшими сценариями, обеспечивающими последовательное выполнение перечисленных команд, вы уже познакомились в гл. 3. Уточню только, как система обрабатывает сценарии. Она ищет в первой строке файла сценария выражение
#!/абсолютный/путь/к/программе/интерпретатору/сценария
и передает сценарий ей на обработку. Как правило, эта программа — либо одна из установленных в системе оболочек (например, #!/bin/tcsh), либо один из интерпретирующих языков (#!/usr/bin/perl), либо ваш собственный интерпретатор: #!/usr/bin/my_program. Если сценарий предназначен для обработки оболочкой sh, то ее имя указывать необязательно. Между символами # и ! не должно быть пробелов.
Чтобы непосредственно запустить файл сценария на выполнение, вы должны иметь полномочия на исполнение этого файла. Если он доступен вам только для чтения, выполнить его можно командой
$ /программа/обработчик -f <имя_файла>
Эта глава посвящена языку программирования, встроенному в оболочку bash.
Базовыми операциями этого языка служат все установленные в системе программы, утилиты и сценарии. Оболочка находит их, запускает, обеспечивает передачу им — аргументов, а результатов их работы — другим программам и пользователю, выполняет подстановку переменных и раскрытие шаблонов. Кроме того, оболочка содержит операторы цикла и условные операторы, в результате чего получается мощный язык программирования.
8.1. Параметры
Вместо переменных, как и обычных языках программирования, в bash используется понятие параметра. Именем параметра может быть: слово, состоящее из латинских букв, цифр и знаков подчеркивания, начинающееся с буквы; число; один из специальных символов; *, #, ?, $, !, 0, _.
Тип всех параметров — строковый. Если параметру присвоено значение (хотя бы пустая строка), то говорят, что он задан или установлен. Чтобы сослаться на значение параметра, нужно поставить символ $ перед его именем:
$ echo $0
bash
Параметры делятся на:
♦ переменные оболочки — о них рассказано в п. 3.4.3;
♦ позиционные параметры — их имена представляют собой натуральное число, а значениями служат аргументы с соответствующими номерами, начиная с 1, переданные сценарию или самой оболочке при их запуске;
♦ специальные параметры — их именами служат перечисленные специальные символы, а назначение сведено в таблицу 8.1. Эти параметры — шаблоны, подстановку которых производит оболочка.
Специальные переменные Таблица 8.1
Название Подстановка $0 Имя выполняемого сценария (или, в интерактивном режиме, — самой оболочки) $# Количество позиционных параметров, переданных сценарию $_ Последний аргумент предыдущей из выполнявшихся команд $? Код завершения последней выполненной команды (напоминаю, что значение 0 говорит об успешном завершении, другое — об ошибочном) $$ Номер текущего процесса (PID) $! Номер (PID) последнего асинхронного процесса (команды, выполненной в фоновом режиме) $* Все позиционные параметры, слитые в одну строку: «$*» эквивалентно «$1x$2x…,$n», где x — первый символ значения переменной IFS (internal field separator), по умолчанию — пробел [email protected] Все позиционные параметры, подлежащие дальнейшему разбору: «[email protected]» эквивалентно «$1» «$2» ... «$n»Напоминаю, что специальные символы в значениях параметров нужно экранировать. Экранировать одиночный символ можно символом «» (обратный слэш), несколько — апострофами или двойными кавычками. Разница в том, что внутри двойных кавычек выполняются подстановки значений: сравните вывод команд echo '$0' и echo "$0".
Организовать диалоговый ввод значения переменной можно с помощью встроенной команды read:
echo -n "Продолжать? (y/n): "
read yesno
echo $yesno
Ключ -n команды echo не выводит символ новой строки в конце сообщения, то есть не переводит строку. Команда read читает значение, введённое пользователем с клавиатуры, и записывает его в переменную yesno. Последняя команда выводит только что введенное значение.
Одной командой read можно прочитать несколько переменных:
read name middle lastname
Пользователь должен ввести значения переменных, разделяя их пробелами, и для окончания ввода нажать <Ввод>. Если введено меньше значений, чем нужно, оставшимся переменным будет присвоена пустая строка. Если больше, то весь остаток строки будет присвоен последней из перечисленных переменных.
8.2. Подстановки
Кроме подстановки обычных переменных (п.3.4.4) и раскрытия шаблонов имен файлов (п.3.4.5), оболочка bash умеет выполнять еще и такие подстановки:
♦ Подстановка тильды:
~ заменяется на имя домашнего каталога пользователя, запустившего сценарий;
~+ заменяется на путь к текущему каталогу;
~- заменяется на путь к предыдущему каталогу.
♦ Раскрытие скобок:
строка1{строка2,строка3...}строкаN заменяется на: строка1строка2строкаN строка1строка3строкаN ...
Пробелов внутри скобок быть не должно. Эта функция полезна, когда нужно применить одну команду к нескольким файлам, не подходящим под общий шаблон:
$ cat /home/den/linuxbook/{intro,param,subst} > glava8
♦ Подстановка арифметических выражений:
$((выражение)) или $[выражение] — эквивалентные формы записи. Внутри выражения выполняются подстановки параметров. Приоритет арифметических операций — обычный, подробнее см. man bash, секция ARITHMETIC EVALUATION.
Например, количество часов, прошедшее с момента запуски оболочки, можно подсчитать командой:
$ echo $(( $SECONDS/3600 ))
8.3. Массивы
Интерпретатор bash поддерживает одномерные массивы с неограниченным числом элементов. В других оболочках существуют определенные ограничения на массивы, например, в ksh максимальное число элементов массива ограничено 1024 элементами.
Нумерация элементов начинается с нуля. Тип элементов массива, как и тип параметров, строковый. Присвоить значение элементу массива можно с помощью такой конструкции:
Имя_массива[индекс] = значение, например:
$ weekday[0]=Понедельник
$ weekday[4]=Пятница
Обратиться к значению элемента массива можно следующим образом:
${имя_массива[индекс]}
Например, вывести значение первого элемента массива можно так:
$ echo ${weekday[0]}
Обратиться ко всем элементам массива сразу можно с помощью одного из выражений:
${имя_массива[*]} или ${имя_массива[@]}, например:
$echo ${weekday[*]}
Понедельник Пятница
Второе выражение нужно использовать, если значение хотя бы одного элемента массива может содержать пробелы.
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение