| |
Поиск по сайту:
Главная
О проекте
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.
Определенно, его изобретательность будет вам полезна, при
создании ваших сценариев.
Назад |Содержание | Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|
|
|