Opérateur Shell


Shell, comme d'autres langages de programmation, prend en charge une variété d'opérateurs, notamment :

  • opérateurs arithmétiques

  • opérations relationnelles Symboles

  • Opérateurs booléens

  • Opérateurs de chaînes

  • Opérateurs de test de fichiers

Le bash natif ne prend pas en charge les opérations mathématiques simples, mais cela peut être réalisé via d'autres commandes, telles que awk et expr, expr est la plus couramment utilisée.

expr est un outil de calcul d'expression qui peut être utilisé pour évaluer des expressions.

Par exemple, pour ajouter deux nombres (notez l'utilisation du guillemet arrière ` au lieu du guillemet simple ') :

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

Exécutez l'exemple»

Exécutez le script, le résultat de sortie est le suivant :

两数之和为 : 4

Deux points à noter :

  • Il doit y avoir un espace entre l'expression et l'opérateur. Par exemple, 2+2 est incorrect et doit être écrit sous la forme 2 + 2, ce qui est différent de la plupart des langages de programmation que nous connaissons.

  • L'expression complète doit être entourée de ` ` Notez que ce caractère n'est pas le guillemet simple couramment utilisé, qui se trouve sous la touche Échap.


Opérateurs arithmétiques

Le tableau suivant répertorie les opérateurs arithmétiques couramment utilisés, en supposant que la variable a est 10 et la variable b est 20 :

运算符 说明 举例
+ 加法 `expr $a + $b` 结果为 30。
- 减法 `expr $a - $b` 结果为 10。
* 乘法 `expr $a * $b` 结果为  200。
/ 除法 `expr $b / $a` 结果为 2。
% 取余 `expr $b % $a` 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

Remarque : L'expression conditionnelle doit être placée entre crochets et il doit y avoir des espaces, par exemple : [$a==$b] est faux et doit être écrit comme [ $a == $b ].

Instance

L'exemple d'opérateur arithmétique est le suivant :

#!/bin/bash
# author:php中文网
# url:www.php.cn

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

Exécutez le script, le résultat de sortie est le suivant :

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

Remarque :

  • Le signe de multiplication (*) doit être précédé d'une barre oblique inverse () pour réaliser la multiplication

  • ; if...then...fi est une instruction conditionnelle, qui sera expliquée plus tard.


Opérateurs relationnels

Les opérateurs relationnels ne prennent en charge que les nombres, pas les chaînes, sauf si la valeur de la chaîne est un nombre.

Le tableau suivant répertorie les opérateurs relationnels couramment utilisés. Supposons que la variable a soit 10 et la variable b soit 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。

Exemples

Des exemples d'opérateurs relationnels sont les suivants. :

#!/bin/bash
# author:php中文网
# url:www.php.cn

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 -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

exécute le script et le résultat de sortie est le suivant :

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

Opérateurs booléens

Le tableau suivant répertorie les opérateurs booléens couramment utilisés, en supposant que la variable a vaut 10, la variable b vaut 20 :

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 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。

Instance

L'exemple d'opérateur booléen est le suivant :

#!/bin/bash
# author:php中文网
# url:www.php.cn

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 -lt 100 -a $b -gt 15 : 返回 true"
else
   echo "$a -lt 100 -a $b -gt 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi

Exécutez le script, le résultat de sortie est le suivant :

10 != 20 : a 不等于 b
10 -lt 100 -a 20 -gt 15 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 false

Opérateur logique

Ce qui suit présente les opérateurs logiques de Shell, en supposant que la variable a est 10 et la variable b est 20 :

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

Exemple

L'exemple d'opérateur logique est le suivant :

#!/bin/bash
# author:php中文网
# url:www.php.cn

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

Exécutez le script, le résultat de sortie est le suivant :

返回 false
返回 true

Opérateurs de chaîne

Le tableau suivant répertorie les opérateurs de chaîne couramment utilisés Supposons que la variable a soit. "abc" et variable b Pour "efg" :

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

Exemple

L'exemple d'opérateur de chaîne est le suivant :

#!/bin/bash
# author:php中文网
# url:www.php.cn

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

Exécutez le script, le résultat de sortie est le suivant :

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空

Opérateur de test de fichier

Les opérateurs de test de fichiers sont utilisés pour détecter diverses propriétés des fichiers Unix.

La détection d'attributs est décrite comme suit :

操作符 说明 举例
-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 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。


Exemple

Le fichier de variables représente le fichier "/var/www/php/test .sh", sa taille est de 100 octets et ses autorisations rwx. Le code suivant détectera divers attributs du fichier :


#!/bin/bash
# author:php中文网
# url:www.php.cn

file="/var/www/php/test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
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

Exécutez le script, le résultat de sortie est le suivant :

文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在