English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основные операторы Shell

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: Проверка наличия файла и его состояния как символической ссылки.

Онлайн пример

Переменная file представляет собой файл /var/www/w3codebox/test.shРазмер файла составляет 100 байт, и у него есть rwx Права. Следующий код проверяет различные атрибуты файла:
#!/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
Файл является исполняемым
Файл является обычным файлом
Файл не является каталогом
Файл не пуст
Файл существует