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

# Вывод аргумента с подавлением символа перевода строки.

echo -n " "

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

shift

# Переход к следующему аргументу.

done

echo

return 0

}

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

<p><strong>Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого.</strong></p>

#!/bin/bash

# self-source.sh: сценарий, который рекурсивно подключает себя самого."

# Из "Бестолковые трюки", том II.

MAXPASSCNT=100 # Максимальное количество проходов.

echo -n "$pass_count "

# На первом проходе выведет два пробела,

#+ т.к. $pass_count еще не инициализирована.

let "pass_count += 1"

# Операция инкремента неинициализированной переменной $pass_count

#+ на первом проходе вполне допустима.

# Этот прием срабатывает в Bash и pdksh, но,

#+ при переносе сценария в другие командные оболочки,

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

# Лучшим выходом из положения, будет присвоить переменной $pass_count

#+ значение 0, если она неинициализирована.

while [ "$pass_count" -le $MAXPASSCNT ]

do

. $0 # "Подключение" самого себя.

# ./$0 (истинная рекурсия) в данной ситуации не сработает.

done

# Происходящее здесь фактически не является рекурсией как таковой,

#+ т.к. сценарий как бы "расширяет" себя самого

#+ (добавляя новый блок кода)

#+ на каждом проходе цикла 'while',

#+ командой 'source' в строке 22.

#

# Само собой разумеется, что первая строка (#!), вновь подключенного сценария,

#+ интерпретируется как комментарий, а не как начало нового сценария (sha-bang)

echo

exit 0 # The net effect is counting from 1 to 100.

# Very impressive.

# Упражнение:

# ----------

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

exit

Безусловное завершение работы сценария. Команде exit можно передать целое число, которое будет возвращено вызывающему процессу как код завершения. Вообще, считается хорошей практикой завершать работу сценария, за исключением простейших случаев, командой exit 0, чтобы проинформировать родительский процесс об успешном завершении.

Если сценарий завершается командой exit без аргументов, то в качестве кода завершения сценария принимается код завершения последней выполненной команды, не считая самой команды exit.

exec

Это встроенная команда интерпретатора shell, заменяет текущий процесс новым процессом, запускаемым командой exec. Обычно, когда командный интерпретатор встречает эту команду, то он порождает дочерний процесс, чтобы исполнить команду. При использовании встроенной команды exec, оболочка не порождает еще один процесс, а заменяет текущий процесс другим. Для сценария это означает его завершение сразу после исполнения команды exec. По этой причине, если вам встретится exec в сценарии, то, скорее всего это будет последняя команда в сценарии.

Пример 11-20. Команда exec

#!/bin/bash

exec echo "Завершение \"$0\"." # Это завершение работы сценария.

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

# Следующие ниже строки никогда не будут исполнены

echo "Эта строка никогда не будет выведена на экран."

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных