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

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

Жанры

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

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

Шрифт:

Пример 23-1. Псевдонимы в сценарии

#!/bin/bash

shopt -s expand_aliases

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

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 # Код завершения, если число аргументов меньше ожидаемого.

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

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1