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.
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 [[ [[: