Чтение онлайн

на главную - закладки

Жанры

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

# При хранении наборов данных, таких как таблиц баз данных или словарей, на электронном диске

#+ вы получаете высокую скорость работы с этими наборами, поскольку время доступа к ОЗУ

# неизмеримо меньше времени доступа к жесткому диску.

E_NON_ROOT_USER=70 # Сценарий должен запускаться с правами root.

ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk

SIZE=2000 # 2K блоков (измените, если это необходимо)

BLOCKSIZE=1024 # размер блока -- 1K (1024 байт)

DEVICE=/dev/ram0 # Первое устройство ram

username=`id -nu`

if [ "$username" != "$ROOTUSER_NAME" ]

then

echo "Сценарий

должен запускаться с правами root."

exit $E_NON_ROOT_USER

fi

if [ !
– d "$MOUNTPT" ] # Проверка наличия точки монтирования,

then #+ благодаря этой проверке, при повторных запусках сценария

mkdir $MOUNTPT #+ ошибки возникать не будет.

fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # Очистить электронный диск.

mke2fs $DEVICE # Создать файловую систему ext2.

mount $DEVICE $MOUNTPT # Смонтировать.

chmod 777 $MOUNTPT # Сделать электронный диск доступным для обычных пользователей.

# Но при этом, только root сможет его отмонтировать.

echo "Электронный диск \"$MOUNTPT\" готов к работе."

# Теперь электронный диск доступен для любого пользователя в системе.

# Внимание! Электронный диск -- это энергозависимое устройство! Все данные, хранящиеся на нем,

#+ будут утеряны при остановке или перезагрузке системы.

# Если эти данные представляют для вас интерес, то сохраняйте их копии в обычном каталоге.

# После перезагрузки, чтобы вновь создать электронный диск, запустите этот сценарий.

# Простое монтирование /mnt/ramdisk, без выполнения подготовительных действий, не будет работать.

exit 0

Глава 29. Отладка сценариев

Командная оболочка Bash не имеет своего отладчика, и не имеет даже каких либо отладочных команд или конструкций [ 59 ] . Синтаксические ошибки или опечатки часто вызывают сообщения об ошибках, которые которые практически никак не помогают при отладке.

59

Bash debugger (автор: Rocky Bernstein) частично возмещает этот недостаток.

Пример 29-1. Сценарий, содержащий ошибку

#!/bin/bash

# ex74.sh

# Этот сценарий содержит ошибку.

a=37

if [$a -gt 27 ]

then

echo $a

fi

exit 0

В результате исполнения этого сценария вы получите такое сообщение:

./ex74.sh: [37: command not found

Что в этом сценарии может быть неправильно (подсказка: после ключевого слова if)?

Пример 29-2. Пропущено ключевое слово

#!/bin/bash

# missing-keyword.sh:

#

Какое сообщение об ошибке будет выведено, при попытке запустить этот сценарий?

for a in 1 2 3

do

echo "$a"

# done # Необходимое ключевое слово 'done' закомментировано.

exit 0

На экране появится сообщение:

missing-keyword.sh: line 11: syntax error: unexpected end of file

Обратите внимание, сообщение об ошибке будет содержать номер не той строки, в которой возникла ошибка, а той, в которой Bash точно установил наличие ошибочной ситуации.

Сообщения об ошибках могут вообще не содержать номера строки, при исполнении которой эта ошибка появилась.

А что делать, если сценарий работает, но не так как ожидалось? Вот пример весьма распространенной логической ошибки.

Пример 29-3. test24

#!/bin/bash

# Ожидается, что этот сценарий будет удалять в текущем каталоге

#+ все файлы, имена которых содержат пробелы.

# Но он не работает. Почему?

badname=`ls | grep ' '`

# echo "$badname"

rm "$badname"

exit 0

Попробуйте найти ошибку, раскомментарив строку echo "$badname". Инструкция echo очень полезна при отладке сценариев, она позволяет узнать -- действительно ли вы получаете то, что ожидали получить.

В данном конкретном случае, команда rm "$badname" не дает желаемого результата потому, что переменная $badname взята в кавычки. В результате, rm получает единственный аргумент (т.е. команда будет считать, что получила имя одного файла). Частично эта проблема может быть решена за счет удаления кавычек вокруг $badname и установки переменной $IFS так, чтобы она содержала только символ перевода строки, IFS=$'\n'. Однако, существует более простой способ выполнить эту задачу.

# Правильный способ удаления файлов, в чьих именах содержатся пробелы.

rm *\ *

rm *" "*

rm *' '*

# Спасибо S.C.

В общих чертах, ошибочными можно считать такие сценарии, которые

1. "сыплют" сообщениями о "синтаксических ошибках" или

2. запускаются, но работают не так как ожидалось (логические ошибки).

3. запускаются, делают то, что требуется, но имеют побочные эффекты (логическая бомба).

Инструменты, которые могут помочь при отладке неработающих сценариев

1. команда echo, в критических точках сценария, поможет отследить состояние переменных и отобразить ход исполнения.

2. команда-фильтр tee, которая поможет проверить процессы и потоки данных в критических местах.

3. ключи -n -v -x

sh -n scriptname– - проверит наличие синтаксических ошибок, не запуская сам сценарий. Того же эффекта можно добиться, вставив в сценарий команду set -n или set -o noexec. Обратите внимание, некоторые из синтаксических ошибок не могут быть выявлены таким способом.

Поделиться:
Популярные книги

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

"Малыш"

Рам Янка
2. Девочка с придурью
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Малыш

Мастер Разума II

Кронос Александр
2. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Мастер Разума II

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Не грози Дубровскому! Том IX

Панарин Антон
9. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том IX

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов