Команды 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 | (расширенная команда) скопировать файл |
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"
if [ "$t2" -ne 4 ]
then
continue
fi
let "t3 = nr % 9"
if [ "$t3" -ne 5 ]
then
continue
fi
break # Что произойдет, если закомментировать эту строку? Почему?
done
echo "Число = $nr"
exit 0
---
Читатель прислал следующий кусок кода.
while read LINE
do
echo $LINE
done < `tail -f /var/log/messages`
Он предполагал написать сценарий, который отслеживал бы изменения в системном журнале /var/log/messages. К сожалению, этот код "зависает" и не делает ничего полезного. Почему? Найдите ошибку и исправьте ее (подсказка: вместо операции перенаправления stdin в цикл, попробуйте использовать конвейерную обработку).
---