GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è l'uso del comando '/usr/bin/[' [parentesi quadra] in Linux?

Oggi mi sono imbattuto in un comando interessante "[ ' (parentesi quadra) tramite il famoso blog Linux chiamato nixCraft. Era un post piuttosto interessante che spiegava l'uso di "/usr/bin/[ ' comando in Linux. Ma sai una cosa, lavoro in Linux da alcuni anni e non conoscevo questo comando fino a quando quel tweet di nixcraft non è apparso nel mio feed di notizie. L'ho imparato da voi ragazzi, grazie.

Bene, sto scrivendo questo post per condividere ciò che ho imparato da nixCraft. Fondamentalmente "/usr/bin/[ Il comando ' è uguale al 'test ' comando in Linux. Mi spiego.

Nella programmazione della shell, se vuoi verificare se un particolare file esiste o meno, allora normalmente usi IF cond non lo è? Qualcosa come quello mostrato di seguito:

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

Ora, se "/etc/passwd ' esiste, quindi viene visualizzato l'output " ” altrimenti “No “. È semplice e puoi fare lo stesso anche per confrontare i valori. Ma hai notato che "[ ' parentesi dopo 'se '? Ecco dov'è'/usr/bin/[ ' entra in scena.

In alternativa, puoi verificare se il file esiste o meno come di seguito (senza IF):

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

Nello snippet sopra, puoi vedere '[' comando. Come detto, il comando è uguale a "test '. Dai un'occhiata all'esempio seguente:

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

Ok, entrambi "[ ' e 'test ' fa lo stesso lavoro, ma sono collegati simbolicamente? Ho controllato anche quello, ma non lo sono.

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

Fondamentalmente, "[ ' è un comando di shell integrato. Confermalo usando "digita ' comando come di seguito:

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

Nota: Viene visualizzato "[ ' è un comando integrato in Linux. Significa che se il comando non contiene barre, SHELL proverà a individuarlo tramite PATH variabile.

Dato che è un comando, dovrebbe esserci una pagina di manuale no?

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

Non sono riuscito a trovare la pagina man per '[ ', poi ho visto la pagina man di 'test ' dove in fondo c'era una nota che dice "[ '. Vedi sotto:

[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.
Ecco un tweet interessante relativo a questo di Joe Walnes.

Bonus... Come "[" c'è anche "[["

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

'[[ ' è in realtà una parola chiave simile ad altre parole chiave in SHELL – '! fino al termine seleziona elif else esac fi per la funzione case if [[ ]] in then { } time '

Poiché è una parola chiave, non puoi trovarla come comando.

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

Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. /usr/bin Vs /usr/local/bin Su Linux?

  4. Qual è il significato di /usr/sbin, /usr/local/sbin e /usr/local/bin?

  5. Differenza tra /bin e /usr/bin

Come utilizzare il comando xargs di Linux

Come utilizzare il comando tee di Linux

Come utilizzare il comando superiore in Linux

Cos'è il comando Linux Watch + Esempi

Qual è il comando kill in Linux?

Uso del comando grep in Linux