GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist die Verwendung des Befehls ‘/usr/bin/[‘ [eckige Klammer] in Linux?

Heute bin ich auf einen interessanten Befehl gestoßen ‚[ ‘ (eckige Klammer) über den berühmten Linux-Blog namens nixCraft. Es war ein ziemlich interessanter Beitrag, der die Verwendung von „/usr/bin/[“ erklärte ‘-Befehl unter Linux. Aber weißt du was, ich arbeite jetzt seit einigen Jahren mit Linux und kannte diesen Befehl nicht, bis dieser Tweet von Nixcraft in meinem Newsfeed auftauchte. Ich habe es von euch gelernt, danke.

Nun, ich schreibe diesen Beitrag, um zu teilen, was ich von nixCraft gelernt habe. Grundsätzlich „/usr/bin/[ ‘ Befehl ist gleich dem ‘test ‘-Befehl unter Linux. Lass es mich erklären.

Wenn Sie in der Shell-Programmierung jemals überprüfen möchten, ob eine bestimmte Datei existiert oder nicht, verwenden Sie normalerweise IF cond isn’t? Etwas wie das unten gezeigte:

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

Wenn nun „/etc/passwd ‘ existiert, dann sehen Sie die Ausgabe „Ja ” sonst „Nein “. Das ist einfach und Sie können dasselbe auch tun, um Werte zu vergleichen. Aber haben Sie bemerkt, dass „[ ‘ Klammer nach ‘if ‘? Dort ist’/usr/bin/[ ‘ kommt in die Szene.

Alternativ können Sie wie folgt prüfen, ob die Datei existiert oder nicht (ohne IF):

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

Im obigen Snippet sehen Sie ‘[‘ Befehl. Wie gesagt, der Befehl ist gleich ‚test ‘. Schauen Sie sich das folgende Beispiel an:

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

Ok, beides „[ ‘ und ‚testen ‘ macht die gleiche Arbeit, aber sind sie symbolisch verknüpft? Ich habe das auch überprüft, aber sie sind es nicht.

[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/[

Grundsätzlich „[ ‘ ist ein eingebauter Shell-Befehl. Bestätigen Sie es mit „tippen“. ‘ Befehl wie folgt:

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

Hinweis: Sie sehen „[ ‘ ist ein eingebauter Befehl in Linux. Das heißt, wenn der Befehl keine Schrägstriche enthält, versucht SHELL, ihn über PATH zu finden Variable.

Da es sich um einen Befehl handelt, sollte es eine Manpage geben, nicht wahr?

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

Ich konnte keine Manpage für „[“ finden ‘, dann sah ich die Manpage von ‚test ‘, wo unten eine Notiz war, die über ‘[’ sagt ‘. Siehe unten:

[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.
Hier ist ein interessanter Tweet dazu von Joe Walnes.

Bonus … Wie ‘[‘ gibt es auch ‘[[‘

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

[[ ‘ ist eigentlich ein Schlüsselwort, das anderen Schlüsselwörtern in SHELL ähnelt – ‘! until do done select elif else esac fi for case function if [[ ]] in then while { } time

Da es sich um ein Schlüsselwort handelt, können Sie es nicht als Befehl finden.

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

Linux
  1. /usr/bin vs. /usr/local/bin Unter Linux?

  2. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  3. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

  4. Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

  5. Was bedeuten /usr/sbin, /usr/local/sbin und /usr/local/bin?

So verwenden Sie den Linux-xargs-Befehl

So verwenden Sie den Linux-te-Befehl

So verwenden Sie den obersten Befehl unter Linux

Was ist der Linux-Überwachungsbefehl + Beispiele

Was ist der Kill-Befehl in Linux?

Verwendung des grep-Befehls unter Linux