if [ $# -eq "$E_NOARGS" ]
echo "Порядок использования: `basename $0` C-program-file" >&2 # Вывод сообщения на stderr.
type=`eval file $1 | awk '{ print $2, $3, $4, $5 }'`
# "file $1" -- выводит тип файла...
# затем awk удаляет первое поле -- имя файла...
# после этого результат записывается в переменную "type".
correct_type="ASCII C program text"
if [ "$type" != "$correct_type" ]
echo "Этот сценарий работает только с исходными текстами программ на языке C."
# Довольно замысловатый сценарий sed :
# Если вы потратите несколько часов на изучение основ sed, то он станет немного понятнее.
# Следовало бы добавить еще обработку
#+ комментариев, расположенных в одной строке с кодом.
# Оставляю это вам, в качестве упражнения.
# Кроме того, этот сценарий удалит все строки, которые содержат комбинации символов "*/" или "/*",
# не всегда желаемый результат.
# ----------------------------------------------------------------
# Строки, расположенные ниже не будут исполнены из-за стоящей выше команды 'exit 0'.
# Stephane Chazelas предложил другой, альтернативный вариант:
echo "Порядок использования: `basename $0` C-program-file" >&2
WEIRD=`echo -n -e '\377'` # или WEIRD=$'\377'
*"C program text"*) sed -e "s%/\*%${WEIRD}%g;s%\*/%${WEIRD}%g" "$1" \
| tr -d '\n' | tr '\377' '\n';;
# Этот вариант, все еще некорректно обрабатывает такие строки как:
# /* /* ошибочный вложенный комментарий */
# Для обработки специальных случаев (\", \\" ...) придется написать синтаксический анализатор
# (может быть с помощью lex или yacc?).
Команда which command-xxx вернет полный путь к "command-xxx". Очень полезна для того, чтобы узнать -- установлена ли та или иная утилита в системе.
Очень похожа на which, упоминавшуюся выше. Команда whereis command-xxx вернет полный путь к "command-xxx", но кроме того, еще и путь к manpage -- файлу, странице справочника по заданной утилите.
rm: /bin/rm /usr/share/man/man1/rm.1.bz2
Утилита whatis filexxx отыщет "filexxx" в своей базе данных. Может рассматриваться как упрощенный вариант команды man.
whatis (1) - search the whatis database for complete words
Пример 12-25. Исследование каталога /usr/X11R6/bin
# Что находится в каталоге /usr/X11R6/bin?
DIRECTORY="/usr/X11R6/bin"
# Попробуйте также "/bin", "/usr/bin", "/usr/local/bin", и т.д.