Чтение онлайн

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

Внутри производится вычисление арифметического выражения. Если результатом вычислений является ноль, то возвращается 1, или "ложь". Ненулевой результат дает код возврата 0, или "истина". То есть полная противоположность инструкциям test и [ ], обсуждавшимся выше.

Пример 7-3. Арифметические выражения внутри

#!/bin/bash

# Проверка арифметических выражений.

# Инструкция (( ... )) вычисляет арифметические выражения.

#

Код возврата противоположен коду возврата инструкции [ ... ] !

(( 0 ))

echo "Код возврата \"(( 0 ))\": $?." # 1

(( 1 ))

echo "Код возврата \"(( 1 ))\": $?." # 0

(( 5 > 4 )) # true

echo "Код возврата \"(( 5 > 4 ))\": $?." # 0

(( 5 > 9 )) # false

echo "Код возврата \"(( 5 > 9 ))\": $?." # 1

(( 5 - 5 )) # 0

echo "Код возврата \"(( 5 - 5 ))\": $?." # 1

(( 5 / 4 )) # Деление, все в порядке

echo "Код возврата \"(( 5 / 4 ))\": $?." # 0

(( 1 / 2 )) # Результат деления < 1.

echo "Код возврата \"(( 1 / 2 ))\": $?." # Округляется до 0.

# 1

(( 1 / 0 )) 2>/dev/null # Деление на 0.

echo "Код возврата \"(( 1 / 0 ))\": $?." # 1

# Для чего нужна инструкция "2>/dev/null" ?

# Что произойдет, если ее убрать?

# Попробуйте убрать ее и выполнить сценарий.

exit 0

7.2. Операции проверки файлов

Возвращает true если...

– e

файл существует

– f

обычный файл (не каталог и не файл устройства)

– s

ненулевой размер файла

– d

файл является каталогом

– b

файл является блочным устройством (floppy, cdrom и т.п.)

– c

файл является символьным устройством (клавиатура, модем, звуковая карта и т.п.)

– p

файл является каналом

– h

файл является символической ссылкой

– L

файл является символической ссылкой

– S

файл является сокетом

– t

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

Этот ключ может использоваться для проверки -- является ли файл стандартным устройством ввода stdin ([ -t 0 ]) или стандартным устройством вывода stdout ([ -t 1 ]).

– r

файл доступен для чтения (пользователю, запустившему сценарий)

– w

файл доступен для записи (пользователю, запустившему сценарий)

– x

файл доступен для исполнения (пользователю, запустившему сценарий)

– g

set-group-id (sgid) флаг для файла или каталога установлен

Если для каталога установлен флаг sgid,

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

– u

set-user-id (suid) флаг для файла установлен

Установленный флаг suid приводит к изменению привилегий запущенного процесса на привилегии владельца исполняемого файла. Исполняемые файлы, владельцем которых является root, с установленным флагом set-user-id запускаются с привилегиями root, даже если их запускает обычный пользователь [ 16 ] . Это может оказаться полезным для некоторых программ (таких как pppd и cdrecord), которые осуществляют доступ к аппаратной части компьютера. В случае отсутствия флага suid, программы не смогут быть запущены рядовым пользователем, не обладающим привилегиями root.

16

С флагом suid, на двоичных исполняемых файлах, надо быть очень осторожным, поскольку это может быть небезопасным. Установка флага suid на файлы-сценарии не имеет никакого эффекта.

– rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd

Файл с установленным флагом suid отображается с включенным флагом s в поле прав доступа.

– k

флаг sticky bit (бит фиксации) установлен

Общеизвестно, что флаг "sticky bit" -- это специальный тип прав доступа к файлам. Программы с установленным флагом "sticky bit" остаются в системном кэше после своего завершения, обеспечивая тем самым более быстрый запуск программы [ 17 ] . Если флаг установлен для каталога, то это приводит к ограничению прав на запись. Установленный флаг "sticky bit" отображается в виде символа t в поле прав доступа.

17

В современных UNIX-системах, "sticky bit" больше не используется для файлов, только для каталогов.

drwxrwxrwt 7 root 1024 May 19 21:26 tmp/

Если пользователь не является владельцем каталога, с установленным "sticky bit", но имеет право на запись в каталог, то он может удалять только те файлы в каталоге, владельцем которых он является. Это предотвращает удаление и перезапись "чужих" файлов в общедоступных каталогах, таких как /tmp.

– O

вы являетесь владельцем файла

– G

вы принадлежите к той же группе, что и файл

– N

файл был модифицирован с момента последнего чтения

f1 -nt f2

файл f1 более новый, чем f2

f1 -ot f2

файл f1 более старый, чем f2

f1 -ef f2

файлы f1 и f2 являются "жесткими" ссылками на один и тот же файл

!

"НЕ" -- логическое отрицание (инверсия) результатов всех вышеприведенных проверок (возвращается true если условие отсутствует).

Поделиться с друзьями: