---

Это приложение написано Stephane Chazelas, и дополнено Bruno Haible, ведущим разработчиком GNU gettext.

Приложение G. История команд

Командная оболочка Bash предоставляет в распоряжение пользователя инструментарий командной строки, позволяющий управлять историей команд. История команд -- это, прежде всего, очень удобный инструмент, сокращающий ручной ввод.

История команд Bash:

1.  history

2.  fc

bash$

history

1 mount /mnt/cdrom

2 cd /mnt/cdrom

3 ls

...

Внутренние переменные Bash, связанные с историей команд:

1.  $HISTCMD

2.  $HISTCONTROL

3.  $HISTIGNORE

4.  $HISTFILE

5.  $HISTFILESIZE

6.  $HISTSIZE

7.  !!

8.  !$

9.  !#

10.  !N

11.  !-N

12.  !STRING

13.  !?STRING?

14.  ^STRING^string^

К сожалению, инструменты истории команд, в Bash, совершенно бесполезны в сценариях.

#!/bin/bash

# history. sh

# Попытка воспользоваться 'историей' команд в сценарии.

history

# На экран ничего не выводится.

# История команд не работает в сценариях.

bash$

./history. sh

(ничего не выводится)

Приложение H. Пример файла. bashrc

Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого примера поможет вам значительно продвинуться в понимании Bash.

Emmanuel Rouat представил следующий, очень сложный, файл. bashrc, написанный для операционной системы Linux. Предложения и замечания приветствуются.

Внимательно изучите этот файл. Отдельные участки этого файла вы свободно можете использовать в своем собственном. bashrc или, даже в своих сценариях!

НЕ нашли? Не то? Что вы ищете?

Пример H-1. Пример файла .bashrc

#===============================================================

#

# ЛИЧНЫЙ ФАЙЛ $HOME/.bashrc для bash-2.05a (или выше)

#

# Время последней модификации: Втр Апр 15 20:32:34 CEST 2003

#

# Этот файл содержит настройки интерактивной командной оболочки.

# Здесь размещены определения псевдонимов, функций

# и других элементов Bash, таких как prompt (приглашение к вводу).

#

# Изначально, этот файл был создан в операционной системе Solaris,

# но позднее был переделан под Redhat

# --> Модифицирован под Linux.

# Большая часть кода, который находится здесь, была взята из

# Usenet (или Интернет).

# Этот файл содержит слишком много определений -- помните, это всего лишь пример.

#

#

#===============================================================

# --> Комментарии, добавленные автором HOWTO.

# --> И дополнены автором сценария Emmanuel Rouat :-)

#--

# Глобальные определения

#--

if [ - f /etc/bashrc ]; then

. /etc/bashrc # --> Прочитать настройки из /etc/bashrc, если таковой имеется.

fi

#------

# Настройка переменной $DISPLAY (если еще не установлена)

# Это срабатывает под linux - в вашем случае все может быть по другому....

# Проблема в том, что различные типы терминалов

# дают разные ответы на запрос 'who am i'......

# я не нашел 'универсального' метода

#------

function get_xserver ()

{

case $TERM in

xterm )

XSERVER=$(who am i | awk '{print $NF}' | tr - d ')''(' )

XSERVER=${XSERVER%%:*}

;;

aterm | rxvt)

# добавьте здесь свой код.....

;;

esac

}

if [ - z ${DISPLAY:=""} ]; then

get_xserver

if [[ - z ${XSERVER} || ${XSERVER} == $(hostname) || ${XSERVER} == "unix" ]]; then

DISPLAY=":0.0" # для локального хоста

else

DISPLAY=${XSERVER}:0.0 # для удаленного хоста

fi

fi

export DISPLAY

#----

# Некоторые настройки

#----

ulimit - S - c 0 # Запрет на создание файлов coredump

set - o notify

set - o noclobber

set - o ignoreeof

set - o nounset

#set - o xtrace # полезно для отладки

# Разрешающие настройки:

shopt - s cdspell

shopt - s cdable_vars

shopt - s checkhash

shopt - s checkwinsize

shopt - s mailwarn

shopt - s sourcepath

shopt - s no_empty_cmd_completion # только для bash>=2.04

shopt - s cmdhist

shopt - s histappend histreedit histverify

shopt - s extglob

# Запрещающие настройки:

shopt - u mailwarn

unset MAILCHECK # Я не желаю, чтобы командная оболочка сообщала мне о прибытии почты

export TIMEFORMAT=$'\nreal %3R\tuser %3U\tsys %3S\tpcpu %P\n'

export HISTIGNORE="&:bg:fg:ll:h"

export HOSTFILE=$HOME/.hosts # Поместить список удаленных хостов в файл ~/.hosts

#-

# Greeting, motd etc...

#-

# Для начала определить некоторые цвета:

red='\e[0;31m'

RED='\e[1;31m'

blue='\e[0;34m'

BLUE='\e[1;34m'

cyan='\e[0;36m'

CYAN='\e[1;36m'

NC='\e[0m' # No Color (нет цвета)

# --> Прекрасно. Имеет тот же эффект, что и "ansi. sys" в DOS.

# Лучше выглядит на черном фоне.....

echo - e "${CYAN}This is BASH ${RED}${BASH_VERSION%.*}${CYAN} - DISPLAY on ${RED}$DISPLAY${NC}\n"

date

if [ - x /usr/games/fortune ]; then

/usr/games/fortune - s # сделает наш день более интересным.... :-)

fi

function _exit() # функция, запускающаяся при выходе из оболочки

{

echo - e "${RED}Аста ла виста, бэби ${NC}"

}

trap _exit EXIT

#----

# Prompt

#----

if [[ "${DISPLAY#$HOST}" != ":0.0" && "${DISPLAY}" != ":0" ]]; then

HILIT=${red} # на удаленной системе: prompt будет частично красным

else

HILIT=${cyan} # на локальной системе: prompt будет частично циановым

fi

# --> Замените \W на \w в функциях ниже

#+ --> чтобы видеть в оболочке полный путь к текущему каталогу.

function fastprompt()

{

unset PROMPT_COMMAND

case $TERM in

*term | rxvt )

PS1="${HILIT}[\h]$NC \W > \[\033]0;\${TERM} [\u@\h] \w\007\]" ;;

linux )

PS1="${HILIT}[\h]$NC \W > " ;;

*)

PS1="[\h] \W > " ;;

esac

}

function powerprompt()

{

_powerprompt()

{

LOAD=$(uptime|sed - e "s/.*: \([^,]*\).*/\1/" - e "s/ //g")

}

PROMPT_COMMAND=_powerprompt

case $TERM in

*term | rxvt )

PS1="${HILIT}[\A \$LOAD]$NC\n[\h \#] \W > \[\033]0;\${TERM} [\u@\h] \w\007\]" ;;

linux )

PS1="${HILIT}[\A - \$LOAD]$NC\n[\h \#] \w > " ;;

* )

PS1="[\A - \$LOAD]\n[\h \#] \w > " ;;

esac

}

powerprompt # это prompt по-умолчанию - может работать довольно медленно

# Если это так, то используйте fastprompt....

#===============================================================

#

# ПСЕВДОНИМЫ И ФУНКЦИИ

#

# Возможно некоторые из функций, приведенных здесь, окажутся для вас слишком большими,

# но на моей рабочей станции установлено 512Mb ОЗУ, так что.....

# Если пожелаете уменьшить размер этого файла, то можете оформить эти функции

# в виде отдельных сценариев.

#

# Большинство функций были взяты, почти без переделки, из примеров

# к bash-2.04.

#

#===============================================================

#

# Псевдонимы

#

alias rm='rm - i'

alias cp='cp - i'

alias mv='mv - i'

# -> Предотвращает случайное удаление файлов.

alias mkdir='mkdir - p'

alias h='history'

alias j='jobs - l'

alias r='rlogin'

alias which='type - all'

alias..='cd..'

alias path='echo - e ${PATH//:/\\n}'

alias print='/usr/bin/lp - o nobanner - d $LPDEST' # Предполагается, что LPDEST определен

alias pjet='enscript - h - G - fCourier9 - d $LPDEST' # Печать через enscript

alias background='xv - root - quit - max - rmode 5' # Положить картинку в качестве фона

alias du='du - kh'

alias df='df - kTh'

# Различные варианты 'ls' (предполагается, что установлена GNU-версия ls)

alias la='ls - Al' # показать скрытые файлы

alias ls='ls - hF --color' # выделить различные типы файлов цветом

alias lx='ls - lXB' # сортировка по расширению

alias lk='ls - lSr' # сортировка по размеру

alias lc='ls - lcr' # сортировка по времени изменения

alias lu='ls - lur' # сортировка по времени последнего обращения

alias lr='ls - lR' # рекурсивный обход подкаталогов

alias lt='ls - ltr' # сортировка по дате

alias lm='ls - al |more' # вывод через 'more'

alias tree='tree - Csu' # альтернатива 'ls'

# подготовка 'less'

alias more='less'

export PAGER=less

export LESSCHARSET='latin1'

export LESSOPEN='|/usr/bin/lesspipe. sh %s 2>&-' # если существует lesspipe. sh

export LESS='-i - N - w - z-4 - g - e - M - X - F - R - P%t? f%f \

:stdin.?pb%pb\%:?lbLine %lb:?bbByte %bb:-...'

# проверка правописания - настоятельно рекомендую :-)

alias xs='cd'

alias vf='cd'

alias moer='more'

alias moew='more'

alias kk='ll'

#-----

# добавим немножко "приятностей"

#-----

function xtitle ()

{

case "$TERM" in

*term | rxvt)

echo - n - e "\033]0;$*\007" ;;

*)

;;

esac

}

# псевдонимы...

alias top='xtitle Processes on $HOST && top'

alias make='xtitle Making $(basename $PWD) ; make'

alias ncftp="xtitle ncFTP ; ncftp"

# .. и функции

function man ()

{

for i ; do

xtitle The $(basename $1|tr - d.[:digit:]) manual

command man - F - a "$i"

done

}

function ll(){ ls - l "$@"| egrep "^d" ; ls - lXB "$@" 2>&-| egrep - v "^d|total "; }

function te() # "обертка" вокруг xemacs/gnuserv

{

if [ "$(gnuclient - batch - eval t 2>&-)" == "t" ]; then

gnuclient - q "$@";

else

( xemacs "$@" &);

fi

}

#--

# Функции для работы с файлами и строками:

#--

# Поиск файла по шаблону:

function ff() { find. - type f - iname '*'$*'*' - ls ; }

# Поиск файла по шаблону в $1 и запуск команды в $2 с ним:

function fe() { find. - type f - iname '*'$1'*' - exec "${2:-file}" {} \; ; }

# поиск строки по файлам:

function fstr()

{

OPTIND=1

local case=""

local usage="fstr: поиск строки в файлах.

Порядок использования: fstr [-i] \"шаблон\" [\"шаблон_имени_файла\"] "

while getopts :it opt

do

case "$opt" in

i) case="-i " ;;

*) echo "$usage"; return;;

esac

done

shift $(( $OPTIND - 1 ))

if [ "$#" - lt 1 ]; then

echo "$usage"

return;

fi

local SMSO=$(tput smso)

local RMSO=$(tput rmso)

find. - type f - name "${2:-*}" - print0 | xargs -0 grep - sn ${case} "$1" 2>&- | \

sed "s/$1/${SMSO}\0${RMSO}/gI" | more

}

function cuttail() # удалить последние n строк в файле, по-умолчанию 10

{

nlines=${2:-10}

sed - n - e :a - e "1,${nlines}!{P;N;D;};N;ba" $1

}

function lowercase() # перевести имя файла в нижний регистр

{

for file ; do

filename=${file##*/}

case "$filename" in

*/*) dirname==${file%/*} ;;

*) dirname=.;;

esac

nf=$(echo $filename | tr A-Z a-z)

newname="${dirname}/${nf}"

if [ "$nf" != "$filename" ]; then

mv "$file" "$newname"

echo "lowercase: $file --> $newname"

else

echo "lowercase: имя файла $file не было изменено."

fi

done

}

function swap() # меняет 2 файла местами

{

local TMPFILE=tmp.$$

mv "$1" $TMPFILE

mv "$2" "$1"

mv $TMPFILE "$2"

}

#--

# Функции для работы с процессами/системой:

#--

function my_ps() { ps $@ - u $USER - o pid,%cpu,%mem, bsdtime, command ; }

function pp() { my_ps f | awk '!/awk/ && $0~var' var=${1:-".*"} ; }

# Эта функция является грубым аналогом 'killall' в linux

# но не эквивалентна (насколько я знаю) 'killall' в Solaris

function killps() # "Прибить" процесс по его имени

{

local pid pname sig="-TERM" # сигнал, рассылаемый по-умолчанию

if [ "$#" - lt 1 ] || [ "$#" - gt 2 ]; then

echo "Порядок использования: killps [-SIGNAL] шаблон_имени_процесса"

return;

fi

if [ $# = 2 ]; then sig=$1 ; fi

for pid in $(my_ps| awk '!/awk/ && $0~pat { print $1 }' pat=${!#} ) ; do

pname=$(my_ps | awk '$1~var { print $5 }' var=$pid )

if ask "Послать сигнал $sig процессу $pid <$pname>?"

then kill $sig $pid

fi

done

}

function my_ip() # IP адрес

{

MY_IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed - e s/addr://)

MY_ISP=$(/sbin/ifconfig ppp0 | awk '/P-t-P/ { print $3 } ' | sed - e s/P-t-P://)

}

function ii() # Дополнительные сведения о системе

{

echo - e "\nВы находитесь на ${RED}$HOST"

echo - e "\nДополнительная информация:$NC " ; uname - a

echo - e "\n${RED}В системе работают пользователи:$NC " ; w - h

echo - e "\n${RED}Дата:$NC " ; date

echo - e "\n${RED}Время, прошедшее с момента последней перезагрузки :$NC " ; uptime

echo - e "\n${RED}Память :$NC " ; free

my_ip 2>&- ;

echo - e "\n${RED}IP адрес:$NC" ; echo ${MY_IP:-"Соединение не установлено"}

echo - e "\n${RED}Адрес провайдера (ISP):$NC" ; echo ${MY_ISP:-"Соединение не установлено"}

echo

}

# Разные утилиты:

function repeat() # повторить команду n раз

{

local i max

max=$1; shift;

for ((i=1; i <= max ; i++)); do # --> C-подобный синтаксис

eval "$@";

done

}

function ask()

{

echo - n "$@" '[y/n] ' ; read ans

case "$ans" in

y*|Y*) return 0 ;;

*) return 1 ;;

esac

}

#=========================================================================

#

# ПРОГРАММНЫЕ ДОПОЛНЕНИЯ - ТОЛЬКО НАЧИНАЯ С ВЕРСИИ BASH-2.04

# Большая часть дополнений взята из докуентации к bash 2.05 и из

# пакета 'Bash completion' (http://www. caliban. org/bash/index. shtml#completion)

# автор -- Ian McDonalds

# Фактически, у вас должен стоять bash-2.05a

#

#=========================================================================

if [ "${BASH_VERSION%.*}" \< "2.05" ]; then

echo "Вам необходимо обновиться до версии 2.05"

return

fi

shopt - s extglob # необходимо

set +o nounset # иначе некоторые дополнения не будут работать

complete - A hostname rsh rcp telnet rlogin r ftp ping disk

complete - A export printenv

complete - A variable export local readonly unset

complete - A enabled builtin

complete - A alias alias unalias

complete - A function function

complete - A user su mail finger

complete - A helptopic help

complete - A shopt shopt

complete - A stopped - P '%' bg

complete - A job - P '%' fg jobs disown

complete - A directory mkdir rmdir

complete - A directory - o default cd

# Архивация

complete - f - o default - X '*.+(zip|ZIP)' zip

complete - f - o default - X '!*.+(zip|ZIP)' unzip

complete - f - o default - X '*.+(z|Z)' compress

complete - f - o default - X '!*.+(z|Z)' uncompress

complete - f - o default - X '*.+(gz|GZ)' gzip

complete - f - o default - X '!*.+(gz|GZ)' gunzip

complete - f - o default - X '*.+(bz2|BZ2)' bzip2

complete - f - o default - X '!*.+(bz2|BZ2)' bunzip2

# Postscript, pdf, dvi.....

complete - f - o default - X '!*.ps' gs ghostview ps2pdf ps2ascii

complete - f - o default - X '!*.dvi' dvips dvipdf xdvi dviselect dvitype

complete - f - o default - X '!*.pdf' acroread pdf2ps

complete - f - o default - X '!*.+(pdf|ps)' gv

complete - f - o default - X '!*.texi*' makeinfo texi2dvi texi2html texi2pdf

complete - f - o default - X '!*.tex' tex latex slitex

complete - f - o default - X '!*.lyx' lyx

complete - f - o default - X '!*.+(htm*|HTM*)' lynx html2ps

# Multimedia

complete - f - o default - X '!*.+(jp*g|gif|xpm|png|bmp)' xv gimp

complete - f - o default - X '!*.+(mp3|MP3)' mpg123 mpg321

complete - f - o default - X '!*.+(ogg|OGG)' ogg123

complete - f - o default - X '!*.pl' perl perl5

# Эти 'универсальные' дополнения работают тогда, когда команды вызываются

# с, так называемыми, 'длинными ключами', например: 'ls --all' вместо 'ls - a'

_get_longopts ()

{

$1 --help | sed - e '/--/!d' - e 's/.*--\([^[:space:].,]*\).*/--\1/'| \

grep ^"$2" |sort - u ;

}

_longopts_func ()

{

case "${2:-*}" in

-*) ;;

*) return ;;

esac

case "$1" in

\~*) eval cmd="$1" ;;

*) cmd="$1" ;;

esac

COMPREPLY=( $(_get_longopts ${1} ${2} ) )

}

complete - o default - F _longopts_func configure bash

complete - o default - F _longopts_func wget id info a2ps ls recode

_make_targets ()

{

local mdef makef gcmd cur prev i

COMPREPLY=()

cur=${COMP_WORDS[COMP_CWORD]}

prev=${COMP_WORDS[COMP_CWORD-1]}

# Если аргумент prev это - f, то вернуть возможные варианты имен файлов.

# будем великодушны и вернем несколько вариантов

# `makefile Makefile *.mk'

case "$prev" in

-*f) COMPREPLY=( $(compgen - f $cur ) ); return 0;;

esac

# Если запрошены возможные ключи, то вернуть ключи posix

case "$cur" in

-) COMPREPLY=(-e - f - i - k - n - p - q - r - S - s - t); return 0;;

esac

# попробовать передать make `makefile' перед тем как попробовать передать `Makefile'

if [ - f makefile ]; then

mdef=makefile

elif [ - f Makefile ]; then

mdef=Makefile

else

mdef=*.mk

fi

# прежде чем просмотреть "цели", убедиться, что имя makefile было задано

# ключом - f

for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do

if [[ ${COMP_WORDS[i]} == -*f ]]; then

eval makef=${COMP_WORDS[i+1]}

break

fi

done

[ - z "$makef" ] && makef=$mdef

# Если задан шаблон поиска, то ограничиться

# этим шаблоном

if [ - n "$2" ]; then gcmd='grep "^$2"' ; else gcmd=cat ; fi

# если мы не желаем использовать *.mk, то необходимо убрать cat и использовать

# test - f $makef с перенаправлением ввода

COMPREPLY=( $(cat $makef 2>/dev/null | awk 'BEGIN {FS=":"} /^[^.# ][^=]*:/ {print $1}' | tr - s ' ' '\012' | sort - u | eval $gcmd ) )

}

complete - F _make_targets - X '+($*|*.[cho])' make gmake pmake

# cvs(1) completion

_cvs ()

{

local cur prev

COMPREPLY=()

cur=${COMP_WORDS[COMP_CWORD]}

prev=${COMP_WORDS[COMP_CWORD-1]}

if [ $COMP_CWORD - eq 1 ] || [ "${prev:0:1}" = "-" ]; then

COMPREPLY=( $( compgen - W 'add admin checkout commit diff \

export history import log rdiff release remove rtag status \

tag update' $cur ))

else

COMPREPLY=( $( compgen - f $cur ))

fi

return 0

}

complete - F _cvs cvs

_killall ()

{

local cur prev

COMPREPLY=()

cur=${COMP_WORDS[COMP_CWORD]}

# получить список процессов

COMPREPLY=( $( /usr/bin/ps - u $USER - o comm | \

sed - e '1,1d' - e 's#[]\[]##g' - e 's#^.*/##'| \

awk '{if ($0 ~ /^'$cur'/) print $0}' ))

return 0

}

complete - F _killall killall killps

# Функция обработки мета-команд

# В настоящее время недостаточно отказоустойчива (например, mount и umount

# обрабатываются некорректно), но все еще актуальна. Автор Ian McDonald, изменена мной.

_my_command()

{

local cur func cline cspec

COMPREPLY=()

cur=${COMP_WORDS[COMP_CWORD]}

if [ $COMP_CWORD = 1 ]; then

COMPREPLY=( $( compgen - c $cur ) )

elif complete - p ${COMP_WORDS[1]} &>/dev/null; then

cspec=$( complete - p ${COMP_WORDS[1]} )

if [ "${cspec%%-F *}" != "${cspec}" ]; then

# complete - F <function>

#

# COMP_CWORD and COMP_WORDS() доступны на запись,

# так что мы можем установить их перед тем,

# как передать их дальше

# уменьшить на 1 текущий номер лексемы

COMP_CWORD=$(( $COMP_CWORD - 1 ))

# получить имя функции

func=${cspec#*-F }

func=${func%% *}

# получить командную строку, исключив первую команду

cline="${COMP_LINE#$1 }"

# разбить на лексемы и поместить в массив

COMP_WORDS=( $cline )

$func $cline

elif [ "${cspec#*-[abcdefgjkvu]}" != "" ]; then

# complete -[abcdefgjkvu]

#func=$( echo $cspec | sed - e 's/^.*\(-[abcdefgjkvu]\).*$/\1/' )

func=$( echo $cspec | sed - e 's/^complete//' - e 's/[^ ]*$//' )

COMPREPLY=( $( eval compgen $func $cur ) )

elif [ "${cspec#*-A}" != "$cspec" ]; then

# complete - A <type>

func=${cspec#*-A }

func=${func%% *}

COMPREPLY=( $( compgen - A $func $cur ) )

fi

else

COMPREPLY=( $( compgen - f $cur ) )

fi

}

complete - o default - F _my_command nohup exec eval trace truss strace sotruss gdb

complete - o default - F _my_command command type which man nice

# Локальные переменные:

# mode:shell-script

# sh-shell:bash

# Конец:

Приложение I. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки

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

Таблица I-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.

Таблица I-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

(расширенная команда) скопировать файл

Note

Фактически, команды и операторы командной оболочки UNIX имеют огромное количество дополнительных опций, расширяющих их функциональность, по сравнению с их эквивалентами в DOS. В большинстве своем, пакетные файлы DOS предполагают наличие вспомогательных утилит, таких как ("увечный" аналог UNIX-вого read).

DOS поддерживает крайне ограниченный набор шаблонных символов, учавствующих в операциях подстановки имен файлов, распознавая только два символа -- * и?.

Преобразование пакетных файлов DOS в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34