Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
Большое число программистов начинало изучать скриптовые языки на PC, работающих под управлением DOS. Даже на этом "калеке" удавалось создавать неплохие сценарии, хотя это и требовало значительных усилий. Иногда еще возникает потребность в переносе пекетных файлов DOS на платформу UNIX, в виде сценариев командной оболочки. Обычно это не сложно, поскольку набор операторов, доступных в DOS, представляет из себя ограниченное подмножество эквивалентных команд, доступных в командной оболочке.
Таблица H-1. Ключевые слова/переменные/операторы пакетных файлов DOS и их аналоги командной оболочки
Операторы пакетных файлов Эквивалентные команды в UNIX Описание % $ префикс аргументов командной строки / - признак ключа (опции) / разделитель имен каталогов в пути == = (равно) сравнение строк !==! != (не равно) сравнение строк | | конвейер (канал) @ set +v не выводить текущую команду * * "шаблонный символ" в имени файла > > перенаправление (с удалением существующего файла) >> >> перенаправление (с добавлением в конец существующего файла) < < перенаправление ввода stdin %VAR% $VAR переменная окружения REM # комментарий NOT ! отрицание последующего условия NUL /dev/null "черная дыра" для того, чтобы "спрятать" вывод команды ECHO echo вывод (в Bash имеет большое число опций) ECHO. echo вывод пустой строки ECHO OFF set +v не выводить последующие команды FOR %%VAR IN (LIST) DO for var in [list]; do цикл "for" :LABEL эквивалент отсутствует (нет необходимости) метка GOTO эквивалент отсутствует (используйте функции) переход по заданной метке PAUSE sleep пауза, или ожидание, в течение заданного времени CHOICE case или select выбор из меню IF if условный оператор if IF EXIST FILENAME if [ -e filename ] проверка существования файла IF !%N==! if [ -z "$N" ] Проверка: параметр "N" отсутствует CALL source или . (оператор "точка") "подключение" другого сценария COMMAND /C source или . (оператор "точка") "подключение" другого сценария (то же, что и CALL) SET export установить переменную окружения SHIFT shift сдвиг списка аргументов уомандной строки влево SGN -lt или -gt знак (целого числа) ERRORLEVEL $? код завершения CON stdin "консоль" (stdin) PRN /dev/lp0 устройство принтера LPT1 /dev/lp0 устройство принтера COM1 /dev/ttyS0 первый последовательный портПакетные файлы обычно содержат вызовы команд DOS. Они должны быть заменены эквивалентными командами UNIX.
Таблица H-2. Команды DOS и их эквиваленты в UNIX
Команды DOS Эквивалент в UNIX Описание ASSIGN ln ссылка на файл или каталог ATTRIB chmod изменить атрибуты файла (права доступа) CD cd сменить каталог CHDIR cd сменить каталог CLS clear очистить экран COMP diff, comm, cmp сравнить файлы COPY cp скопировать файл Ctl-C Ctl-C прервать исполнение сценария Ctl-Z Ctl-D EOF (конец-файла) DEL rm удалить файл(ы) DELTREE rm -rf удалить каталог с подкаталогами DIR ls -l вывести содержимое каталога ERASE rm удалить файл(ы) EXIT exit завершить текущий процесс FC comm, cmp сравнить файлы FIND grep найти строку в файлах MD mkdir создать каталог MKDIR mkdir создать каталог MORE more постраничный вывод MOVE mv переместить PATH $PATH путь поиска исполняемых файлов REN mv переименовать (переместить) RENAME mv переименовать (переместить) RD rmdir удалить каталог RMDIR rmdir удалить каталог SORT sort отсортировать файл TIME date вывести системное время TYPE cat вывести содержимое файла на stdout XCOPY cp (расширенная команда) скопировать файлФактически, команды и операторы командной оболочки UNIX имеют огромное количество дополнительных опций, расширяющих их функциональность, по сравнению с их эквивалентами в DOS. В большинстве своем, пакетные файлы DOS предполагают наличие вспомогательных утилит, таких как ask.com ("увечный" аналог UNIX-вого read).
DOS поддерживает крайне ограниченный набор шаблонных символов, учавствующих в операциях подстановки имен файлов, распознавая только два символа -- * и ?.
Преобразование пакетных файлов DOS в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.