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

#!/bin/bash

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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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
使用 (( )) 自减后: 5
Autres extensions