Команда test в Linux
testЭто встроенная команда в системе Linux/Unix, используемая для вычисления условий, главным образом для различных проверок и операций сравнения в shell-скриптах. Она может проверять атрибуты файлов, сравнивать строки и числовые значения и является незаменимым инструментом для написания shell-скриптов.
Базовый синтаксис
test EXPRESSION # 或者使用方括号格式(更常用) [ EXPRESSION ]
Примечание: При использовании формата со скобками между выражением и скобками должны быть пробелы, т. е.,
[空格EXPRESSION空格]
Основные категории функций
1. Проверка файлов
Проверяет различные атрибуты файлов или каталогов:
| Выражение | Значение |
|---|---|
-e 文件 |
Существует ли файл |
-f 文件 |
Является ли обычным файлом (не каталогом или файлом устройства) |
-d 文件 |
Является ли каталогом |
-s 文件 |
Размер файла не пуст |
-r 文件 |
Файл доступен для чтения |
-w 文件 |
Файл доступен для записи |
-x 文件 |
Файл доступен для выполнения |
-L 文件 |
Файл является символической ссылкой |
Пример:
Примеры
echo "Это обычный файл"
fi
2. Сравнение строк
Сравнивает отношение между двумя строками:
| Выражение | Значение |
|---|---|
-z "字符串" |
Длина строки равна 0 |
-n "字符串" |
Длина строки не равна 0 |
"串1" = "串2" |
Строки равны |
"串1" != "串2" |
Строки не равны |
Пример:
Примеры
if [ -z "$username" ]; then
echo "Имя пользователя не может быть пустым"
fi
3. Числовое сравнение
Сравнивает соотношение между двумя целыми числами:
| Выражение | Значение |
|---|---|
n1 -eq n2 |
Equal |
n1 -ne n2 |
Не равно |
n1 -gt n2 |
Больше |
n1 -ge n2 |
Больше или равно |
n1 -lt n2 |
Меньше |
n1 -le n2 |
Меньше или равно |
Пример:
Примеры
echo "Сейчас пользователь root"
fi
4. Логические операторы
Объединяет несколько условий проверки:
| Operator | Значение | Пример |
|---|---|---|
! |
Логическое НЕ | [ ! -f file ] |
-a |
Логическое И | [ -f file -a -r file ] |
-o |
Логическое ИЛИ | [ -d dir -o -f file ] |
Современный рекомендуемый синтаксис(с использованием&&и||):
Примеры
[ -d dir ] || [ -f file ] # Это каталог или файл
Продвинутое использование
1. Вычисление составного условия
Примеры
echo "Файл существует и доступен для чтения"
fi
2. Комбинирование с инструкциями if
Примеры
echo "Запуск службы..."
elif [ "$1" = "stop" ]; then
echo "Остановка службы..."
else
echo "Недопустимый параметр"
fi
3. Использование при присваивании переменной
Примеры
Типичные ошибки и предостережения
Проблемы с пробелами:
Примеры
[ "$var"="value" ] # Неправильно, пропущен пробел
Заключение строковых переменных в кавычки:
Примеры
[ -n $var ] # Ошибки, когда $var пуста
Сравнение чисел и сравнение строк:
Примеры
[ "10" > "2" ] # Неправильно, это строковое сравнение (лексикографическое)
Путь проверки файла:
Примеры
[ -f $file ] # Ошибка возникает, когда путь содержит пробелы
Примеры практического применения
Пример 1: Проверка существования каталога резервных копий
Примеры
if [ ! -d "$backup_dir" ]; then
mkdir -p "$backup_dir"
echo "Создание каталога резервных копий:$backup_dir"
fi
Пример 2: Проверка пользовательского ввода
Примеры
if [ "$age" -lt 0 -o "$age" -gt 120 ]; then
echo "Некорректный ввод возраста"
exit 1
fi
Пример 3: Сценарий запуска службы
Примеры
if [ "$1" = "start" ]; then
if [ -f "/var/run/service.pid" ]; then
echo "Служба уже запущена"
else
echo "Запуск службы..."
# Команда запуска
fi
elif [ "$1" = "stop" ]; then
# Логика остановки
else
echo "Использование: $0 {start|stop}"
fi
Итог
testКоманда — это фундаментальный инструмент в программировании сценариев оболочки. Освоение её позволяет вам:
- Реализовывать логику условного ветвления
- Проверять состояние файлов и каталогов
- Сравнивать строки и числовые значения
- Создавать сложные условия вычисления
Запомните ключевые моменты:
- Формат с квадратными скобками используется чаще, но обратите внимание на пробелы
- Заключайте ссылки на переменные в двойные кавычки
- Различайте операторы сравнения строк и числового сравнения
- Используйте современный
&&и||чтобы заменить-aи-o
Энциклопедия команд Linux