-->

UNIX — универсальная среда программирования

На нашем литературном портале можно бесплатно читать книгу UNIX — универсальная среда программирования, Керниган Брайан Уилсон-- . Жанр: ОС и Сети / Интернет. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
UNIX — универсальная среда программирования
Название: UNIX — универсальная среда программирования
Дата добавления: 16 январь 2020
Количество просмотров: 434
Читать онлайн

UNIX — универсальная среда программирования читать книгу онлайн

UNIX — универсальная среда программирования - читать бесплатно онлайн , автор Керниган Брайан Уилсон

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями

shell.

 

Для программистов-пользователей операционной системы UNIX.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 57 58 59 60 61 62 63 64 65 ... 187 ВПЕРЕД
Перейти на страницу:

$ echo $PATH | sed 's/^:/./

>                   s/::/:.:/g

>                   s/:$/:./

>                   s/:/ /g'

. /usr/you/bin /bin /usr/bin

$

Мы могли бы записать это с помощью четырех отдельных команд

sed
, но так как редактор
sed
производит замены по порядку, можно выполнить все операции за один вызов.

После задания каталогов в компонентах

PATH
упомянутая выше команда
test(1)
может вывести сообщение о том, существует ли файл в каждом каталоге. В принципе команда
test
— одна из самых "неуклюжих" программ UNIX. Например, команда
"test -r файл"
проверяет, существует ли файл и можно ли его читать;
"test -w файл"
проверяет, существует ли файл и можно ли в него писать, но в седьмой версии нет команды
test -х
(хотя в System V и других версиях есть), а именно она нам и нужна. Мы примем, что обращение
"test -f файл"
будет проверять, существует ли файл и не является ли он каталогом, т.е. представляет ли он собой обычный файл. Но вам следует обратиться к соответствующей странице справочного руководства, поскольку имеет хождение несколько версий.

Каждая команда вырабатывает код завершения — значение, передаваемое интерпретатору и показывающее, что произошло. Это небольшое целое число, которое устанавливается по соглашению. Так, нуль может означать "истину" (команда успешно завершена), а ненулевое значение трактуется как "ложь" (выполнение команды было неудачным). Обратите внимание на то, что выбранные здесь значения противоположны значениям истины и лжи в языке Си.

Поскольку ложь может представлять множество различных значений, причина неудачи обозначается кодом завершения по лжи. Например, команда grep возвращает 0, если произошло сопоставление, 1 — если сопоставления не было, и 2 — в случае ошибки в шаблоне или именах файлов. Каждая программа возвращает код завершения, хотя обычно нас не интересует его значение. Команда

test
неординарна: ее единственное назначение состоит в передаче кода завершения. Она ничего не выводит и не изменяет файлы.

Интерпретатор хранит код завершения последней программы в переменной

$?
:

$ cmp /usr/you/.profile /usr/you/.profile

$
Выдачи нет, файлы совпадают

$ echo $?

0
0 означает успех, файлы идентичны

$ cmp /usr/you/.profile /usr/mary/.profile

/usr/you/.profile /usr/mary/.profile differ: char 6, line 3

$ echo $?

1
He нуль означает, что файлы различны

$

У некоторых команд, таких, как

cmp
и
grep
, есть флаг
-s
, который заставляет их завершить выполнение с определенным кодом, но подавляет вывод. Оператор
if
языка
shell
запускает команды в зависимости от кода завершения некоторой команды, а именно:

if команда

then

 команды, если условие верно

else

 команды, если условие ложно

fi

Местоположение символов перевода строк очень важно:

fi
,
then
и
else
распознаются только после символа перевода строки или точки с запятой.

Оператор

if
всегда запускает команду (условие), тогда как в операторе
case
сопоставление с шаблоном производится самим интерпретатором. В некоторых версиях UNIX, включая System V,
test
является встроенной командой интерпретатора, поэтому
if
и
test
будут выполняться так же быстро, как и
case
. Если
test
— не встроенная команда, то операторы
case
более эффективны, чем операторы
if
, и следует использовать именно их для поиска шаблонов;

$ case "$1" in

hello) command

esac

выполняется быстрее, чем

if test "$1"==hello
Медленнее, если test не встроенная

then

 command

fi

Это одна из причин, по которой в языке

shell
иногда для проверки условий применяются операторы
case
, хотя в большинстве языков программирования использовались бы операторы
if
. С другой стороны, с помощью оператора
case
непросто определить, имеется ли право доступа к файлу на чтение; здесь предпочтение следует отдать команде
test
и оператору
if
.

Итак, теперь мы готовы воспользоваться первой версией команды

which
, которая выведет сообщение о том, какой файл соответствует команде:

$ cat which

# which cmd: which cmd in PATH is executed, version 1

case $# in

0) echo 'Usage: which command' 1>&2; exit 2

esac

for i in `echo $PATH | sed 's/^:/.:/

                            s/::/:.:/g

                            s/:$/:./

                            s/:/ /g'`

do

 if test -f $i/$1 # use test -x if you can

 then

  echo $i/$1

  exit 0 # found it

 fi

done

exit 1   # not found

1 ... 57 58 59 60 61 62 63 64 65 ... 187 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название