web-dev-qa-db-fra.com

Opérateurs de comparaison et d'expression Bash

Je suis nouveau à la programmation bash. J'ai lu deux bons guides, mais ils m'ont semé la pagaille au sujet des opérateurs et des mots clés.

Quels sont les plus couramment et largement utilisés? Je ne sais pas quand utiliser lequel et pourquoi.

  1. test, [[ ]] ou [ ] ou même (( ))
  2. $((exp)) ou $[exp]
  3. -gt ou >, ge ou >= etc.
  4. quand utiliser < et > ou ( ) et quand nous devons l'échapper avec \:\<\( etc.
  5. == ou = (comparaisons de chaînes)

Je connais les différences fondamentales entre [ et [[, mais d’autres questions restent un mystère pour moi.

Merci d'avance

11
MikeD
  • test est un shell intégré dans lequel (évidemment) teste une condition donnée. Certains vieux coquillages ont besoin d'une commande spéciale. Vous trouverez donc aussi un programme sur /usr/bin/test.
  • [ est également un programme permettant de tester certaines conditions. Ce logiciel nécessite également un crochet de fermeture et vous pouvez le trouver à /usr/bin/[.
  • [[…]] est une alternative à test et [. Il a été développé pour le shell Korn (ksh). Mais vous le trouvez également dans les versions Bash supérieures à 2 et dans le Z Shell. Les doubles crochets ont quelques caractéristiques intéressantes:
    • Le shell ne fait pas de fractionnement de mot ou expansion de nom de fichier.
    • Vous n'avez pas besoin de citer.
    • Au lieu de -a (AND) ou -o (OR), vous pouvez utiliser && ou ||.
    • Le = peut faire beaucoup plus.
  • ((…)) est équivalent à let. Donc, fondamentalement, ((expression)) est identique à let "expression". Cependant, avec let, vous pouvez utiliser plusieurs expressions, mais les doubles accolades ne permettent qu'une seule expression.
  • $((…)) (et aussi $[…]) effectue des calculs. Votre shell tente de calculer l'expression entre les accolades et remplace l'expression par le résultat. Donc, echo $((1+1)) mène à echo 2. Donc, vos coquilles imprime le numéro 2.

Chaque fois que vous souhaitez comparer deux nombres, vous devez utiliser l'option avec un tiret et deux lettres (-ge, -lt etc.). Si vous souhaitez comparer des chaînes, vous devez utiliser = ou !=.

Votre question concernant l'évasion est assez difficile à répondre. Parce que cela dépend du logiciel que vous utilisez en plus du Shell. Ainsi, grep et grep -E nécessitent un échappement différent. C'est également le cas de sed, awk et d'autres. La meilleure option consiste donc à consulter la page de manuel. Après un certain temps, vous vous habituez et savez quand utiliser l'évasion.

5
qbi