English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Comme d'autres langages de programmation, Shell prend en charge plusieurs opérateurs, y compris :
Opérateurs arithmétiques
Opérateurs de relation
Opérateurs booléens
Opérateurs de chaîne
Opérateurs de test de fichier
Bash natif ne prend pas en charge les opérations mathématiques simples, mais peut être réalisé par d'autres commandes, telles que awk et expr, expr étant le plus couramment utilisé.
expr est un outil de calcul d'expression, qui peut effectuer des opérations de calcul d'expression.
Par exemple, la somme de deux nombres (Attention, utilisez les guillemets inversés ` ` au lieu des guillemets simples ' '.) :
#!/bin/bash val=`expr 2 + 2` echo "La somme des deux nombres est : $val"
执行脚本,输出结果如下所示:
La somme des deux nombres est : 4
Deux points à noter :
Il doit y avoir des espaces entre l'expression et l'opérateur, par exemple 2+2 C'est incorrect, il doit être écrit 2 + 2C'est différent de la plupart des langages de programmation que nous connaissons.
L'expression complète doit être encadrée par ` `, attention, ce sont des caractères différents des guillemets simples, situés sous la touche d'échappement.
Le tableau suivant liste les opérateurs arithmétiques courants, en supposant que la variable a vaut 10,la variable b est 20 :
Opérateurs | Explication | Exemple |
---|---|---|
+ | Addition | `expr $a + $b` retourne 30. |
- | Soustraction | `expr $a - $b` retourne -10。 |
* | Multiplication | `expr $a \* $b` retourne 200. |
/ | Division | `expr $b / $a` retourne 2。 |
% | Reste | `expr $b % $a` retourne 0. |
= | Affectation | a=$b assigne la valeur de la variable b à a. |
== | Egal. Utilisé pour comparer deux nombres, retourne true si ils sont identiques. | [ $a == $b ] retourne false. |
!= | Différent. Utilisé pour comparer deux nombres, retourne true si ils ne sont pas identiques. | [ $a != $b ] retourne true. |
Attention :Les expressions conditionnelles doivent être placées entre crochets et doivent inclure des espaces, par exemple : [$a==$b] est incorrect, il doit être écrit [ $a == $b ]。
Voici des exemples d'opérateurs arithmétiques :
#!/bin/bash # auteur: tutoriel de base # url:fr.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 est égal à b" fi if [ $a != $b ] then echo "a est différent de b" fi
执行脚本,输出结果如下所示:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a est différent de b
Attention :
Multiplication*) doit être précédé d'un的反斜杠 (\) pour effectuer une multiplication.
if...then...fi est une instruction conditionnelle, qui sera expliquée plus tard.
La syntaxe de expr dans shell sous MAC est :$((expression)),dans l'expression, "*" n'a pas besoin de symbole d'échappement "\" .
Les opérateurs de relation ne supportent que les nombres, pas les chaînes de caractères, sauf si la valeur de la chaîne est un nombre.
Le tableau suivant liste les opérateurs de relation courants, en supposant que la variable a soit 10,la variable b est 20 :
Opérateurs | Explication | Exemple |
---|---|---|
-eq | Vérifie si les deux nombres sont égaux, et retourne true si c'est le cas. | [ \$a -eq \$b ] retourne false. |
-ne | Vérifie si les deux nombres ne sont pas égaux, et retourne true si ce n'est pas le cas. | [ \$a -ne \$b ] retourne true. |
-gt | Vérifie si le nombre de gauche est supérieur au nombre de droite, et retourne true si c'est le cas. | [ \$a -gt \$b ] retourne false. |
-lt | Vérifie si le nombre de gauche est inférieur au nombre de droite, et retourne true si c'est le cas. | [ \$a -lt \$b ] retourne true. |
-ge | Vérifie si le nombre de gauche est supérieur ou égal au nombre de droite, et retourne true si c'est le cas. | [ \$a -ge \$b ] retourne false. |
-le | Vérifie si le nombre de gauche est inférieur ou égal au nombre de droite, et retourne true si c'est le cas. | [ \$a -le \$b ] retourne true. |
Les exemples d'opérateurs de relation sont les suivants :
#!/bin/bash # author:基础教程网 # url:fr.oldtoolbag.com a=10 b=20 if [ $a -eq \$b ] then echo "\$a -eq \$b : a égal à b" else echo "\$a -eq \$b: a non égal à b" fi if [ $a -ne \$b ] then echo "\$a -ne \$b: a non égal à b" else echo "\$a -ne \$b : a égal à b" fi if [ $a -gt \$b ] then echo "\$a -gt \$b: a supérieur à b" else echo "\$a -gt \$b: a non supérieur à b" fi if [ $a -lt \$b ] then echo "\$a -lt \$b: a inférieur à b" else echo "\$a -lt \$b: a non inférieur à b" fi if [ $a -ge \$b ] then echo "\$a -ge \$b: a supérieur ou égal à b" else echo "\$a -ge \$b: a inférieur à b" fi if [ $a -le \$b ] then echo "\$a -le \$b: a inférieur ou égal à b" else echo "\$a -le \$b: a supérieur à b" fi
执行脚本,输出结果如下所示:
10 -eq 20: a non égal à b 10 -ne 20: a non égal à b 10 -gt 20: a non supérieur à b 10 -lt 20: a inférieur à b 10 -ge 20: a inférieur à b 10 -le 20: a inférieur ou égal à b
Le tableau suivant liste les opérateurs booléens courants, en supposant que la variable a soit 10,la variable b est 20 :
Opérateurs | Explication | Exemple |
---|---|---|
! | Opération de négation, retourne false si l'expression est true, sinon retourne true. | [ ! false ] retourne true. |
-o | Opération de disjonction, retourne true si au moins une expression est true. | [ \$a -lt 20 -o \$b -gt 100 ] retourne true. |
-a | Opération de conjunction, retourne true uniquement si les deux expressions sont true. | [ \$a -lt 20 -a \$b -gt 100 ] retourne false. |
Les exemples de calculs booléens sont les suivants :
#!/bin/bash # auteur: tutoriel de base # url:fr.oldtoolbag.com a=10 b=20 if [ $a != $b ] then echo "$a != $b : a n'est pas égal à b" else echo "\$a == \$b: a égale à b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a petit 100 : et $b grand 15 : retourne true" else echo "$a petit 100 : et $b grand 15 : retourne false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a petit 100 : ou $b grand 100 : retourne true" else echo "$a petit 100 : ou $b grand 100 : retourne false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a petit 5 ou $b grand 100 : retourne true" else echo "$a petit 5 ou $b grand 100 : retourne false" fi
执行脚本,输出结果如下所示:
10 != 20 : a n'est pas égal à b 10 petit 100 : et 20 : grand 15 : retourne true 10 petit 100 : ou 20 : grand 100 : retourne true 10 petit 5 ou 20 : grand 100 : retourne false
Voici présentés les opérateurs logiques de Shell, en supposant que la variable a soit 10,la variable b est 20:
Opérateurs | Explication | Exemple |
---|---|---|
&& | ET logique | [[ $a -lt 100 && $b -gt 100 ]] retourne false |
|| | OU logique | [[ $a -lt 100 || $b -gt 100 ]] retourne true |
Les exemples d'opérateurs logiques suivants :
#!/bin/bash # author:基础教程网 # url:fr.oldtoolbag.com a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "Retourne true" else echo "Retourne false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "Retourne true" else echo "Retourne false" fi
执行脚本,输出结果如下所示:
Retourne false Retourne true
Le tableau suivant liste les opérateurs de chaîne courants, en supposant que la variable a soit "abc", et la variable b soit "efg" :
Opérateurs | Explication | Exemple |
---|---|---|
= | Vérifiez si deux chaînes sont égales, retourne true si elles sont égales. | [ $a = $b ] retourne false. |
!= | Vérifiez si deux chaînes ne sont pas égales, retourne true si elles ne sont pas égales. | [ $a != $b ] retourne true. |
-z | Vérifiez si la longueur de la chaîne est 0, retourne true si elle est 0. | [ -z $a ] retourne false. |
-n | Vérifiez si la longueur de la chaîne n'est pas 0, retourne true si elle n'est pas 0. | [ -n "$a" ] retourne true. |
$ | Vérifiez si la chaîne est vide, retourne true si elle n'est pas vide. | [ $a ] retourne true. |
Les exemples d'opérateurs de chaîne suivants :
#!/bin/bash # author:基础教程网 # url:fr.oldtoolbag.com a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a est égal à b" else echo "$a = $b : a n'est pas égal à b" fi if [ $a != $b ] then echo "$a != $b : a n'est pas égal à b" else echo "$a != $b : a est égal à b" fi if [ -z $a ] then echo "}}}-z $a : la longueur de la chaîne est 0" else echo "}}}-z $a : la longueur de la chaîne n'est pas 0" fi if [ -n "$a" ] then echo "}}}-n $a : la longueur de la chaîne n'est pas 0" else echo "}}}-n $a : la longueur de la chaîne est 0" fi if [ $a ] then echo "$a : la chaîne n'est pas vide" else echo "$a : la chaîne est vide" fi
执行脚本,输出结果如下所示:
abc = efg : a n'est pas égal à b abc != efg : a n'est pas égal à b -z abc : la longueur de la chaîne n'est pas 0 -n abc : la longueur de la chaîne n'est pas 0 abc : la chaîne n'est pas vide
Les opérateurs de test de fichier sont utilisés pour vérifier divers attributs des fichiers Unix.
La description des attributs suivants s'applique :
Opérateur | Explication | Exemple |
---|---|---|
-b file | Vérifie si le fichier est un fichier de périphérique de bloc, s'il l'est, retourne true. | [ -b $file ] retourne false. |
-c file | Vérifie si le fichier est un fichier de périphérique de caractères, s'il l'est, retourne true. | [ -c $file ] retourne false. |
-d file | Vérifie si le fichier est un répertoire, s'il l'est, retourne true. | [ -d $file ] retourne false. |
-f file | Vérifie si le fichier est un fichier ordinaire (ni répertoire, ni fichier de périphérique), s'il l'est, retourne true. | [ -f $file ] retourne true. |
-g file | Vérifie si le fichier a le bit SGID configuré, s'il l'est, retourne true. | [ -g $file ] retourne false. |
-k file | Vérifie si le fichier a le bit粘着位(configuré), s'il l'est, retourne true. | [ -k $file ] retourne false. |
-p file | Vérifie si le fichier est une pipe nommée, s'il l'est, retourne true. | [ -p $file ] retourne false. |
-u file | Vérifie si le fichier a le bit SUID configuré, s'il l'est, retourne true. | [ -u $file ] retourne false. |
-r file | Vérifie si le fichier est accessible en lecture, s'il l'est, retourne true. | [ -r $file ] retourne true. |
-w file | Vérifie si le fichier est accessible en écriture, s'il l'est, retourne true. | [ -w $file ] retourne true. |
-x file | Vérifie si le fichier est exécutable, s'il l'est, retourne true. | [ -x $file ] retourne true. |
-s file | Vérifie si le fichier est vide (taille du fichier supérieure à 0), s'il ne l'est pas, retourne true. | [ -s $file ] retourne true. |
-e file | Vérifie si le fichier (y compris le répertoire) existe, s'il en est ainsi, retourne true. | [ -e $file ] retourne true. |
其他检查符:
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。
#!/bin/bash # author:基础教程网 # url:fr.oldtoolbag.com file="/var/www/w3codebox/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
执行脚本,输出结果如下所示:
文件可读 文件可写 文件可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在