|
Поиск по сайту:
Главная
О проекте
Web-мастеру
HTML & JavaScript
SSI
Perl
PHP
XML & XSLT
Unix Shell
MySQL
Безопасность
Хостинг
Другое
|
|
Приложение J. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
Большое число программистов начинало изучать скриптовые языки
на PC, работающих под управлением DOS. Даже на этом
"калеке" удавалось создавать неплохие сценарии, хотя
это и требовало значительных усилий. Иногда еще возникает
потребность в переносе пекетных файлов DOS на платформу Unix, в
виде сценариев командной оболочки. Обычно это не сложно,
поскольку набор операторов, доступных в DOS, представляет из себя
ограниченное подмножество эквивалентных команд, доступных в
командной оболочке.
Таблица J-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.
Таблица J-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 в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.
Пример J-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
Результат преобразования в сценарий командной оболочки,
немного улучшенный.
Пример J-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.
Определенно, его изобретательность будет вам полезна, при
создании ваших сценариев.
Назад |Содержание | Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|
|
|