Les crochets dans Shell (y compris les crochets simples et les doubles crochets) peuvent être utilisés pour tester certaines conditions :

  • Comparaison arithmétique, par exemple si une variable vaut 0,[ $var -eq 0 ]。
  • Test d'attributs de fichier, par exemple si un fichier existe,[ -e $var ], s'il s'agit d'un répertoire,[ -d $var ]。
  • Comparaison de chaînes, par exemple si deux chaînes sont identiques,[[ $var1 = $var2 ]]。

[] peut souvent être remplacé par la commande test, qui sera présentée plus tard.

Comparaison arithmétique

Effectuez un jugement conditionnel arithmétique sur des variables ou des valeurs :

[ $var -eq 0 ]  # 当 $var 等于 0 时,返回真
[ $var -ne 0 ]  # 当 $var 不等于 0 时,返回真

Notez qu'il doit y avoir un espace entre [ et ] et les opérandes, sinon une erreur sera signalée. Par exemple, ce qui suit provoquera une erreur :

[$var -eq 0 ]  ou  [ $var -ne 0] 

Autres opérateurs de comparaison :

Operator Signification
-gt Supérieur à
-lt Inférieur à
-ge Supérieur ou égal à
-le Inférieur ou égal à

Vous pouvez combiner plusieurs conditions de test avec -a (et) ou -o (ou) :

[ $var1 -ne 0 -a $var2 -gt 2 ]  # 使用逻辑与 -a
[ $var1 -ne 0 -o $var2 -gt 2 ]  # 使用逻辑或 -o

Test des attributs du système de fichiers

Utilisez différents indicateurs de condition pour tester différents attributs du système de fichiers.

Operator Signification
[ -f $file_var ] Renvoie vrai si la variable $file_var est un chemin de fichier normal ou un nom de fichier (file)
[ -x $var ] Renvoie vrai si le fichier contenu dans la variable $var est exécutable (execute)
[ -d $var ] Renvoie vrai si le fichier contenu dans la variable $var est un répertoire (directory)
[ -e $var ] Renvoie vrai si le fichier contenu dans la variable $var existe (exist)
[ -c $var ] Renvoie vrai si le fichier contenu dans la variable $var est un chemin de fichier de périphérique caractère (character)
[ -b $var ] Renvoie vrai si le fichier contenu dans la variable $var est un chemin de fichier de périphérique bloc (block)
[ -w $var ] Renvoie vrai si le fichier contenu dans la variable $var est accessible en écriture (write)
[ -r $var ] Renvoie vrai si le fichier contenu dans la variable $var est lisible (read)
[ -L $var ] Renvoie vrai si le fichier contenu dans la variable $var est un lien symbolique (link)

La méthode d'utilisation est la suivante :

fpath="/etc/passwd"
if [ -e $fpath ]; then
  echo File exits;
else
  echo Does not exit;
fi

Comparaison de chaînes

Lors de la comparaison de chaînes, il est préférable d'utiliser des doubles crochets [[ ]]. Parce que les crochets simples peuvent provoquer certaines erreurs, il est préférable de les éviter.

Vérifier si deux chaînes sont identiques :

[[ $str1 = $str2 ]]

Renvoie vrai lorsque str1 est égal à str2. C'est-à-dire que le texte contenu dans str1 et str2 est le même. Le signe égal simple peut aussi s'écrire comme un signe égal double, ce qui signifie que la comparaison de chaînes ci-dessus est équivalente à [[ $str1 == $str2 ]].

Notez qu'il y a un espace avant et après =. Si vous oubliez d'ajouter l'espace, cela devient une instruction d'affectation plutôt qu'une relation de comparaison.

Autres cas de comparaison pour les chaînes de caractères :

Operator Signification
[[ $str1 != $str2 ]] Renvoie vrai si str1 et str2 ne sont pas identiques
[[ -z $str1 ]] Renvoie vrai si str1 est une chaîne vide
[[ -n $str1 ]] Renvoie vrai si str1 est une chaîne non vide

En utilisant les opérateurs logiques && et ||, vous pouvez facilement combiner plusieurs conditions, par exemple :

str1="Not empty"
str2=""
if [[ -n $str1 ]] && [[ -z $str2 ]];
then
  echo str1 is nonempty and str2 is empty string.
fi

La commande test peut également être utilisée pour effectuer une détection de condition. Utiliser test permet d'éviter d'utiliser trop de crochets. Les conditions de test dans [] peuvent également être effectuées via test.

if [ $var -eq 0 ]; then echo "True"; fi

Équivalent à :

if test $var -eq 0; then echo "True"; fi

Auteur : liuchengxu_

Original : https://blog.csdn.net/simple_the_best/article/details/75915767