Opérateurs de base Shell
Comme les autres langages de programmation, Shell prend en charge une variété d'opérateurs, notamment :
- Opérateurs arithmétiques
- Opérateurs relationnels
- 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 elles peuvent être implémentées via d'autres commandes, telles que awk et expr ; expr est le plus couramment utilisé.
expr est un outil de calcul d'expressions qui peut être utilisé pour évaluer des expressions.
Par exemple, additionner deux nombres (Notez l'utilisation des accents graves`et non des guillemets simples'):
Exemples
val=`expr 2 + 2`
echo La somme des deux nombres est :$val"
Exécutez le script, et le résultat de sortie est le suivant :
两数之和为 : 4
Deux points à noter :
- Il doit y avoir des espaces entre les expressions et les opérateurs. Par exemple, 2+2 est incorrect ; il faut l'écrire 2 + 2. Cela diffère de la plupart des langages de programmation que nous connaissons.
- L'expression complète doit être entourée par` ``, notez que ce caractère n'est pas le guillemet simple couramment utilisé ; il se trouve sous la touche Esc.
Opérateurs arithmétiques
Le tableau suivant répertorie les opérateurs arithmétiques couramment utilisés, en supposant que la variable a vaut 10 et que la variable b vaut 20 :
| Operator | Description | Exemple |
|---|---|---|
| + | Addition | `expr $a + $b` donne 30. |
| - | Soustraction | `expr $a - $b` donne -10. |
| * | Multiplication | `expr $a \* $b` donne 200. |
| / | Division | `expr $b / $a` donne 2. |
| % | Modulo | `expr $b % $a` donne 0. |
| = | Affectation | a=$b affecte la valeur de la variable b à a. |
| == | Égal. Utilisé pour comparer deux nombres ; renvoie true s'ils sont identiques. | [ $a == $b ] renvoie false. |
| != | Différent. Utilisé pour comparer deux nombres ; renvoie true s'ils ne sont pas identiques. | [ $a != $b ] renvoie true. |
Remarque :Les expressions conditionnelles doivent être placées entre crochets avec des espaces, par exemple :[$a==$b]est incorrect ; il doit être écrit comme[ $a == $b ]。
Exemples
Voici un exemple d'opérateurs arithmétiques :
Exemples
# auteur:Example
# url:www.example.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 ]
puis
echo a est égal à b
fi
if [ $a != $b ]
puis
echo a n'est pas égal à b
fi
Exécutez le script, et 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 effectuer une multiplication ;
- if...then...fi est une instruction conditionnelle, qui sera expliquée plus tard.
- Sur MAC, la syntaxe de expr dans le shell est :$((expression)), ici le '*' dans l'expression n'a pas besoin du caractère d'échappement '\'.
Opérateurs relationnels
Les opérateurs relationnels ne prennent en charge 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 relationnels couramment utilisés, en supposant que la variable a vaut 10 et que la variable b vaut 20 :
| Operator | Description | Exemple |
|---|---|---|
| -eq | Vérifie si deux nombres sont égaux ; renvoie vrai s'ils sont égaux. | [ $a -eq $b ] renvoie faux. |
| -ne | Vérifie si deux nombres ne sont pas égaux ; renvoie vrai s'ils ne sont pas égaux. | [ $a -ne $b ] renvoie vrai. |
| -gt | Vérifie si le nombre à gauche est supérieur à celui de droite ; si c'est le cas, renvoie vrai. | [ $a -gt $b ] renvoie faux. |
| -lt | Vérifie si le nombre à gauche est inférieur à celui de droite ; si c'est le cas, renvoie vrai. | [ $a -lt $b ] renvoie vrai. |
| -ge | Vérifie si le nombre à gauche est supérieur ou égal à celui de droite ; si c'est le cas, renvoie true. | [ $a -ge $b ] renvoie false. |
| -le | Vérifie si le nombre à gauche est inférieur ou égal à celui de droite ; si c'est le cas, renvoie true. | [ $a -le $b ] renvoie true. |
Exemples
Voici un exemple d'opérateurs relationnels :
Exemples
# auteur:Example
# url:www.example.com
a=10
b=20
if [ $a -eq $b ]
puis
echo "$a -eq $b: a est égal à b
else
echo "$a -eq $b: a n'est pas égal à b
fi
if [ $a -ne $b ]
puis
echo "$a -ne $b: a n'est pas égal à b
else
echo "$a -ne $b: a est égal à b
fi
if [ $a -gt $b ]
puis
echo "$a -gt $b: a est supérieur à b
else
echo "$a -gt $b: a n'est pas supérieur à b
fi
if [ $a -lt $b ]
puis
echo "$a -lt $b: a est inférieur à b
else
echo "$a -lt $b: a n'est pas inférieur à b
fi
if [ $a -ge $b ]
puis
echo "$a -ge $b: a est supérieur ou égal à b
else
echo "$a -ge $b: a est inférieur à b
fi
if [ $a -le $b ]
puis
echo "$a -le $b: a est inférieur ou égal à b
else
echo "$a -le $b: a est supérieur à b
fi
Exécutez 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 et que la variable b vaut 20 :
| Operator | Description | Exemple |
|---|---|---|
| ! | Opération de négation ; renvoie false si l'expression est vraie, sinon renvoie true. | [ ! false ] renvoie true. |
| -o | Opération OU ; renvoie true si une expression est vraie. | [ $a -lt 20 -o $b -gt 100 ] renvoie true. |
| -a | Opération ET ; renvoie true uniquement si les deux expressions sont vraies. | [ $a -lt 20 -a $b -gt 100 ] renvoie false. |
Exemples
Un exemple d'opérateurs booléens est le suivant :
Exemples
# auteur:Example
# url:www.example.com
a=10
b=20
if [ $a != $b ]
puis
echo "$a != $b: a n'est pas égal à b
else
echo "$a == $b: a est égal à b
fi
if [ $a -lt 100 -a $b -gt 15 ]
puis
echo "$aest inférieur à 100 et$bsupérieur à 15 : renvoie true
else
echo "$aest inférieur à 100 et$bsupérieur à 15 : renvoie faux
fi
if [ $a -lt 100 -o $b -gt 100 ]
puis
echo "$aest inférieur à 100 ou$bsupérieur à 100 : renvoie vrai
else
echo "$aest inférieur à 100 ou$bsupérieur à 100 : renvoie faux
fi
if [ $a -lt 5 -o $b -gt 100 ]
puis
echo "$aest inférieur à 5 ou$bsupérieur à 100 : renvoie vrai
else
echo "$aest inférieur à 5 ou$bsupérieur à 100 : renvoie faux
fi
Exécutez le script, et le résultat de sortie est le suivant :
10 != 20 : a 不等于 b 10 小于 100 且 20 大于 15 : 返回 true 10 小于 100 ou 20 大于 100 : 返回 true 10 小于 5 ou 20 大于 100 : 返回 false
Opérateurs logiques
Ce qui suit présente les opérateurs logiques de Shell, en supposant que la variable a vaut 10 et que la variable b vaut 20:
| Operator | Description | Exemple |
|---|---|---|
| && | ET logique | [[ $a -lt 100 && $b -gt 100 ]] renvoie faux |
| || | OU logique | [[ $a -lt 100 || $b -gt 100 ]] renvoie vrai |
Exemples
Un exemple d'opérateurs logiques est le suivant:
Exemples
# auteur:Example
# url:www.example.com
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
puis
echo return true
else
echo return false
fi
if [[ $a -lt 100 || $b -gt 100 ]]
puis
echo return true
else
echo return false
fi
Exécutez le script, la sortie est la suivante:
返回 false 返回 true
Opérateurs de chaînes
Le tableau suivant répertorie les opérateurs de chaînes couramment utilisés, en supposant que la variable a est "abc" et la variable b est "efg" :
| Operator | Description | Exemple |
|---|---|---|
| = | Vérifie si deux chaînes sont égales ; renvoie true si elles sont égales. | [ $a = $b ] renvoie false. |
| != | Vérifie si deux chaînes ne sont pas égales ; renvoie true si elles ne sont pas égales. | [ $a != $b ] renvoie true. |
| -z | Vérifie si la longueur de la chaîne est 0 ; renvoie true si elle est 0. | [ -z $a ] renvoie false. |
| -n | Vérifie si la longueur de la chaîne n'est pas 0 ; renvoie true si elle n'est pas 0. | [ -n "$a" ] renvoie true. |
| $ | Vérifie si la chaîne n'est pas vide ; renvoie true si elle n'est pas vide. | [ $a ] renvoie true. |
Exemples
Un exemple d'opérateurs de chaînes est le suivant :
Exemples
# auteur: Exemple
# url:www.example.com
a="abc"
b="efg"
if [ $a = $b ]
puis
echo "$a = $b: a est égal à b"
else
echo "$a = $b: a n'est pas égal à b"
fi
if [ $a != $b ]
puis
echo "$a != $b: a n'est pas égal à b"
else
echo "$a != $b: a est égal à b"
fi
if [ -z $a ]
puis
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" ]
puis
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 ]
puis
echo "$a: la chaîne n'est pas vide"
else
echo "$a: la chaîne est vide"
fi
Exécutez le script, la sortie est la suivante:
abc = efg: a 不等于 b abc != efg : a 不等于 b -z abc : 字符串长度不为 0 -n abc : 字符串长度不为 0 abc : 字符串不为空
Opérateurs de test de fichiers
Les opérateurs de test de fichiers sont utilisés pour vérifier divers attributs des fichiers Unix.
Les descriptions de détection d'attributs sont les suivantes :
| Operator | Description | Exemple |
|---|---|---|
| -b fichier | Vérifie si le fichier est un fichier de périphérique bloc ; si c'est le cas, renvoie true. | [ -b $file ] renvoie false. |
| -c file | Vérifie si le fichier est un fichier de périphérique caractère ; si c'est le cas, renvoie true. | [ -c $file ] renvoie false. |
| -d file | Vérifie si le fichier est un répertoire ; si c'est le cas, renvoie true. | [ -d $file ] renvoie false. |
| -f file | Vérifie si le fichier est un fichier ordinaire (ni un répertoire ni un fichier de périphérique) ; si c'est le cas, renvoie true. | [ -f $file ] renvoie true. |
| -g file | Vérifier si le bit SGID est défini sur le fichier ; si c'est le cas, renvoyer true. | [ -g $file ] renvoie false. |
| -k file | Vérifier si le sticky bit est défini sur le fichier ; si c'est le cas, renvoyer true. | [ -k $file ] renvoie false. |
| -p file | Vérifier si le fichier est un tube nommé ; si c'est le cas, renvoyer true. | [ -p $file ] renvoie false. |
| -u file | Vérifier si le bit SUID est défini sur le fichier ; si c'est le cas, renvoyer true. | [ -u $file ] renvoie false. |
| -r file | Vérifie si le fichier est lisible ; si oui, renvoie vrai. | [ -r $file ] renvoie vrai. |
| -w file | Vérifie si le fichier est accessible en écriture ; si oui, renvoie vrai. | [ -w $file ] renvoie vrai. |
| -x file | Vérifie si le fichier est exécutable ; si oui, renvoie vrai. | [ -x $file ] renvoie vrai. |
| -s file | Vérifie si le fichier est vide (si la taille du fichier est supérieure à 0) ; renvoie vrai s'il n'est pas vide. | [ -s $file ] renvoie vrai. |
| -e file | Vérifie si le fichier (y compris les répertoires) existe ; si c'est le cas, renvoie true. | [ -e $file ] renvoie true. |
Autres opérateurs de vérification :
- -S: Vérifie si un fichier est un socket.
- -L: Vérifie si le fichier existe et s'il s'agit d'un lien symbolique.
Exemples
La variable file représente un fichier/var/www/example/test.sh, il a une taille de 100 bytes et arwxpermissions. Le code suivant vérifiera divers attributs de ce fichier :
Exemples
# auteur: Exemple
# url:www.example.com
file="/var/www/example/test.sh"
if [ -r $file ]
puis
echo "Le fichier est lisible"
else
echo "Le fichier n'est pas lisible"
fi
if [ -w $file ]
puis
echo "Le fichier est accessible en écriture"
else
echo "Le fichier n'est pas accessible en écriture"
fi
if [ -x $file ]
puis
echo "Le fichier est exécutable"
else
echo "Le fichier n'est pas exécutable"
fi
if [ -f $file ]
puis
echo "Le fichier est un fichier régulier"
else
echo "Le fichier est un fichier spécial"
fi
if [ -d $file ]
puis
echo "Le fichier est un répertoire"
else
echo "Le fichier n'est pas un répertoire"
fi
if [ -s $file ]
puis
echo "Le fichier n'est pas vide"
else
echo "Le fichier est vide"
fi
if [ -e $file ]
puis
echo "Le fichier existe"
else
echo "Le fichier n'existe pas"
fi
Exécutez le script, la sortie est la suivante:
File is readable File is writable File is executable File is a regular file File is not a directory File is not empty File exists
Opérateurs d'incrémentation et de décrémentation
Bien que Shell lui-même n'ait pas d'opérateurs ++ et -- comme C, C++, ou Java, la même fonctionnalité peut être implémentée d'autres manières. Voici quelques méthodes courantes :
Utilisation de la commande let
letLa commande permet d'effectuer des opérations arithmétiques sur des nombres entiers.
Exemples
# Initialiser les variables
num=5
# Incrémenter
let num++
# Décrémenter
let num--
echo $num
Utilisation de $(( )) pour les opérations arithmétiques
$(( ))Cette syntaxe est également un moyen d'effectuer des opérations arithmétiques.
Exemples
# Initialiser les variables
num=5
# Incrémenter
num=$((num + 1))
# Décrémenter
num=$((num - 1))
echo $num
Utilisation de la commande expr
exprLa commande peut être utilisée pour les opérations arithmétiques, mais dans les scripts modernes, elle n’est pas aussiletet$(( ))couramment utilisée.
Exemples
# Initialiser les variables
num=5
# Incrémenter
num=$(expr $num + 1)
# Décrémenter
num=$(expr $num - 1)
echo $num
Utilisation de (( )) pour les opérations arithmétiques
Semblable à $(( )), la syntaxe (( )) peut également être utilisée pour les opérations arithmétiques.
Exemples
# Initialiser les variables
num=5
# Incrémenter
((num++))
# Décrémenter
((num--))
echo $num
Exemples
Voici un exemple complet de script démontrant l’utilisation des opérations d’incrémentation et de décrémentation :
Exemples
# Initialiser les variables
num=5
echo "Valeur initiale :$num"
# Incrémenter
let num++
echo "Après incrémentation :$num"
# Décrémenter
let num--
echo "Après décrémentation :$num"
# Utilisation de $(( ))
num=$((num + 1))
echo "En utilisant$(( )) après incrémentation :$num"
num=$((num - 1))
echo "En utilisant$(( )) après décrémentation :$num"
# En utilisant expr
num=$(expr $num + 1)
echo "En utilisant expr après incrémentation :$num"
num=$(expr $num - 1)
echo "En utilisant expr après décrémentation :$num"
# En utilisant (( ))
((num++))
echo "En utilisant (( )) après incrémentation :$num"
((num--))
echo "En utilisant (( )) après décrémentation :$num"
L'exécution de ce script produira la sortie suivante :
初始值: 5 自增后: 6 自减后: 5 使用 $(( )) 自增后: 6 使用 $(( )) 自减后: 5 使用 expr 自增后: 6 使用 expr 自减后: 5 使用 (( )) 自增后: 6 使用 (( )) 自减后: 5Autres extensions