Командная строка Linux
Шрифт:
файл1 -ot файл2
файл1 старше файла файл2
– b файл
файл существует и является специальным файлом блочного устройства
– с файл
файл существует и является специальным файлом символьного устройства
– d файл
файл существует и является каталогом
– e файл
файл существует
– f файл
файл существует и является обычным файлом
– g файл
файл существует и имеет атрибут set-group-ID (бит setgid)
– G файл
файл существует
– k файл
файл существует и имеет атрибут «sticky bit»
– L файл
файл существует и является символической ссылкой
– O файл
файл существует и принадлежит действующему пользователю
– p файл
файл существует и является именованным каналом
– r файл
файл существует и доступен для чтения (имеет разрешение на чтение для действующего пользователя)
– s файл
файл существует и имеет размер больше нуля
– S файл
файл существует и является сетевым сокетом
– t дескриптор_файла
дескриптор_файла представляет файл, подключенный к терминалу. Это выражение можно использовать для проверки стандартных потоков ввода/вывода/ошибок
– u файл
файл существует и имеет атрибут setuid
– w файл
файл существует и доступен для записи (имеет разрешение на запись для действующего пользователя)
– x файл
файл существует и доступен для выполнения (имеет разрешение на выполнение для действующего пользователя)
Следующий сценарий демонстрирует применение некоторых выражений с файлами:
#!/bin/bash
# test-file: проверка файла
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
exit 1
fi
exit
Сценарий проверяет файл, имя которого присвоено константе FILE, и выводит результат. Этот сценарий имеет две интересные особенности, на которые следует обратить внимание. Во-первых, отметьте, что параметр $FILE внутри выражений заключен в кавычки. Это не является обязательным требованием, но защищает от случаев, когда параметр пуст. Если механизм подстановки заменит $FILE пустым значением, это приведет к ошибке (операторы в этом случае будут интерпретироваться как непустые строки, а не как операторы). Использование кавычек гарантирует, что за оператором всегда будет следовать строка, даже если она пустая. Во-вторых, обратите внимание на команду exit (в конце сценария). Команда exit принимает единственный необязательный
Аналогично, функции могут возвращать свой код завершения, передавая целочисленный аргумент команде return. Чтобы преобразовать сценарий, приведенный выше, в функцию для использования в больших программах, нужно заменить команды exit инструкциями return:
test_file {
# test-file: проверка файла
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
return 1
fi
}
Выражения для проверки строк
В табл. 27.2 перечислены выражения, используемые для проверки строк.
Таблица 27.2. Выражения для проверки строк
Выражение
Истинно, если...
строка
Cтрока не пустая
– n строка
Длина строки больше нуля
– z строка
Длина строки равна нулю
строка1 = строка2
строка1 == строка2
строка1 и строка2 равны. Допускается использовать один или два знака «равно», но предпочтительнее два
строка1 != строка2
строка1 и строка2 не равны
строка1 > строка2
строка1 больше, чем строка2, в смысле алфавитной сортировки
строка1 < строка2
строка1 меньше, чем строка2, в смысле алфавитной сортировки
ВНИМАНИЕ
При использовании с командой test операторы > и < необходимо заключать в кавычки (или экранировать символом обратного слеша). Если этого не сделать, они будут интерпретироваться командной оболочкой как операторы перенаправления, что может привести к плачевным результатам. Обратите также внимание: в документации к командной оболочке bash утверждается, что порядок сортировки соответствует порядку алфавитной сортировки, определяемому текущими региональными настройками, но в действительности это не так. В версиях bash, вплоть до 4.0, используется порядок сортировки ASCII (POSIX).