GNU/Linux >> Znalost Linux >  >> Linux

Jaké je použití příkazu „/usr/bin/[“ [hraná závorka] v Linuxu?

Dnes jsem narazil na zajímavý příkaz ‘[ “ (hraná závorka) prostřednictvím slavného linuxového blogu s názvem nixCraft. Byl to docela zajímavý příspěvek, který vysvětloval použití ‘/usr/bin/[ ‘ příkaz v Linuxu. Ale víte co, pracuji v Linuxu již několik let a tento příkaz jsem neznal, dokud se v mém kanálu zpráv neobjevil tweet z nixcraftu. Naučil jsem se to od vás, díky.

No, píšu tento příspěvek, abych se podělil o to, co jsem se naučil od nixCraft. V podstatě ‘/usr/bin/[ Příkaz ‘ je roven příkazu ‘test ‘ příkaz v Linuxu. Dovolte mi to vysvětlit.

Pokud chcete v programování shell někdy zkontrolovat, zda konkrétní soubor existuje nebo ne, pak normálně použijete IF cond is not? Něco jako je zobrazeno níže:

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

Nyní, pokud ‘/etc/passwd ‘ existuje, pak uvidíte výstup „Ano “ jinak „Ne “. To je jednoduché a můžete totéž udělat pro porovnání hodnot. Ale všimli jste si, že „[ ' závorka za 'if ‘? Zde je ‘/usr/bin/[ ‘ přichází na scénu.

Případně můžete zkontrolovat, zda soubor existuje nebo ne, jak je uvedeno níže (bez IF):

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

Ve výše uvedeném úryvku můžete vidět ‘[‘ příkaz. Jak již bylo řečeno, příkaz je roven ‚test ‘. Podívejte se na níže uvedený příklad:

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

Dobře, obě „[ “ a „test ‘ dělá stejnou práci, ale jsou symbolicky propojeny? Zkontroloval jsem to také, ale nejsou.

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

V podstatě „[ ‘ je vestavěný příkaz shellu. Potvrďte to pomocí „type ‘ příkaz jako níže:

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

Poznámka: Vidíte „[ ‘ je vestavěný příkaz v Linuxu. To znamená, že pokud příkaz neobsahuje žádná lomítka, SHELL se jej pokusí najít pomocí PATH proměnná.

Protože se jedná o příkaz, měla by existovat manuálová stránka, ne?

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

Nepodařilo se mi najít manuálovou stránku pro „[ ‘, pak jsem viděl manuálovou stránku ‘test “ kde ve spodní části byla poznámka, která říká „[ ‘. Viz níže:

[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.
Zde je zajímavý tweet související s tímto od Joea Walnese.

Bonus… Stejně jako „[“ je zde také „[[“

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

[[ ‘ je ve skutečnosti klíčové slovo podobné ostatním klíčovým slovům v SHELL – ‘! dokud nebude hotovo, vyberte elif else esac fi pro funkci případu if [[ ]] in then while { } time

Protože se jedná o klíčové slovo, nemůžete jej najít jako příkaz.

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

Linux
  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jaké jsou významy /usr/sbin, /usr/local/sbin a /usr/local/bin?

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. /usr/bin Vs /usr/local/bin Na Linuxu?

  3. Co je /usr/bin/[?

  1. Co dělá řádek '!/bin/sh -e'?

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. Jaký je rozdíl mezi #!/usr/bin/env bash a #!/usr/bin/bash?