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

на главную

Жанры

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

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

Шрифт:

Записывайте сценарии в структурированной форме, это облегчит их последующую реорганизацию и оптимизацию. Помните, что значительная часть методов оптимизации кода, существующих в языках высокого уровня, вполне применима и к сценариям, однако есть и такие, которые не могут применяться. Основной критерий здесь -- это здравый смысл.

Прекрасный пример того, как оптимизация может сократить время работы сценария, вы найдете в Пример 12-32.

33.7. Разные советы

Для

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

# Добавление (>>) учетной записи, об использовании сценария, в файл отчета.

date>> $SAVE_FILE # Дата и время.

echo $0>> $SAVE_FILE # Название сценария.

echo>> $SAVE_FILE # Пустая строка -- как разделитель записей.

# Не забудьте определить переменную окружения SAVE_FILE в ~/.bashrc

# (что нибудь, типа: ~/.scripts-run)

Оператор >> производит добавление строки в конец файла. А как быть, если надо добавить строку в начало существующего файла?

file=data.txt

title="***Это титульная строка в текстовом файле***"

echo $title | cat - $file >$file.new

# "cat -" объединяет stdout с содержимым $file.

# В результате получится

#+ новый файл $file.new, в начало которого добавлена строка $title.

Само собой разумеется, то же самое можно сделать с помощью sed.

Сценарий командной оболочки может использоваться как команда внутри другого сценария командной оболочки, Tcl, или wish сценария или, даже в Makefile. Он может быть вызван как внешняя команда из программы на языке C, с помощью функции system, т.е. system("script_name");.

Собирайте свои библиотеки часто используемых функций и определений. Эти "библиотеки" могут быть "подключены" к сценариям, с помощью команды точка (.) или source.

# Сценарий-библиотека

# ------ -------

# Обратите внимание:

# Здесь нет sha-bang ("#!").

# И нет "живого кода".

# Определения переменных

ROOT_UID=0 # UID root-а, 0.

E_NOTROOT=101 # Ошибка -- "обычный пользователь".

MAXRETVAL=255 # Максимальное значение, которое могут возвращать функции.

SUCCESS=0

FAILURE=-1

# Функции

Usage # Сообщение "Порядок использования:".

{

if [ -z "$1" ] # Нет аргументов.

then

msg=filename

else

msg=$@

fi

echo "Порядок

использования: `basename $0` "$msg""

}

Check_if_root # Проверка прав пользователя.

{ # из примера "ex39.sh".

if [ "$UID" -ne "$ROOT_UID" ]

then

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

exit $E_NOTROOT

fi

}

CreateTempfileName # Создание "уникального" имени для временного файла.

{ # Из примера "ex51.sh".

prefix=temp

suffix=`eval date +%s`

Tempfilename=$prefix.$suffix

}

isalpha2 # Проверка, состоит ли строка только из алфавитных символов.

{ # Из примера "isalpha.sh".

[ $# -eq 1 ] || return $FAILURE

case $1 in

*[!a-zA-Z]*|"") return $FAILURE;;

*) return $SUCCESS;;

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

}

abs # Абсолютное значение.

{ # Внимание: Максимально возможное возвращаеиое значение

# не может превышать 255.

E_ARGERR=-999999

if [ -z "$1" ] # Проверка наличия входного аргумента.

then

return $E_ARGERR # Код ошибки, обычно возвращаемый в таких случаях.

fi

if [ "$1" -ge 0 ] # Если не отрицательное,

then #

absval=$1 # оставить как есть.

else # Иначе,

let "absval = (( 0 - $1 ))" # изменить знак.

fi

return $absval

}

tolower # Преобразование строк символов в нижний регистр

{

if [ -z "$1" ] # Если нет входного аргумента,

then #+ выдать сообщение об ошибке

echo "(null)"

return #+ и выйти из функции.

fi

echo "$@" | tr A-Z a-z

# Преобразовать все входные аргументы ($@).

return

# Для записи результата работы функции в переменную, используйте операцию подстановки команды.

# Например:

# oldvar="A seT of miXed-caSe LEtTerS"

# newvar=`tolower "$oldvar"`

# echo "$newvar" # a set of mixed-case letters

#

# Упражнение: Добавьте в эту библиотеку функцию перевода символов в верхний регистр.

# toupper [это довольно просто].

}

Для повышения ясности комментариев, выделяйте их особым образом.

## Внимание!

rm -rf *.zzy ## Комбинация ключей "-rf", в команде "rm", чрезвычайно опасна,

##+ особенно при удалении по шаблону.

#+ Продолжение комментария на новой строке.

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

Заход. Солнцев. Книга XII

Скабер Артемий
12. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Заход. Солнцев. Книга XII

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Приручитель женщин-монстров. Том 3

Дорничев Дмитрий
3. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 3

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Сердце Дракона. Том 19. Часть 1

Клеванский Кирилл Сергеевич
19. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.52
рейтинг книги
Сердце Дракона. Том 19. Часть 1

Пустоцвет

Зика Натаэль
Любовные романы:
современные любовные романы
7.73
рейтинг книги
Пустоцвет

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Бездомыш. Предземье

Рымин Андрей Олегович
3. К Вершине
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Бездомыш. Предземье

Столичный доктор. Том II

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

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Измена. Верну тебя, жена

Дали Мила
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верну тебя, жена