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

ЖАНРЫ

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

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

Шрифт:

*) usage;;

esac

# Этот вариант, все еще некорректно обрабатывает такие строки как:

# printf("/*");

# или

# /* /* ошибочный вложенный комментарий */

#

# Для обработки специальных случаев (\", \\" ...) придется написать синтаксический анализатор

# (может быть с помощью lex или yacc?).

exit 0

which

Команда which command-xxx

вернет полный путь к "command-xxx". Очень полезна для того, чтобы узнать -- установлена ли та или иная утилита в системе.

$bash which rm

/usr/bin/rm

whereis

Очень похожа на which, упоминавшуюся выше. Команда whereis command-xxx вернет полный путь к "command-xxx", но кроме того, еще и путь к manpage– - файлу, странице справочника по заданной утилите.

$bash whereis rm

rm: /bin/rm /usr/share/man/man1/rm.1.bz2

whatis

Утилита whatis filexxx отыщет "filexxx" в своей базе данных. Может рассматриваться как упрощенный вариант команды man.

$bash whatis whatis

whatis (1) - search the whatis database for complete words

Пример 12-25. Исследование каталога /usr/X11R6/bin

#!/bin/bash

# Что находится в каталоге /usr/X11R6/bin?

DIRECTORY="/usr/X11R6/bin"

# Попробуйте также "/bin", "/usr/bin", "/usr/local/bin", и т.д.

for file in $DIRECTORY/*

do

whatis `basename $file` # Вывод информации о файле.

done

exit 0

# Вывод этого сценария можно перенаправить в файл:

# ./what.sh >>whatis.db

# или включить постраничный просмотр на экране,

# ./what.sh | less

См. также Пример 10-3.

vdir

Вывод списка файлов в каталоге. Тот же эффект имеет команда ls -l.

Это одна из утилит GNU fileutils.

bash$ vdir

total 10

– rw-r--r-- 1 bozo bozo 4034 Jul 18 22:04 data1.xrolo

– rw-r--r-- 1 bozo bozo 4602 May 25 13:58 data1.xrolo.bak

– rw-r--r-- 1 bozo bozo 877 Dec 17 2000 employment.xrolo

bash ls -l

total 10

– rw-r--r-- 1 bozo bozo 4034 Jul 18 22:04 data1.xrolo

– rw-r--r-- 1 bozo bozo 4602 May 25 13:58 data1.xrolo.bak

– rw-r--r-- 1 bozo bozo 877 Dec 17 2000 employment.xrolo

locate, slocate

Команда locate

определяет местонахождение файла, используя свою базу данных, создаваемую специально для этих целей. Команда slocate– - это защищенная версия locate (которая может оказаться простым псевдонимом команды slocate).

$bash locate hickson

/usr/lib/xephem/catalogs/hickson.edb

readlink

Возвращает имя файла, на который указывает символическая ссылка.

bash$ readlink /usr/bin/awk

../../bin/gawk

strings

Команда strings используется для поиска печатаемых строк в двоичных файлах. Она выводит последовательности печатаемых символов, обнаруженных в заданном файле. Может использоваться для прикидочного анализа дамп-файлов (core dump) или для отыскания информации о типе файла, например для графических файлов неизвестного формата (например, strings image-file | more может вывести такую строчку: JFIF, что говорит о том, что мы имеем дело с графическим файлом в формате jpeg). В сценариях, вероятнее всего, вам придется использовать эту команду в связке с grep или sed. См. Пример 10-7 и Пример 10-9.

Пример 12-26. "Расширенная" команда strings

#!/bin/bash

# wstrings.sh: "word-strings" (расширенная команда "strings")

#

# Этот сценарий фильтрует вывод команды "strings" путем проверки на соответствие

#+ выводимых слов по файлу словаря.

# Таким способом эффективно "отсекается" весь "мусор",

#+ и выводятся только распознанные слова.

# =================================================================

# Стандартная проверка входных аргументов

ARGS=1

E_BADARGS=65

E_NOFILE=66

if [ $# -ne $ARGS ]

then

echo "Порядок использования: `basename $0` filename"

exit $E_BADARGS

fi

if [ !
– f "$1" ] # Проверка наличия файла.

then

echo "Файл \"$1\" не найден."

exit $E_NOFILE

fi

# =================================================================

MINSTRLEN=3 # Минимальная длина строки.

Поделиться с друзьями: