Maison > Tutoriel système > Linux > le corps du texte

Comment utiliser la puissante commande de test Linux dans un script Bash

WBOY
Libérer: 2024-02-09 16:40:18
avant
1049 Les gens l'ont consulté

La commande test de Linux est une commande Shell intégrée, utilisée pour vérifier si une certaine condition est vraie. test est souvent utilisé avec des instructions if, et la plupart des instructions if reposent sur test. Il peut comparer un élément à un autre, mais est plus couramment utilisé dans les scripts shell BASH dans le cadre d'instructions conditionnelles qui contrôlent la logique et le déroulement du programme.

La commande test possède de nombreuses options et peut détecter des valeurs, des chaînes et des fichiers.

如何在 Bash 脚本中使用强大的 Linux test 命令

Un exemple basique

Essayez ces commandes dans une fenêtre de terminal.

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ test 1 -eq 2 && echo "yes" || echo "no"
no

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ test 1 -eq 1 && echo "yes" || echo "no"
yes
Copier après la connexion

La commande ci-dessus se décompose comme suit :

    • test : commande pour effectuer une comparaison
    • 1 : Le premier élément que vous souhaitez comparer. Dans cet exemple, il s'agit du nombre 1, mais il peut s'agir de n'importe quel nombre ou d'une chaîne entre guillemets.
    • eq : Méthode de comparaison. Dans ce cas, vous testez si une valeur est égale à une autre valeur.
    • 2 : Vous souhaitez comparer les éléments du premier élément. Dans cet exemple, il s'agit du nombre 2.
    • **&&** : raccourci Linux pour enchaîner les commandes en séquence. La sortie de la chaîne de test est transmise aux commandes suivantes. Une double esperluette est exécutée lorsque l'état de sortie de la commande précédente est 0, ce qui est une façon sophistiquée d'indiquer que la commande n'a pas échoué.
    • echo « oui » : La commande à exécuter lorsque la comparaison est réussie. Dans ce cas, tout ce que nous faisons est de demander à la commande echo d'imprimer le mot "oui" sur la sortie standard, mais vous pouvez exécuter ici n'importe quelle commande qui sera exécutée si le test s'avère vrai.
    • || : D'une certaine manière, l'exact opposé de &&; Le double tube ne s'exécutera que si la commande précédente échoue (l'état de sortie n'est pas 0).
    • **echo "no"** : Commande à exécuter lorsque la comparaison ne correspond pas.

Astuce : Lorsqu'il est exécuté à partir d'une invite du shell, test* ne renvoie pas de valeur à la sortie standard, il renvoie uniquement un code d'état de sortie. C'est pourquoi vous devez chaîner la commande echo. *

如何在 Bash 脚本中使用强大的 Linux test 命令

Essentiellement la même, cette commande compare 1 avec 2, s'ils correspondent, exécutez l'instruction echo "yes" et affichez "oui", s'ils ne correspondent pas, exécutez l'instruction echo "no" et affichez "no".

Comparez les chiffres

Si vous souhaitez comparer des éléments qui se résolvent en nombres, vous pouvez utiliser les opérateurs de comparaison suivants :

  • -eq : La valeur 1 est égale à la valeur 2
  • -ge : la valeur 1 est supérieure ou égale à la valeur 2
  • -gt : la valeur 1 est supérieure à la valeur 2
  • -le : la valeur 1 est inférieure ou égale à la valeur 2
  • -lt : la valeur 1 est inférieure à la valeur 2
  • -ne : la valeur 1 n'est pas égale à la valeur 2

Exemple de test

test 1 -eq 2 && echo "yes" || echo "no"
Copier après la connexion

(affiche "non" à l'écran car 1 n'est pas égal à 2)

test 1 -ge 2 && echo "yes" || echo "no"
Copier après la connexion

(affiche "non" à l'écran car 1 n'est pas supérieur ou égal à 2)

test 1 -gt 2 && echo "yes" || echo "no"
Copier après la connexion

(affiche "non" à l'écran car 1 n'est pas supérieur à 2)

如何在 Bash 脚本中使用强大的 Linux test 命令
test 1 -le 2 && echo "yes" || echo "no"
Copier après la connexion

(Affiche "oui" à l'écran car 1 est inférieur ou égal à 2)

test 1 -lt 2 && echo "yes" || echo "no"
Copier après la connexion

(Affiche "oui" à l'écran car 1 est inférieur ou égal à 2)

test 1 -ne 2 && echo "yes" || echo "no"
Copier après la connexion

(在屏幕上显示“yes”,因为 1 不等于 2)

如何在 Bash 脚本中使用强大的 Linux test 命令

比较文本

比较解析为字符串的元素时,请使用以下比较运算符:

  • **=**:字符串 1 匹配字符串 2
  • != : 字符串 1 与字符串 2 不匹配
  • -n:字符串长度大于0
  • -z:字符串长度等于 0

例子

test "string1" = "string2" && echo "yes" || echo "no"
Copier après la connexion

(在屏幕上显示“no”,因为“string1”不等于“string2”)

test "string1" != "string2" && echo "yes" || echo "no"
Copier après la connexion

(在屏幕上显示“yes”,因为“string1”不等于“string2”)

test -n "string1" && echo "yes" || echo "no"
Copier après la connexion

(在屏幕上显示“yes”,因为“string1”的字符串长度大于零)

test -z "string1" && echo "yes" || echo "no"
Copier après la connexion

(在屏幕上显示“no”,因为“string1”的字符串长度大于零)

如何在 Bash 脚本中使用强大的 Linux test 命令

比较文件

比较文件时,请使用以下比较运算符:

  • -ef:文件具有相同的设备和 inode 编号(它们是同一个文件)
  • -nt : 第一个文件比第二个文件新
  • -ot:第一个文件比第二个文件旧
  • -b:文件存在并且是块特殊的
  • -c:文件存在并且是字符特殊的
  • -d:文件存在并且是目录
  • -e : 文件存在
  • -f : 文件存在并且是普通文件
  • -g:文件存在并具有指定的组号
  • -G : 文件存在且属于用户组
  • -h或**-L**:文件存在并且是符号链接
  • -k:文件存在并且设置了粘性位
  • -O : 文件存在你是所有者
  • -p:文件存在并且是命名管道
  • -r:文件存在且可读
  • -s:文件存在且大小大于零
  • -S : 文件存在并且是一个socket
  • -t :在终端上打开文件描述符
  • -u:文件存在并且设置了 set-user-id 位
  • -w:文件存在且可写
  • -x:文件存在且可执行

例子

⚡ test linuxmi -nt linux && echo "yes"
Copier après la connexion
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果 linuxmi 比 linux 新,则显示“yes”字样,如上图

⚡ test -e /home/linuxmi/linuxmi && echo "yes"
Copier après la connexion
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果 linuxmi 存在,将显示“yes”)

test -O /home/linuxmi/linuxmi && echo "yes"
Copier après la connexion
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果您拥有 file1,则显示“yes”字样”)

块特殊:文件是块设备,这意味着数据以字节块的形式读取。这些通常是设备文件,例如硬盘驱动器。

特殊字符:文件在您写入时立即执行,通常是串行端口等设备

比较多个条件

到目前为止,一切都在将一件事与另一件事进行比较,但是如果您想比较两个条件怎么办?

例如,如果一只动物有四条腿并且会发出“哞哞”的声音,它可能是一头奶牛。简单地检查四只腿并不能保证你有一头牛,但检查它发出的声音肯定可以。

要同时测试这两个条件,请使用以下语句:

test 4 -eq 4 -a "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
Copier après la connexion
这里的关键部分是-a标志,它代表and。
Copier après la connexion

有一种更好和更常用的方法来执行相同的测试,如下所示:

test 4 -eq 4 && test "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
Copier après la connexion

test 命令的分支很重要。如果第一个测试 (4 = 4) 失败,则 *test* 命令以非零退出代码终止。因此,我们跳转到双管道符号并且“it is not a cow”打印到标准输出。但是,如果第一个测试成功并因此 test 导致退出代码0,那么我们跳转到第一个双与号(&&)。下一条语句是另一个测试条件!

如果第二次 test 失败,我们再次跳到双管并从那里继续。然而,如果第二个 test 成功,我们跳转到第二个双& 语句,在这个例子中,它只是将“it is a cow”回显到标准输出,然后终止返回到 shell 提示符。

另一个测试比较两个语句,如果其中一个为真,则输出一个字符串。例如,要检查是否存在名为“linuxmi.txt”的文件或名为“linuxmi.py”的文件,可以使用以下命令:

这里的关键部分是**-o**代表or

test -e linuxmi.txt -o -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
Copier après la connexion

有一种更好和更常用的方法来执行相同的测试,如下所示:

test -e linuxmi.txt || test -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
Copier après la connexion

排除 test 关键字

您实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:

⚡ [ -e linux.py ] && echo "linux.py
exists" || echo "file1 does not exist"linux.py exists
Copier après la connexion

[and**]基本上与****test含义 相同。**

如何在 Bash 脚本中使用强大的 Linux test 命令

现在您知道这一点,您可以改进比较多个条件,如下所示:

[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "it is a cow" || echo "it is not a cow"

[ -e linuxmi.py ] || [ -e linuxmi.txt ] && echo "linuxmi exists" || echo "linuxmi does not exist"
Copier après la connexion
如何在 Bash 脚本中使用强大的 Linux test 命令

总结

test 命令在脚本中更有用,因为您可以对照另一个变量测试一个变量的值并控制程序流程。在命令行上,使用它来测试文件是否存在。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:lxlinux.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!