• Пример H-1. VIEWDATA.BAT: пакетный файл DOS
  • Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки
  • Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки

    Большое число программистов начинало изучать скриптовые языки на PC, работающих под управлением DOS. Даже на этом "калеке" удавалось создавать неплохие сценарии, хотя это и требовало значительных усилий. Иногда еще возникает потребность в переносе пекетных файлов DOS на платформу UNIX, в виде сценариев командной оболочки. Обычно это не сложно, поскольку набор операторов, доступных в DOS, представляет из себя ограниченное подмножество эквивалентных команд, доступных в командной оболочке.

    Таблица 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. Определенно, его изобретательность будет вам полезна, при создании ваших сценариев.







     


    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Другие сайты | Наверх