Commande test sous Linux

Linux 命令大全Encyclopédie des commandes Linux


testC'est une commande intégrée du système Linux/Unix utilisée pour l'évaluation conditionnelle, principalement utilisée pour divers tests et opérations de comparaison dans les scripts shell. Elle peut vérifier les attributs de fichiers, comparer des chaînes et des valeurs numériques, et est un outil indispensable pour écrire des scripts shell.


Syntaxe de base

test EXPRESSION
# 或者使用方括号格式(更常用)
[ EXPRESSION ]

Remarque: Lors de l'utilisation du format avec crochets, il doit y avoir des espaces entre l'expression et les crochets, c.-à-d.,[空格EXPRESSION空格]


Catégories de fonctions principales

1. Test de fichiers

Vérifie divers attributs de fichiers ou de répertoires :

Expression Signification
-e 文件 Si le fichier existe
-f 文件 Est un fichier régulier (et non un répertoire ou un fichier de périphérique)
-d 文件 Est un répertoire
-s 文件 La taille du fichier n'est pas nulle
-r 文件 Le fichier est lisible
-w 文件 Le fichier est accessible en écriture
-x 文件 Le fichier est exécutable
-L 文件 Le fichier est un lien symbolique

Exemple:

Exemples

if [ -f "/etc/passwd" ]; then
    echo "Ceci est un fichier régulier"
fi

2. Comparaison de chaînes

Compare la relation entre deux chaînes :

Expression Signification
-z "字符串" La longueur de la chaîne est 0
-n "字符串" La longueur de la chaîne n'est pas 0
"串1" = "串2" Les chaînes sont égales
"串1" != "串2" Les chaînes ne sont pas égales

Exemple:

Exemples

read -p "Entrez le nom d'utilisateur : " username
if [ -z "$username" ]; then
    echo "Le nom d'utilisateur ne peut pas être vide"
fi

3. Comparaison numérique

Compare la relation entre deux entiers :

Expression Signification
n1 -eq n2 Equal
n1 -ne n2 Différent de
n1 -gt n2 Supérieur à
n1 -ge n2 Supérieur ou égal à
n1 -lt n2 Inférieur à
n1 -le n2 Inférieur ou égal à

Exemple:

Exemples

if [ $(id -u) -eq 0 ]; puis
    echo "Actuellement l'utilisateur root"
fi

4. Opérateurs logiques

Combine plusieurs conditions de test :

Operator Signification Exemple
! NON logique [ ! -f file ]
-a ET logique [ -f file -a -r file ]
-o OU logique [ -d dir -o -f file ]

Syntaxe moderne recommandée(en utilisant&&et||):

Exemples

[ -f file ] && [ -r file ]  # Le fichier existe et est lisible
[ -d dir ] || [ -f file ]   # Est un répertoire ou un fichier

Utilisation avancée

1. Évaluation d'une condition composée

Exemples

if [ -f "/etc/passwd" -a -r "/etc/passwd" ]; puis
    echo "Le fichier existe et est lisible"
fi

2. Combinaison avec les instructions if

Exemples

if [ "$1" = "start" ]; then
    echo "Démarrage du service..."
elif [ "$1" = "stop" ]; then
    echo "Arrêt du service..."
else
    echo "Paramètre non valide"
fi

3. Utilisation dans l'affectation de variable

Exemples

[ -z "$PATH" ] && PATH="/usr/bin:/bin"  # Définir une valeur par défaut si PATH est vide

Erreurs courantes et précautions

Problèmes d'espaces:

Exemples

[ "$var" = "value" ]  # Correct
[ "$var"="value" ]    # Incorrect, espace manquant

Mise entre guillemets des variables de chaîne:

Exemples

[ -n "$var" ]  # Correct, évite les erreurs lorsque la variable est vide
[ -n $var ]    # Erreurs lorsque $var est vide

Comparaison numérique vs comparaison de chaînes:

Exemples

[ "10" -gt "2" ]  # Correct, comparaison numérique
[ "10" > "2" ]    # Incorrect, il s'agit d'une comparaison de chaînes (lexicographique)

Test de fichier:

Exemples

[ -f "$" ]    # Correct, variable entre guillemets
[ -f $file ]      # Une erreur se produit lorsque le chemin contient des espaces

Exemples d'applications pratiques

Exemple 1 : Vérifier si le répertoire de sauvegarde existe

Exemples

backup_dir="/var/backups"
if [ ! -d "$backup_dir" ]; then
    mkdir -p "$backup"
    echo "Création du répertoire de sauvegarde :$backup_dir"
fi

Exemple 2 : Valider la saisie de l'utilisateur

Exemples

read -p "Veuillez saisir l'âge : " age
if [ "$age" -lt 0 -o "$age" -gt 120 ]; then
    echo "Entrée d'âge invalide"
    exit 1
fi

Exemple 3 : Script de démarrage du service

Exemples

#!/bin/bash

if [ "$1" = "start" ]; then
    if [ -f "/var/run/service.pid" ]; then
        echo "Le service est déjà en cours d'exécution"
    else
        echo "Démarrage du service..."
        # Commande de démarrage
    fi
elif [ "$1" = "stop" ]; then
    # Logique d'arrêt
else
    echo "Usage : $0 {start|stop}"
fi

Résumé

testLa commande est un outil fondamental dans la programmation de scripts shell. La maîtriser vous permet de :

  • Implémenter une logique de branchement conditionnel
  • Valider l'état des fichiers et des répertoires
  • Comparer des chaînes et des valeurs numériques
  • Construire des conditions d'évaluation complexes

Retenez les points clés :

  1. Le format avec crochets est plus couramment utilisé, mais faites attention aux espaces
  2. Placez les références aux variables entre guillemets doubles
  3. Distinguez les opérateurs de comparaison de chaînes et de comparaison numérique
  4. Utilisez la syntaxe moderne&&et||pour remplacer-aet-o

Linux 命令大全Encyclopédie des commandes Linux

Autres extensions