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

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

Жанры

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

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

Шрифт:

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

Прекрасный пример того, как оптимизация может сократить время работы сценария, вы найдете в Пример 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", чрезвычайно опасна,

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

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

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

Господин моих ночей (Дилогия)

Ардова Алиса
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Господин моих ночей (Дилогия)

Его нежеланная истинная

Кушкина Милена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его нежеланная истинная

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Идеальный мир для Лекаря 26

Сапфир Олег
26. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 26

Отверженный VIII: Шапка Мономаха

Опсокополос Алексис
8. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VIII: Шапка Мономаха

Хозяйка забытой усадьбы

Воронцова Александра
5. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка забытой усадьбы

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Душелов. Том 3

Faded Emory
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Душелов. Том 3

Ползком за монстрами!

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

Аргумент барона Бронина

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

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

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