English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Shell, как и другие языки программирования, поддерживает множество операторов, включая:
Арифметические операторы
Отношений运算аторы
Булевы операторы
Строковые операторы
Операторы проверки файла
Bash не поддерживает простые арифметические операции, но их можно выполнить с помощью других команд, таких как awk и expr, expr наиболее часто используется.
expr - это инструмент вычисления выражений, с помощью которого можно выполнять вычисления выражений.
Например, сложение двух чисел (Обратите внимание, что используется обратный апостроф ` вместо одинарной кавычки '):
#!/bin/bash val=`expr 2 + 2` echo "Сумма двух чисел составляет : $val"
Запустите скрипт, и результат будет следующим:
Сумма двух чисел составляет : 4
Два замечания:
Между выражением и оператором должно быть пробел, например 2+2 не правильно, необходимо написать 2 + 2, что не так, как в большинстве знакомых нам языков программирования.
Полный выражение должен быть заключен в ` `, обратите внимание, что этот символ не является обычной одинарной кавычкой, он находится под клавишей Esc.
В таблице ниже приведены常用的 арифметические операторы, предполагается, что переменная a равна 10, переменная b равна 20:
Операторы | Объяснение | Пример |
---|---|---|
+ | Добавление | `expr $a + $b` возвращает 30. |
- | Удаление | `expr $a - $b` возвращает -10. |
* | Умножение | `expr $a * $b` возвращает 200. |
/ | Деление | `expr $b / $a` возвращает 2. |
% | Оставшаяся часть | `expr $b % $a` возвращает 0. |
= | Ассигнование | a=$b assigns the value of variable b to a. |
== | Равны. Используется для сравнения двух чисел, возвращает true, если они равны. | [ $a == $b ] возвращает false. |
!= | Не равны. Используется для сравнения двух чисел, возвращает true, если они не равны. | [ $a != $b ] возвращает true. |
Внимание:条件ные выражения должны быть放在 квадратных скобках и должны содержать пробелы, например: [$a==$b] ошибочно, необходимо написать [ $a == $b ].
Примеры арифметических операторов приведены ниже:
#!/bin/bash # author: Основной курс # url:ru.oldtoolbag.com a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a * $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a равен b" fi if [ $a != $b ] then echo "a не равен b" fi
Запустите скрипт, и результат будет следующим:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a не равен b
Внимание:
Для выполнения умножения перед кегсом (*) необходимо добавить обратную косую черту (\).
if...then...fi - это условное предложение, об этом будет рассказано позже.
Синтаксис shell expr в MAC:$((выражение))в данном выражении "*" не требует символ escaping "\".
Отношений运算аторы поддерживают только числа, не поддерживают строки,除非 значение строки является числом.
В таблице ниже перечислены常用的 отношений运算аторы, переменная a равна 10, переменная b равна 20:
Операторы | Объяснение | Пример |
---|---|---|
-eq | Проверяет, не равны ли две цифры, если равны, то возвращает true. | [ $a -eq $b ] возвращает false. |
-ne | Проверяет, не равны ли две цифры, если не равны, то возвращает true. | [ $a -ne $b ] возвращает true. |
-gt | Проверяет, не больше ли левая цифра правой, если да, то возвращает true. | [ $a -gt $b ] возвращает false. |
-lt | Проверяет, не меньше ли левая цифра правой, если да, то возвращает true. | [ $a -lt $b ] возвращает true. |
-ge | Проверяет, не больше ли левая цифра правой, если да, то возвращает true. | [ $a -ge $b ] возвращает false. |
-le | Проверяет, не меньше ли левая цифра правой, если да, то возвращает true. | [ $a -le $b ] возвращает true. |
Примеры отношений运算аторов показаны ниже:
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a равен b" else echo "$a -eq $b: a не равен b" fi if [ $a -ne $b ] then echo "$a -ne $b: a не равен b" else echo "$a -ne $b : a равен b" fi if [ $a -gt $b ] then echo "$a -gt $b: a больше b" else echo "$a -gt $b: a не больше b" fi if [ $a -lt $b ] then echo "$a -lt $b: a меньше b" else echo "$a -lt $b: a не меньше b" fi if [ $a -ge $b ] then echo "$a >= $b: a больше или равно b" else echo "$a >= $b: a меньше b" fi if [ $a -le $b ] then echo "$a <= $b: a меньше или равно b" else echo "$a <= $b: a больше b" fi
Запустите скрипт, и результат будет следующим:
10 != 20: a не равно b 10 != 20: a не равно b 10 <= 20: a не больше b 10 < 20: a меньше b 10 >= 20: a меньше b 10 <= 20: a меньше или равно b
В таблице ниже приведены常用的布尔ские операторы, переменная a равна 10, переменная b равна 20:
Операторы | Объяснение | Пример |
---|---|---|
! | Операция НЕ, возвращается false, если выражение true, в противном случае true. | [ ! false ] возвращается true. |
-o | Операция ИЛИ, возвращается true, если по крайней мере одно выражение true. | [ $a -lt 20 -o $b -gt 100 ] возвращается true. |
-a | Операция И, возвращается true только если оба выражения true. | [ $a -lt 20 -a $b -gt 100 ] возвращается false. |
Примеры布尔ских операторов приведены ниже:
#!/bin/bash # author: Основной курс # url:ru.oldtoolbag.com a=10 b=20 if [ $a != $b ] then echo "$a != $b : a не равно b" else echo "$a == $b: a равно b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a меньше 100 и $b больше 15: возвращается true" else echo "$a меньше 100 и $b больше 15: возвращается false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a меньше 100 или $b больше 100: возвращается true" else echo "$a меньше 100 или $b больше 100: возвращается false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a меньше 5 или $b больше 100: возвращается true" else echo "$a меньше 5 или $b больше 100: возвращается false" fi
Запустите скрипт, и результат будет следующим:
10 не равно 20: a не равно b 10 меньше 100 и 20 больше 15: возвращается true 10 меньше 100 или 20 больше 100: возвращается true 10 меньше 5 или 20 больше 100: возвращается false
Далее介绍 Shell логических операторов, предполагается, что переменная a равна 10, переменная b равна 20:
Операторы | Объяснение | Пример |
---|---|---|
&& | Логическое И | [[ $a -lt 100 && $b -gt 100 ]] возвращает false |
|| | Логическое ИЛИ | [[ $a -lt 100 || $b -gt 100 ]] возвращает true |
Примеры логических операторов приведены ниже:
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "Возвращает true" else echo "Возвращает false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "Возвращает true" else echo "Возвращает false" fi
Запустите скрипт, и результат будет следующим:
Возвращает false Возвращает true
В таблице приведены常用的 строковые операторы, предполагается, что переменная a равна "abc", переменная b равна "efg":
Операторы | Объяснение | Пример |
---|---|---|
= | Проверка, равны ли две строки, равны возвращает true. | [ $a = $b ] возвращает false. |
!= | Проверка, не равны ли две строки, не равны возвращает true. | [ $a != $b ] возвращает true. |
-z | Проверка, не равна ли длина строки 0, равна 0 возвращает true. | [ -z $a ] возвращает false. |
-n | Проверка, не равна ли длина строки 0, не равна 0 возвращает true. | [ -n "$a" ] возвращает true. |
$ | Проверка, пуста ли строка, не пуста возвращает true. | [ $a ] возвращает true. |
Примеры операций со строками приведены ниже:
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a равно b" else echo "$a = $b: a не равно b" fi if [ $a != $b ] then echo "$a != $b : a не равно b" else echo "$a != $b: a равен b" fi if [ -z $a ] then echo "-z $a : длина строки равна 0" else echo "-z $a : длина строки не равна 0" fi if [ -n "$a" ] then echo "-n $a : длина строки не равна 0" else echo "-n $a : длина строки равна 0" fi if [ $a ] then echo "$a : строка не пуста" else echo "$a : строка пуста" fi
Запустите скрипт, и результат будет следующим:
abc = efg: a не равно b abc != efg : a не равно b -z abc : Длина строки не равна 0 -n abc : Длина строки не равна 0 abc : Строка не пуста
Операторы проверки файла используются для проверки различных свойств Unix файлов.
Описание свойств следующим образом:
Оператор | Объяснение | Пример |
---|---|---|
-b file | Проверка, является ли файл файлом блочного устройства, если да, то возвращает true. | [ -b $file ] возвращает false. |
-c file | Проверка, является ли файл файлом символьного устройства, если да, то возвращает true. | [ -c $file ] возвращает false. |
-d file | Проверка, является ли файл каталогом, если да, то возвращает true. | [ -d $file ] возвращает false. |
-f file | Проверка, является ли файл обычным файлом (ни каталог, ни устройство), если да, то возвращает true. | [ -f $file ] возвращает true. |
-g file | Проверка, установлен ли бит SGID для файла, если да, то возвращает true. | [ -g $file ] возвращает false. |
-k file | Проверка, установлен ли бит粘着 (Sticky Bit) для файла, если да, то возвращает true. | [ -k $file ] возвращает false. |
-p file | Проверка, является ли файл именованной管道, если да, то возвращает true. | [ -p $file ] возвращает false. |
-u file | Проверка, установлен ли бит SUID для файла, если да, то возвращает true. | [ -u $file ] возвращает false. |
-r file | Проверка, можно ли читать файл, если да, то возвращает true. | [ -r $file ] возвращает true. |
-w file | Проверка, можно ли写入 файл, если да, то возвращает true. | [ -w $file ] возвращает true. |
-x file | Проверка, является ли файл исполняемым, если да, то возвращает true. | [ -x $file ] возвращает true. |
-s file | Проверка, пуст ли файл (размер файла больше 0), если нет, то возвращает true. | [ -s $file ] возвращает true. |
-e file | Проверка наличия файла (включая каталог) и его existence, если да, то возвращает true. | [ -e $file ] возвращает true. |
Другие символы проверки:
-S: Определение, является ли файл сокетом.
-L: Проверка наличия файла и его состояния как символической ссылки.
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com file="/var/www/w3codebox/test.sh" if [ -r $file ] then echo "Файл является readable" else echo "Файл не является readable" fi if [ -w $file ] then echo "Файл является writable" else echo "Файл не является writable" fi if [ -x $file ] then echo "Файл является executable" else echo "Файл не является executable" fi if [ -f $file ] then echo "Файл является обычным файлом" else echo "Файл является специальным файлом" fi if [ -d $file ] then echo "Файл является каталогом" else echo "Файл не является каталогом" fi if [ -s $file ] then echo "Файл не пуст" else echo "Файл пуст" fi if [ -e $file ] then echo "Файл существует" else echo "Файл не существует" fi
Запустите скрипт, и результат будет следующим:
Файл является readable Файл является writable Файл является исполняемым Файл является обычным файлом Файл не является каталогом Файл не пуст Файл существует