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

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

Жанры

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

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

Шрифт:

#!/bin/bash

# cvt.sh:

# Преобразование всех файлов в заданном каталоге,

#+ из графического формата MacPaint, в формат "pbm".

# Используется утилита "macptopbm", входящая в состав пакета "netpbm",

#+ который сопровождается Brian Henderson ([email protected]).

# Netpbm -- стандартный пакет для большинства дистрибутивов Linux.

OPERATION=macptopbm

SUFFIX=pbm #

Новое расширение файла.

if [ -n "$1" ]

then

directory=$1 # Если каталог задан в командной строке при вызове сценария

else

directory=$PWD # Иначе просматривается текущий каталог.

fi

# Все файлы в каталоге, имеющие расширение ".mac", считаются файлами

#+ формата MacPaint.

for file in $directory/* # Подстановка имен файлов.

do

filename=${file%.*c} # Удалить расширение ".mac" из имени файла

#+ ( с шаблоном '.*c' совпадают все подстроки

#+ начинающиеся с '.' и заканчивающиеся 'c',

$OPERATION $file > "$filename.$SUFFIX"

# Преобразование с перенаправлением в файл с новым именем

rm -f $file # Удаление оригинального файла после преобразования.

echo "$filename.$SUFFIX" # Вывод на stdout.

done

exit 0

# Упражнение:

# --------

# Сейчас этот сценарий конвертирует *все* файлы в каталоге

# Измените его так, чтобы он конвертировал *только* те файлы,

#+ которые имеют расширение ".mac".

Замена подстроки

${string/substring/replacement}

Замещает первое вхождение $substring строкой $replacement.

${string//substring/replacement}

Замещает все вхождения $substring строкой $replacement.

stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz} # xyzABC123ABCabc

# Замена первой подстроки 'abc' строкой 'xyz'.

echo ${stringZ//abc/xyz} # xyzABC123ABCxyz

#

Замена всех подстрок 'abc' строкой 'xyz'.

${string/#substring/replacement}

Подстановка строки $replacement вместо $substring. Поиск ведется с начала строки $string.

${string/%substring/replacement}

Подстановка строки $replacement вместо $substring. Поиск ведется с конца строки $string.

stringZ=abcABC123ABCabc

echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc

# Поиск ведется с начала строки

echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ

# Поиск ведется с конца строки

9.2.1. Использование awk при работе со строками

В качестве альтернативы, Bash-скрипты могут использовать средства awk при работе со строками.

Пример 9-12. Альтернативный способ извлечения подстрок

#!/bin/bash

# substring-extraction.sh

String=23skidoo1

# 012345678 Bash

# 123456789 awk

# Обратите внимание на различия в индексации:

# Bash начинает индексацию с '0'.

# Awk начинает индексацию с '1'.

echo ${String:2:4} # с 3 позиции (0-1-2), 4 символа

# skid

# В эквивалент в awk: substr(string,pos,length).

echo | awk '

{ print substr("'"${String}"'",3,4) # skid

}

'

# Передача пустого "echo" по каналу в awk, означает фиктивный ввод,

#+ делая, тем самым, ненужным предоставление имени файла.

exit 0

9.2.2. Дальнейшее обсуждение

Дополнительную информацию, по работе со строками, вы найдете в разделе Section 9.3 и в секции, посвященной команде expr. Примеры сценариев:

1. Пример 12-6

2. Пример 9-15

3. Пример 9-16

4. Пример 9-17

5. Пример 9-19

9.3. Подстановка параметров

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

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

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

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

Фиктивная жена

Шагаева Наталья
1. Братья Вертинские
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Фиктивная жена

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Барон Дубов 4

Карелин Сергей Витальевич
4. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 4

Лекарь для захватчика

Романова Елена
Фантастика:
попаданцы
историческое фэнтези
фэнтези
5.00
рейтинг книги
Лекарь для захватчика

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

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

Ваше Сиятельство 9

Моури Эрли
9. Ваше Сиятельство
Фантастика:
боевая фантастика
попаданцы
стимпанк
аниме
фэнтези
5.00
рейтинг книги
Ваше Сиятельство 9

Господин следователь

Шалашов Евгений Васильевич
1. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Полковник Гуров. Компиляция (сборник)

Макеев Алексей Викторович
Полковник Гуров
Детективы:
криминальные детективы
шпионские детективы
полицейские детективы
боевики
крутой детектив
5.00
рейтинг книги
Полковник Гуров. Компиляция (сборник)

Первый среди равных. Книга V

Бор Жорж
5. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга V

Землянка для двух нагов

Софи Ирен
Фантастика:
космическая фантастика
5.00
рейтинг книги
Землянка для двух нагов