Скобки в Shell (включая одинарные скобки и двойные скобки) могут использоваться для проверки определённых условий:
- Арифметическое сравнение, например, равна ли переменная 0,
[ $var -eq 0 ]。 - Проверка атрибутов файла, например, существует ли файл,
[ -e $var ], является ли он каталогом,[ -d $var ]。 - Сравнение строк, например, совпадают ли две строки,
[[ $var1 = $var2 ]]。
[] часто можно заменить командой test, которая будет рассмотрена позже.
Арифметическое сравнение
Выполните проверку арифметических условий для переменных или значений:
[ $var -eq 0 ] # 当 $var 等于 0 时,返回真 [ $var -ne 0 ] # 当 $var 不等于 0 时,返回真
Обратите внимание, что между [ и ] и операндами должен быть пробел, иначе будет выдана ошибка. Например, следующий пример вызовет ошибку:
[$var -eq 0 ] или [ $var -ne 0]
Другие операторы сравнения:
| Operator | Значение |
|---|---|
| -gt | Больше |
| -lt | Меньше |
| -ge | Больше или равно |
| -le | Меньше или равно |
Можно объединять несколько условий для проверки с помощью -a (и) или -o (или):
[ $var1 -ne 0 -a $var2 -gt 2 ] # 使用逻辑与 -a [ $var1 -ne 0 -o $var2 -gt 2 ] # 使用逻辑或 -o
Проверка атрибутов файловой системы
Используйте различные флаги условий для проверки различных атрибутов файловой системы.
| Operator | Значение |
|---|---|
[ -f $file_var ] |
Возвращает true, если переменная $file_var является обычным путём к файлу или именем файла (файл) |
[ -x $var ] |
Возвращает true, если файл, указанный в переменной $var, является исполняемым (выполнение) |
[ -d $var ] |
Возвращает true, если файл, указанный в переменной $var, является каталогом (каталог) |
[ -e $var ] |
Возвращает true, если файл, указанный в переменной $var, существует (существование) |
[ -c $var ] |
Возвращает true, если файл, указанный в переменной $var, является путём к файлу символьного устройства (символьное устройство) |
[ -b $var ] |
Возвращает true, если файл, указанный в переменной $var, является путём к файлу блочного устройства (блочное устройство) |
[ -w $var ] |
Возвращает true, если файл, указанный в переменной $var, доступен для записи (запись) |
[ -r $var ] |
Возвращает true, если файл, указанный в переменной $var, доступен для чтения (чтение) |
[ -L $var ] |
Возвращает true, если файл, указанный в переменной $var, является символической ссылкой (ссылка) |
Способ использования следующий:
fpath="/etc/passwd" if [ -e $fpath ]; then echo File exits; else echo Does not exit; fi
Сравнение строк
При сравнении строк лучше всего использовать двойные квадратные скобки [[ ]]. Поскольку одинарные квадратные скобки могут вызвать некоторые ошибки, лучше их избегать.
Проверьте, совпадают ли две строки:
[[ $str1 = $str2 ]]
Возвращает true, когда str1 равно str2. То есть текст, содержащийся в str1 и str2, одинаков. Одинарный знак равенства также можно записать как двойной знак равенства, то есть приведённое выше сравнение строк эквивалентно [[ $str1 == $str2 ]].
Обратите внимание, что перед и после = есть пробел. Если вы забудете добавить пробел, это станет оператором присваивания, а не сравнением.
Другие случаи сравнения строк:
| Operator | Значение |
|---|---|
[[ $str1 != $str2 ]] |
Возвращает true, если str1 и str2 не совпадают |
[[ -z $str1 ]] |
Возвращает true, если str1 — пустая строка |
[[ -n $str1 ]] |
Возвращает true, если str1 — непустая строка |
Используя логические операторы && и ||, можно легко комбинировать несколько условий, например:
str1="Not empty" str2="" if [[ -n $str1 ]] && [[ -z $str2 ]]; then echo str1 is nonempty and str2 is empty string. fi
Команду test также можно использовать для проверки условий. Использование test позволяет избежать использования слишком большого количества скобок. Условия test в [] также можно реализовать с помощью test.
if [ $var -eq 0 ]; then echo "True"; fi
Эквивалентно:
if test $var -eq 0; then echo "True"; fi
Автор: liuchengxu_
Оригинал: https://blog.csdn.net/simple_the_best/article/details/75915767