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

Шрифт
Интервал

Таблица H-1. Ключевые слова/переменные/операторы пакетных файлов DOS и их аналоги командной оболочки

Операторы пакетных файловЭквивалентные команды в UNIXОписание
%$префикс аргументов командной строки
/-признак ключа (опции)
\/разделитель имен каталогов в пути
===(равно) сравнение строк
!==!!=(не равно) сравнение строк
||конвейер (канал)
@set +vне выводить текущую команду
**"шаблонный символ" в имени файла
>>перенаправление (с удалением существующего файла)
>>>>перенаправление (с добавлением в конец существующего файла)
<<перенаправление ввода stdin
%VAR%$VARпеременная окружения
REM#комментарий
NOT!отрицание последующего условия
NUL/dev/null"черная дыра" для того, чтобы "спрятать" вывод команды
ECHOechoвывод (в Bash имеет большое число опций)
ECHO.echoвывод пустой строки
ECHO OFFset +vне выводить последующие команды
FOR %%VAR IN (LIST) DOfor var in [list]; doцикл "for"
:LABELэквивалент отсутствует (нет необходимости)метка
GOTOэквивалент отсутствует (используйте функции)переход по заданной метке
PAUSEsleepпауза, или ожидание, в течение заданного времени
CHOICEcase или selectвыбор из меню
IFifусловный оператор if
IF EXIST FILENAMEif [ -e filename ]проверка существования файла
IF !%N==!if [ -z "$N" ]Проверка: параметр "N" отсутствует
CALLsource или . (оператор "точка")"подключение" другого сценария
COMMAND /Csource или . (оператор "точка")"подключение" другого сценария (то же, что и CALL)
SETexportустановить переменную окружения
SHIFTshiftсдвиг списка аргументов уомандной строки влево
SGN-lt или -gtзнак (целого числа)
ERRORLEVEL$?код завершения
CONstdin"консоль" (stdin)
PRN/dev/lp0устройство принтера
LPT1/dev/lp0устройство принтера
COM1/dev/ttyS0первый последовательный порт

Пакетные файлы обычно содержат вызовы команд DOS. Они должны быть заменены эквивалентными командами UNIX.

Таблица H-2. Команды DOS и их эквиваленты в UNIX

Команды DOSЭквивалент в UNIXОписание
ASSIGNlnссылка на файл или каталог
ATTRIBchmodизменить атрибуты файла (права доступа)
CDcdсменить каталог
CHDIRcdсменить каталог
CLSclearочистить экран
COMPdiff, comm, cmpсравнить файлы
COPYcpскопировать файл
Ctl-CCtl-Cпрервать исполнение сценария
Ctl-ZCtl-DEOF (конец-файла)
DELrmудалить файл(ы)
DELTREErm -rfудалить каталог с подкаталогами
DIRls -lвывести содержимое каталога
ERASErmудалить файл(ы)
EXITexitзавершить текущий процесс
FCcomm, cmpсравнить файлы
FINDgrepнайти строку в файлах
MDmkdirсоздать каталог
MKDIRmkdirсоздать каталог
MOREmoreпостраничный вывод
MOVEmvпереместить
PATH$PATHпуть поиска исполняемых файлов
RENmvпереименовать (переместить)
RENAMEmvпереименовать (переместить)
RDrmdirудалить каталог
RMDIRrmdirудалить каталог
SORTsortотсортировать файл
TIMEdateвывести системное время
TYPEcatвывести содержимое файла на stdout
XCOPYcp(расширенная команда) скопировать файл

Фактически, команды и операторы командной оболочки UNIX имеют огромное количество дополнительных опций, расширяющих их функциональность, по сравнению с их эквивалентами в DOS. В большинстве своем, пакетные файлы DOS предполагают наличие вспомогательных утилит, таких как ask.com ("увечный" аналог UNIX-вого read).

DOS поддерживает крайне ограниченный набор шаблонных символов, учавствующих в операциях подстановки имен файлов, распознавая только два символа -- * и ?.

Преобразование пакетных файлов DOS в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.

Пример H-1. VIEWDATA.BAT: пакетный файл DOS

REM VIEWDATA


REM INSPIRED BY AN EXAMPLE IN "DOS POWERTOOLS"

REM BY PAUL SOMERSON


@ECHO OFF


IF !%1==! GOTO VIEWDATA

REM IF NO COMMAND-LINE ARG...

FIND "%1" C:\BOZO\BOOKLIST.TXT

GOTO EXIT0

REM PRINT LINE WITH STRING MATCH, THEN EXIT.


:VIEWDATA

TYPE C:\BOZO\BOOKLIST.TXT | MORE

REM SHOW ENTIRE FILE, 1 PAGE AT A TIME.


:EXIT0

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

Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки

#!/bin/bash

# Результат преобразования пакетного файла VIEWDATA.BAT в сценарий командной оболочки.


DATAFILE=/home/bozo/datafiles/book-collection.data

ARGNO=1


# @ECHO OFF Эта команда здесь не нужна.


if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATA

then

less $DATAFILE # TYPE C:\MYDIR\BOOKLIST.TXT | MORE

else

grep "$1" $DATAFILE # FIND "%1" C:\MYDIR\BOOKLIST.TXT

fi


exit 0 # :EXIT0


# операторы перехода GOTO, метки и прочий "мусор" больше не нужны.

# Результат преобразования стал короче, чище и понятнее,

На сайте Тэда Дэвиса (Ted Davis) Shell Scripts on the PC, вы найдете большое число руководств по созданию пакетных файлов в DOS. Определенно, его изобретательность будет вам полезна, при создании ваших сценариев.

Приложение I. Упражнения

I.1. Анализ сценариев

Просмотрите следующие сценарии. Попробуйте запустить их, затем объясните -- что они делают. Расставьте комментарии, затем попробуйте записать их в более компактном виде.

#!/bin/bash


MAX=10000


for((nr=1; nr<$MAX; nr++))

do


let "t1 = nr % 5"

if [ "$t1" -ne 3 ]

then

continue

fi


let "t2 = nr % 7"


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.