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

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

Жанры

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

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

Шрифт:

[[ ]]

test.

Проверка истинности выражения, заключенного между [[ ]] (зарезервированное слово интерпретатора).

См. описание конструкции [[ ... ]] ниже.

[ ]

элемент массива.

При работе с массивами в квадратных скобках указывается порядковый номер того элемента массива, к которому производится обращение.

Array[1]=slot_1

echo ${Array[1]}

[ ]

диапазон символов.

В регулярных выражениях, в квадратных

скобках задается диапазон искомых символов.

двойные круглые скобки.

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

См. обсуждение, посвященное конструкции (( ... )) .

> &> >& >> <

перенаправление.

Конструкция scriptname >filename перенаправляет вывод scriptname в файл filename. Если файл filename уже существовал, то его прежнее содержимое будет утеряно.

Конструкция command &>filename перенаправляет вывод команды command, как со stdout, так и с stderr, в файл filename.

Конструкция command >&2 перенаправляет вывод со stdout на stderr.

Конструкция scriptname >>filename добавляет вывод scriptname к файлу filename. Если задано имя несуществующего файла, то он создается.

подстановка процесса.

(command)>

<(command)

В операциях сравнения, символы "<" и ">" обозначают операции сравнения строк .

А так же -- операции сравнения целых чисел. См. так же Пример 12-6.

<<

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

<, >

Посимвольное ASCII-сравнение.

veg1=carrots

veg2=tomatoes

if [[ "$veg1" < "$veg2" ]]

then

echo "Не смотря на то, что в словаре слово $veg1 предшествует слову $veg2,"

echo "это никак не отражает мои кулинарные предпочтения."

else

echo "Интересно. Каким словарем вы пользуетесь?"

fi

\<, \>

границы отдельных слов в регулярных выражениях.

bash$ grep '\<the\>' textfile

|

конвейер. Передает вывод предыдущей команды на ввод следующей или на вход командного интерпретатора shell. Этот метод часто используется для связывания последовательности команд в единую цепочку.

echo ls -l | sh

#

Передает вывод "echo ls -l" команлному интерпретатору shell,

#+ тот же результат дает простая команда "ls -l".

cat *.lst | sort | uniq

# Объединяет все файлы ".lst", сортирует содержимое и удаляет повторяющиеся строки.

Конвейеры (еще их называют каналами) -- это классический способ взаимодействия процессов, с помощью которого stdout одного процесса перенаправляется на stdin другого. Обычно используется совместно с командами вывода, такими как cat или echo, от которых поток данных поступает в "фильтр" (команда, которая на входе получает данные, преобразует их и обрабатывает).

cat $filename | grep $search_word

В конвейер могут объединяться и сценарии на языке командной оболочки.

#!/bin/bash

# uppercase.sh : Преобразование вводимых символов в верхний регистр.

tr 'a-z' 'A-Z'

# Диапазоны символов должны быть заключены в кавычки

#+ чтобы предотвратить порождение имен файлов от однобуквенных имен файлов.

exit 0

А теперь попробуем объединить в конвейер команду ls -l с этим сценарием.

bash$ ls -l | ./uppercase.sh

– RW-RW-R-- 1 BOZO BOZO 109 APR 7 19:49 1.TXT

– RW-RW-R-- 1 BOZO BOZO 109 APR 14 16:48 2.TXT

– RW-R--R-- 1 BOZO BOZO 725 APR 20 20:56 DATA-FILE

Выход stdout каждого процесса в конвейере должен читаться на входе stdin последующим, в конвейере, процессом. Если этого не делается, то поток данных блокируется, в результате конвейер будет работать не так как ожидается.

cat file1 file2 | ls -l | sort

# Вывод команды "cat file1 file2" будет утерян.

Конвейер исполняется в дочернем процессе, а посему -- не имеет доступа к переменным сценария.

variable="initial_value"

echo "new_value" | read variable

echo "variable = $variable" # variable = initial_value

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

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

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Часовое имя

Щерба Наталья Васильевна
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Часовое имя

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

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

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

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Прорвемся, опера! Книга 3

Киров Никита
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 3

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

Прорвемся, опера! Книга 2

Киров Никита
2. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 2

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

Злыднев Мир. Дилогия

Чекрыгин Егор
Злыднев мир
Фантастика:
фэнтези
7.67
рейтинг книги
Злыднев Мир. Дилогия