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

Упражнение 2. Просмотрите другие, более сложные сценарии из /etc/rc.d/init.d. Попробуйте разобраться в их работе. Проверьте их работу, следуя рекомендациям, приведенным выше. За дополнительной информацией вы можете обратиться к документу sysvinitfiles в каталоге /usr/share/doc/initscripts-?.??, который входит в пакет документации к "initscripts".


Глава 14. Подстановка команд

Подстановка команд -- это подстановка результатов выполнения команды[ 43 ] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении.

Классический пример подстановки команд -- использование обратных одиночных кавычек (`...`). Команды внутри этих кавычек представляют собой текст командной строки.

script_name=`basename $0`

echo "Имя этого файла-сценария: $script_name."


Вывод от команд может использоваться: как аргумент другой команды, для установки значения переменной и даже для генерации списка аргументов цикла for.

rm `cat filename` # здесь "filename" содержит список удаляемых файлов.

#

# S. C. предупреждает, что в данном случае может возникнуть ошибка "arg list too long".

# Такой вариант будет лучше: xargs rm -- < filename

# ( -- подходит для случая, когда "filename" начинается с символа "-" )


textfile_listing=`ls *.txt`

# Переменная содержит имена всех файлов *.txt в текущем каталоге.

echo $textfile_listing


textfile_listing2=$(ls *.txt) # Альтернативный вариант.

echo $textfile_listing2

# Результат будет тем же самым.


# Проблема записи списка файлов в строковую переменную состоит в том,

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

#

# Как вариант решения проблемы -- записывать список файлов в массив.

# shopt -s nullglob # При несоответствии, имя файла игнорируется.

# textfile_listing=( *.txt )

#

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


Подстанавливаемая команда может получиться разбитой на отдельные слова.

COMMAND `echo a b` # 2 аргумента: a и b


COMMAND "`echo a b`" # 1 аргумент: "a b"


COMMAND `echo` # без аргументов


COMMAND "`echo`" # один пустой аргумент


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


Даже когда не происходит разбиения на слова, операция подстановки команд может удалять завершающие символы перевода строки.

# cd "`pwd`" # Должна выполняться всегда.

# Однако...


mkdir 'dir with trailing newline

'


cd 'dir with trailing newline

'


cd "`pwd`" # Ошибка:

# bash: cd: /tmp/dir with trailing newline: No such file or directory


cd "$PWD" # Выполняется без ошибки.


old_tty_setting=$(stty -g) # Сохранить настройки терминала.

echo "Нажмите клавишу "

stty -icanon -echo # Запретить "канонический" режим терминала.

# Также запрещает эхо-вывод.

key=$(dd bs=1 count=1 2> /dev/null) # Поймать нажатие на клавишу.

stty "$old_tty_setting" # Восстановить настройки терминала.

echo "Количество нажатых клавиш = ${#key}." # ${#variable} = количество символов в переменной $variable

#

# Нажмите любую клавишу, кроме RETURN, на экране появится "Количество нажатых клавиш = 1."

# Нажмите RETURN, и получите: "Количество нажатых клавиш = 0."

# Символ перевода строки будет "съеден" операцией подстановки команды.


Спасибо S.C.


При выводе значений переменных, полученных в результате подстановки команд, командой echo, без кавычек, символы перевода строки будут удалены. Это может оказаться неприятным сюрпризом.

dir_listing=`ls -l`

echo $dir_listing # без кавычек


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


# Однако, вы получите:

# total 3 -rw-rw-r-- 1 bozo bozo 30 May 13 17:15 1.txt -rw-rw-r-- 1 bozo

# bozo 51 May 15 20:57 t2.sh -rwxr-xr-x 1 bozo bozo 217 Mar 5 21:13 wi.sh


# Символы перевода строки были заменены пробелами.


echo "$dir_listing" # в кавычках

# -rw-rw-r-- 1 bozo 30 May 13 17:15 1.txt

# -rw-rw-r-- 1 bozo 51 May 15 20:57 t2.sh

# -rwxr-xr-x 1 bozo 217 Mar 5 21:13 wi.sh


Подстановка команд позволяет даже записывать в переменные содержимое целых файлов, с помощью перенаправления или команды cat.

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

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

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

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

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

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

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

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

Финансы / Программирование, программы, базы данных
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT