GNU/Linux >> Tutoriels Linux >  >> Linux

À quoi sert la commande ‘/usr/bin/[‘ [Square Bracket] sous Linux ?

Aujourd'hui, je suis tombé sur une commande intéressante '[ ' (crochet) via le célèbre blog Linux appelé nixCraft. C'était un article assez intéressant qui expliquait l'utilisation de '/usr/bin/[ ' commande sous Linux. Mais vous savez quoi, je travaille sous Linux depuis quelques années maintenant et je ne connaissais pas cette commande jusqu'à ce que ce tweet de nixcraft apparaisse dans mon fil d'actualité. Je l'ai appris de vous les gars, merci.

Eh bien, j'écris ce post pour partager ce que j'ai appris de nixCraft. En gros '/usr/bin/[ ‘ commande est égal au ‘test ' commande sous Linux. Laissez-moi vous expliquer.

En programmation shell, si vous souhaitez vérifier si un fichier particulier existe ou non, vous utilisez normalement IF cond is not ? Quelque chose comme celui montré ci-dessous :

if [ -f /etc/passwd ]
then
   echo "Yes"
else
  echo "No"
fi

Maintenant, si '/etc/passwd ' existe, alors vous voyez la sortie "Oui " autrement " Non “. C'est simple et vous pouvez faire de même pour comparer les valeurs. Mais avez-vous remarqué que '[ ' parenthèse après 'si '? C'est là qu'est'/usr/bin/[ ‘ entre en scène.

Alternativement, vous pouvez vérifier si le fichier existe ou non comme ci-dessous (sans IF):

[demo ~]$ [ -f /etc/passwd ] && echo "Yes" || echo "No"
Yes
[demo ~]$ [ -f /etc/passwd1 ] && echo "Yes" || echo "No"
No

Dans l'extrait ci-dessus, vous pouvez voir ‘[‘ commande. Comme indiqué, la commande est égale à 'test ‘. Consultez l'exemple ci-dessous :

if test -f /etc/passwd
then
   echo "Yes"
else
  echo "No"
fi

Ok, les deux [ ‘ et ‘tester ‘ fait le même travail, mais sont-ils liés symboliquement ? J'ai également vérifié cela, mais ce n'est pas le cas.

[demo ~]$ ls -l /usr/bin/test
 -rwxr-xr-x 1 root root 30064 Mar 21 2012 /usr/bin/test
[demo ~]$ ls -l /usr/bin/[
 -rwxr-xr-x 1 root root 32296 Mar 21 2012 /usr/bin/[

En gros, '[ ‘ est une commande shell intégrée. Confirmez-le en utilisant 'type ‘ comme ci-dessous :

[demo ~]$ type -a [
[ is a shell builtin
[ is /usr/bin/[

Remarque : Vous voyez '[ ‘ est une commande intégrée à Linux. Cela signifie que si la commande ne contient pas de barres obliques, alors SHELL essaie de la localiser via PATH variables.

Puisqu'il s'agit d'une commande, il devrait y avoir une page de manuel, n'est-ce pas ?

[demo ~]$ man [
 No manual entry for [

Je n'ai pas trouvé de page de manuel pour '[ ', puis j'ai vu la page de manuel de 'test ' où en bas, il y avait une note qui dit à propos de '[ ‘. Voir ci-dessous :

[demo ~]$ man test
:::::::::::::
NOTE: your shell may have its own version of test and/or [, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.
Voici un tweet intéressant à ce sujet de la part de Joe Walnes.

Bonus… Comme '[' il y a '[[' aussi

[demo ~]$ type -a [[
[[ is a shell keyword

[[ ‘ est en fait un mot-clé similaire aux autres mots-clés de SHELL – ‘ ! jusqu'à ce que ce soit fait, sélectionnez elif sinon esac fi pour la fonction de cas si [[ ]] dans alors tandis que { } temps

Comme il s'agit d'un mot-clé, vous ne pouvez pas le trouver en tant que commande.

[demo ~]$ ls -l /usr/bin/[[
ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[
[[:

Linux
  1. Que fait la ligne '!/bin/sh -e' ?

  2. Installer les binaires dans /bin, /sbin, /usr/bin et /usr/sbin, interactions avec --prefix et DESTDIR

  3. Quelle est la différence entre #!/usr/bin/env bash et #!/usr/bin/bash ?

  4. Quelle est la signification de /usr/sbin, /usr/local/sbin et /usr/local/bin ?

  5. Différence entre /bin et /usr/bin

Comment utiliser la commande Linux xargs

Comment utiliser la commande Linux tee

Comment utiliser la commande top sous Linux

Qu'est-ce que la commande Linux Watch + Exemples

Qu'est-ce que la commande kill sous Linux ?

Utilisation de la commande grep sous Linux