Test-строка в bash и sh

FreeBSD, ... Установка, настройка, эксплуатация.

Модератор: ROOT

Test-строка в bash и sh

Сообщение ROOT » 19 дек 2014, 09:21

Автор: Angel2S2
Источник
Дата публикации: 1 июля 2009, 14:05


Довольно часто бывает нужно, когда пишешь скрипт проверить если ли файл, какой он, строка пустая, а число больше нуля или нет?.. Для этого предусмотрена test-строка. Это внешняя утилита. Так же сразу можешь заглянуть в «man test», ну а если лениво или с английским плохо, читай дальше.
Ниже я перечислю ключи, которые можно использовать в тест-строке с их описанием и приведу примеры.

Проверка файлов:
Код: выделить все
-e      - файл существует
-f      - обычный файл
-d      - каталог
-h      - символическая ссылка
-L      - символическая ссылка
-r      - доступен для чтения
-w      - доступен для записи
-x      - исполняемый
-s      - не пуст
-N      - был модифицирован
-b      - блочное устройство
-c      - символьное устройство
-g      - установлен групповой идентификатор
-k      - имеет установленным «sticky» бит
-p      - именованный канал (pipe)
-S      - сокет
-u      - установлен бит пользователя
-O      - владелец имеет эффективный идентификатор пользователя
-G      - владелец имеет эффективный идентификатор группы

Пример:
Код: выделить все
if [ -e /etc/passwd ] ; then echo "Файл на месте" ; fi

Сравнении файлов:
Код: выделить все
-nt     - true, если файл слева имеет более позднюю дату модификации
-ot     - true, если наоборот
-ef     - проверка жесткой связи

Пример:
Код: выделить все
if [ /tmp/file1 -nt /tmp/file2 ] ; then echo "Файл /tmp/file1 новее" ; fi

Сравнение строк:
Код: выделить все
=       - true, если строки совпадают
!=      - true, если строки НЕ совпадают
<       - true, если при сортировке строка слева окажется раньше, чем строка справа
>       - true, если при сортировке строка справа окажется раньше, чем строка слева
-z      - true, если длина строки нулевая
-n      - true, если длина строки НЕ нулевая

Примеры:
Код: выделить все
if [ "$HOME" = "/home/angel" ] ; then echo "Мы дома" ; fi
if [ -z $PATH ] ; then echo 'Переменная $PATH не установлена!' ; fi

Сравнение целых чисел:
Код: выделить все
-eq     - равенство
-ne     - не равенство
-lt     - меньше
-le     - меньше или равно
-gt     - больше
-ge     - больше или равно

Пример:
Код: выделить все
ls /bbb ; if [ $? -ne 0 ] ; then echo "Нет такой папки" ; fi

Логические операции:
Код: выделить все
! expr          - истина, если выражение expr ложь (NOT)
expr1 -a expr2  - истина, если оба выражения expr1 и expr2 истина (AND)
expr1 -o expr2  - истина, если или expr1 или expr2 истина (OR)

Пример:
Код: выделить все
if [ ! -e /etc/passwd -o ! -s /etc/passwd ] ; then echo "Такого файла нет, либо он пустой" ; fi

ЗЫЖ Один товарищ меня спросил, нафига я этот пост в общем написал… Написал я его потому, что многие начинающие *nix'оиды не знают про эти возможности. Так надо же их просветить
Пошаговое исполнение /bin/sh скриптов
Очень часто для отладки скрипта нужно понять, что же именно сейчас делает bash в данный момент. Для этого открываем нужный нам скрипт:
Код: выделить все
e ~/SH/arp-ping.sh

и заменяем в самом начале:
Код: выделить все
#!/bin/sh на #!/bin/sh -vx
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 136
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в FreeBsd

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron