Источник
Дата публикации: 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