11 votes

Opérateurs de comparaison et d'expression Bash

Je suis nouveau dans la programmation de bash. J'ai lu deux bons et longs guides, mais ils m'ont mis le bazar dans la tête à propos des opérateurs et des mots-clés.

Lesquels sont les plus utilisés et les plus répandus ? Je ne sais pas quand utiliser lesquelles et pourquoi.

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

Je connais les différences fondamentales entre [ y [[ mais les autres questions sont un mystère pour moi.

Merci d'avance

5voto

cbp Points 229
  • test est un Shell intégré qui (évidemment) teste une condition donnée. Certains shells plus anciens ont besoin d'une commande spéciale. Vous trouverez donc aussi un programme à /usr/bin/test .
  • [ est également un programme permettant de tester une certaine condition. Ce logiciel nécessite également un crochet de fermeture et vous pouvez le trouver à l'adresse suivante /usr/bin/[ .
  • [[…]] est une alternative à test y [ . Il a été développé pour le Shell de Korn ( ksh ). Mais vous le trouvez également dans les versions de Bash supérieures à 2 et dans le Z Shell. Les doubles crochets ont quelques fonctionnalités intéressantes :
    • Le Shell ne fait pas de découpage de mots ou d'expansion de noms de fichiers.
    • Vous n'avez pas besoin de citer.
    • Au lieu de -a (AND) ou -o (OU) vous pouvez utiliser && o || .
    • Le site = peut faire beaucoup plus.
  • ((…)) est équivalent à let . Donc, en gros ((expression)) est la même chose que let "expression" . Cependant, avec let vous pouvez utiliser plus d'une expression, mais les doubles accolades ne permettent qu'une seule expression.
  • $((…)) (et aussi $[…] ) effectue certains calculs. Vous Shell essaie de calculer l'expression à l'intérieur des accolades et remplace l'expression par le résultat. Donc echo $((1+1)) conduit à echo 2 . Votre coquille imprime donc le chiffre 2.

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

Il est assez difficile de répondre à votre question concernant l'évasion. Car cela dépend du logiciel que vous utilisez en plus du Shell. Donc, par exemple grep y grep -E nécessitent un échappement différent. C'est également le cas avec sed , awk et autres. La meilleure option est donc de jeter un coup d'oeil à la page de manuel. Après un certain temps, vous vous habituerez et saurez quand utiliser l'échappement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X