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

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

Жанры

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

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

Шрифт:

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

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

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

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

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

Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Ланьлинский насмешник
Старинная литература:
древневосточная литература
7.00
рейтинг книги
Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

70 Рублей - 2. Здравствуй S-T-I-K-S

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Лучше подавать холодным

Аберкромби Джо
4. Земной круг. Первый Закон
Фантастика:
фэнтези
8.45
рейтинг книги
Лучше подавать холодным

Имперец. Земли Итреи

Игнатов Михаил Павлович
11. Путь
Фантастика:
героическая фантастика
боевая фантастика
5.25
рейтинг книги
Имперец. Земли Итреи

Адвокат империи

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

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

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

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

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Энфис 5

Кронос Александр
5. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 5

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан