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

# Эта опция должна быть включена, иначе сценарий не сможет "разворачивать" псевдонимы.


alias ll="ls -l"

# В определении псевдонима можно использовать как одиночные ('), так и двойные (") кавычки.


echo "Попытка обращения к псевдониму \"ll\":"

ll /usr/X11R6/bin/mk* #* Работает.


echo


directory=/usr/X11R6/bin/

prefix=mk* # Определить -- не будет ли проблем с шаблонами.

echo "Переменные \"directory\" + \"prefix\" = $directory$prefix"

echo


alias lll="ls -l $directory$prefix"


echo "Попытка обращения к псевдониму \"lll\":"

lll # Список всех файлов в /usr/X11R6/bin, чьи имена начинаются с mk.

# Псевдонимы могут работать с шаблонами.


TRUE=1


echo


if [ TRUE ]

then

alias rr="ls -l"

echo "Попытка обращения к псевдониму \"rr\", созданному внутри if/then:"

rr /usr/X11R6/bin/mk* #* В результате -- сообщение об ошибке!

# К псевдонимам, созданным внутри составных инструкций, нельзя обратиться.

echo "Однако, ранее созданный псевдоним остается работоспособным:"

ll /usr/X11R6/bin/mk*

fi


echo


count=0

while [ $count -lt 3 ]

do

alias rrr="ls -l"

echo "Попытка обращения к псевдониму \"rrr\", созданному внутри цикла \"while\":"

rrr /usr/X11R6/bin/mk* #* Так же возникает ошибка.

# alias.sh: line 57: rrr: command not found

let count+=1

done


echo; echo


alias xyz='cat $0' # Сценарий печатает себя самого.

# Обратите внимание на "строгие" кавычки.

xyz

# Похоже работает,

#+ хотя документация Bash утверждает, что такой псевдоним не должен работать.

#

# Steve Jacobson отметил, что

#+ параметр "$0" интерпретируется непосредственно, во время объявления псевдонима.


exit 0

Команда unalias удаляет псевдоним, объявленный ранее .

Пример 23-2. unalias: Объявление и удаление псевдонимов

#!/bin/bash


shopt -s expand_aliases # Разрешить "разворачивание" псевдонимов.


alias llm='ls -al | more'

llm


echo


unalias llm # Удалить псевдоним.

llm

# Сообщение об ошибке, т.к. команда 'llm' больше не распознается.


exit 0

bash$ ./unalias.sh

total 6

drwxrwxr-x 2 bozo bozo 3072 Feb 6 14:04 .

drwxr-xr-x 40 bozo bozo 2048 Feb 6 14:04 ..

-rwxr-xr-x 1 bozo bozo 199 Feb 6 14:04 unalias.sh


./unalias.sh: llm: command not found


Глава 24. Списки команд

Средством обработки последовательности из нескольких команд служат списки: "И-списки" и "ИЛИ-списки". Они эффективно могут заменить сложную последовательность вложенных if/then или даже case.

Объединение команд в цепочки

И-список

command-1 && command-2 && command-3 && ... command-n

Каждая последующая команда, в таком списке, выполняется только тогда, когда предыдущая команда вернула код завершения true (ноль). Если какая-либо из команд возвращает false (не ноль), то исполнение списка команд в этом месте завершается, т.е. следующие далее команды не выполняются.

Пример 24-1. Проверка аргументов командной строки с помощью "И-списка"

#!/bin/bash

# "И-список"


if [ ! -z "$1" ] && echo "Аргумент #1 = $1" && [ ! -z "$2" ] && echo "Аргумент #2 = $2"

then

echo "Сценарию передано не менее 2 аргументов."

# Все команды в цепочке возвращают true.

else

echo "Сценарию передано менее 2 аргументов."

# Одна из команд в списке вернула false.

fi

# Обратите внимание: "if [ ! -z $1 ]" тоже работает, но, казалось бы эквивалентный вариант

# if [ -n $1 ] -- нет. Однако, если добавить кавычки

# if [ -n "$1" ] то все работает. Будьте внимательны!

# Проверяемые переменные лучше всегда заключать в кавычки.


# То же самое, только без списка команд.

if [ ! -z "$1" ]

then

echo "Аргумент #1 = $1"

fi

if [ ! -z "$2" ]

then

echo "Аргумент #2 = $2"

echo "Сценарию передано не менее 2 аргументов."

else

echo "Сценарию передано менее 2 аргументов."

fi

# Получилось менее элегантно и длиннее, чем с использованием "И-списка".


exit 0

Пример 24-2. Еще один пример проверки аргументов с помощью "И-списков"

#!/bin/bash


ARGS=1 # Ожидаемое число аргументов.

E_BADARGS=65 # Код завершения, если число аргументов меньше ожидаемого.


test $# -ne $ARGS && echo "Порядок использования: `basename $0` $ARGS аргумент(а)(ов)" && exit $E_BADARGS

# Если проверка первого условия возвращает true (неверное число аргументов),

# то исполняется остальная часть строки, и сценарий завершается.


# Строка ниже выполняется только тогда, когда проверка выше не проходит.

# обратите внимание на условие "-ne" -- "не равно" (прим. перев.)

echo "Сценарию передано корректное число аргументов."


exit 0


# Проверьте код завершения сценария командой "echo $?".

Конечно же, с помощью И-списка можно присваивать переменным значения по-умолчанию.

arg1=$@ # В $arg1 записать аргументы командной строки.


[ -z "$arg1" ] && arg1=DEFAULT

# Записать DEFAULT, если аргументы командной строки отсутствуют.


ИЛИ-список

command-1 || command-2 || command-3 || ... command-n

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

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

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