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

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

<p><strong>Глава 14. Подстановка команд</strong></p>

Подстановка команд -- это подстановка результатов выполнения команды[ 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.

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

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