Programmation Linux Bash Shell (8): jugement conditionnel et exemples

Programmation Linux Bash Shell (8): déclarations et exemples de jugement conditionnel

  Dans la section précédente , nous avons découvert les commandes pertinentes pour l'interception et le traitement des chaînes, et nous pouvons filtrer et intercepter le flux de données de sortie de la commande. Au début de cette section, c'est la partie la plus critique de la programmation Bash Shell: le jugement conditionnel et les instructions de contrôle de flux. Dans cette section, nous nous familiarisons d'abord avec les différents types et formes de jugement conditionnel.

Bash 8

Grammaire de base du jugement conditionnel

  Il existe principalement deux syntaxes de base pour le jugement conditionnel: les commandes basées sur la ligne de testcommande et les styles conditionnels qui conviennent mieux à l'incorporation d'instructions de contrôle de processus.

  1. La commande de test
      exécute une instruction de jugement conditionnel sous la forme d'une ligne de commande sans sortie standard. Le résultat de l'exécution de l'instruction est enregistré dans une variable prédéfinie $?( notez que la valeur $? Est similaire à la valeur de retour du programme et non à une donnée booléenne. , $? 0 est vrai, 1 est faux ), peut être visualisé directement avec des echocommandes, ou appelé par plusieurs relations logiques de commande, ce qui est plus conforme aux habitudes de l'utilisateur, mais il est peu pratique à utiliser dans les scripts Shell, et il n'est généralement pas recommandé de l'utiliser dans Shell
test 条件判断语句
#为了观察实际效果,一般使用echo命令查看$?预定义变量
echo $?
#0为真,1为假

#例如:(判断语句的具体分类在下面讲到)
test -e Hello_World.sh
echo $?
  1. Avec []styles conditionnels inclus

      La fonction d'utilisation de la []condition incluse pour juger de l'expression est la testmême que celle de la commande. Elle n'adopte pas la structure impérative. Elle peut être facilement intégrée dans l'instruction de contrôle de processus en tant que condition. La valeur renvoyée est également dans la variable prédéfinie $?. À l'exception du formulaire différent, le reste est testexactement le même que la commande

    Remarque: [] doit avoir des espaces des deux côtés de l'intérieur, sinon une erreur sera signalée lors de l'exécution de la commande

[ 条件判断语句 ]
#同样使用echo命令查看条件判断语句结果
echo $?
   
#例如:(判断语句的具体分类在下面讲到)
[ -e Hello_World.sh ]
echo $?

Type de déclaration de jugement conditionnel

Juger par type de fichier

Ajoutez le nom du fichier après l'option pour déterminer si le type de fichier (s'il existe) remplit les conditions. Si le fichier n'existe pas, il renverra false, et s'il remplit les conditions, il renverra true. L'identificateur de type de fichier spécifique est similaire au premier de l'attribut file dans la commande ls

[选项 文件名]
#echo #?
Options effet
-b Déterminez si le fichier (s'il existe (le même ci-dessous)) est un fichier de périphérique bloc (est vrai (le même ci-dessous))
-c Déterminer si le fichier est un fichier de périphérique de caractères
-ré Déterminez si le fichier est un fichier de répertoire
-e existe seulement juge si le fichier existe
-F fichier Jugez si le fichier est un fichier normal
-L Déterminer si le fichier est un fichier de lien symbolique
-p Déterminer si le fichier est un fichier pipeline
-s Déterminez si le fichier n'est pas vide (pas vide est vrai)
-S Déterminez si le fichier est un fichier socket

À en juger par les autorisations de fichiers

Ajoutez également le nom du fichier après l'option, si l'autorisation est vraie, s'il n'y a pas d'autorisation ou si le fichier n'existe pas, c'est faux. (Juger est l'autorité de l'utilisateur actuel sur ce fichier)

Options effet
-r Déterminez si le fichier dispose d'une autorisation de lecture
-w Déterminez si le fichier a l'autorisation d'écriture
-X Déterminez si le fichier a l'autorisation d'exécution
-u Déterminez si le fichier dispose des autorisations SUID
-g Déterminez si le fichier / répertoire dispose des autorisations SGID
-k Déterminez si le répertoire dispose des autorisations SBIT

Comparez les informations de deux fichiers

Format: Fichier 1 [Option] Fichier 2

Options effet
-NT plus récent que détermine si la dernière heure de modification du fichier 1 est postérieure au fichier 2 et plus tard est vraie (0)
-ot plus ancien que Juger si la dernière heure de modification du fichier 1 est antérieure au fichier 2, ce qui est vrai (0)
-ef Déterminez si les numéros d'inode des deux fichiers sont identiques, ce qui revient à savoir si les deux fichiers sont identiques
  • Parmi eux, le Inodenuméro est le numéro de série qui identifie le fichier. Deux fichiers différents peuvent avoir le même nom, mais le numéro d'inode ne peut pas être le même. Si les deux fichiers sont liés de manière fixe (sauvegarde en tant que copie, mise à jour synchronisée), le numéro d'inode des deux fichiers sera le même , Le reste est différent
  • Deux fichiers liés en dur ne comportent aucun signe, à l'exception du même numéro d'inode. Vous pouvez utiliser cette méthode de jugement pour juger du lien en dur.

Comparer deux entiers

S'il s'agit de deux variables, il n'est pas nécessaire de le déclarer au format entier, syntaxe: entier 1 [option] entier 2

Options effet
-eq égal Détermine si deux entiers sont égaux
-ne pas égal Déterminer si deux entiers ne sont pas égaux
-gt supérieur à juger si l'entier 1 est supérieur à l'entier 2
-lt inférieur à juger si l'entier 1 est inférieur à l'entier 2
-donner supérieur / égal juger si l'entier 1 est supérieur ou égal à l'entier 2
-le inférieur / égal juge si l'entier 1 est inférieur ou égal à l'entier 2

Déterminer la corrélation des chaînes

La grammaire est incluse dans les options. Remarque: La comparaison des deux chaînes doit comporter des espaces des deux côtés du prédicat concerné, sinon la valeur renvoyée sera de toute façon vraie

Options effet
-z chaîne Déterminez si la chaîne est vide
-n chaîne Déterminez si la chaîne n'est pas vide
Chaîne 1 == chaîne 2 Déterminer si deux chaînes sont égales
Chaîne 1! = Chaîne 2 Déterminer si deux chaînes ne sont pas égales
  • Lorsque la chaîne est une variable, si la variable n'est pas définie, elle est également traitée comme une chaîne vide

La relation logique entre les deux conditions de jugement

Lorsque vous utilisez deux conditions de jugement en même temps, faites attention à la relation logique entre elles, au format des deux conditions de jugement: condition 1 [option] condition 2

Options effet
-une ET logique, les deux conditions sont vraies
-Le OU logique, si l'une des deux conditions est vraie
! [Conditions] Négation logique, inverser le résultat du jugement ( notez qu'il !y a un espace entre la condition et la condition )

Énoncé de jugement conditionnel utilisé en conjonction avec plusieurs symboles de logique de commande

  Pour la séquence de plusieurs commandes et caractères logiques, veuillez vous référer à Programmation Linux Bash Shell (3): redirection, séquences de commandes multiples, caractères génériques, symboles spéciaux

  En fait, la façon de juger si la commande précédente est exécutée par plusieurs séquences de commandes et symboles logiques est de juger si $?la valeur de la variable prédéfinie est 0, de sorte que vous pouvez directement traiter l'instruction de jugement conditionnel comme une commande et l'ajouter à l'instruction de séquence de commandes multiples, et le jugement conditionnel est vrai Équivaut à l'exécution correcte de l'instruction précédente.


Exemple

Exemple 1. Déterminez si le fichier existe:

[ -e ./test.sh ] && echo "File exists" || echo "File not found"
#条件判断语句方括号内侧必须有空格
#该命令执行,若文件存在,显示"File exists";否则显示"File not found"

Exemple 2: Utilisez la logique multi-commandes pour construire un programme de rapport sur une seule ligne:

#以下为test5.sh中的内容
#!/bin/bash

#Author:Zheng

read -p "a= " a
read -p "b= " b #通过键盘读入a,b数据,请参阅(四)
[ $a -lt $b ] && echo "a<b" || echo "a>=b"

Exemple 3: Déclaration de jugement à conditions multiples: juger si la variable d'entrée est vide et si la valeur est inférieure à 10

#以下为test6.sh中内容
#!/bin/bash

#Author: Zheng

read -p "Input a: " a
#若a非空且小于10,则输出Yes
[ -n $a -a $a -lt 10 ] && echo "Yes" || echo "No"
#此脚本中未加入判断a是否为整数的条件,留待改进

indice

Dans la section suivante, Linux Bash Shell Programming (9): Flow Control Statement (Part 1) Branch Statement (if, case) , nous allons apprendre l'instruction de contrôle de flux Bash

La dernière section, programmation Linux Bash Shell (7): interception et traitement des chaînes (cut, printf, awk, sed)

Je suppose que tu aimes

Origine blog.csdn.net/Zheng__Huang/article/details/108025604
conseillé
Classement