GNU/Linux >> Belajar Linux >  >> Linux

Apa gunanya Perintah ‘/usr/bin/[‘ [Square Bracket] di Linux?

Hari ini saya menemukan perintah yang menarik '[ ' (kurung siku) melalui blog Linux terkenal bernama nixCraft. Itu adalah postingan yang cukup menarik yang menjelaskan penggunaan ‘/usr/bin/[ ' perintah di Linux. Tapi tahukah Anda, saya telah bekerja di Linux selama beberapa tahun sekarang dan saya tidak tahu perintah ini sampai tweet dari nixcraft muncul di umpan berita saya. Saya mempelajarinya dari kalian, terima kasih.

Yah, saya menulis posting ini untuk membagikan apa yang saya pelajari dari nixCraft. Pada dasarnya ‘/usr/bin/[ ' perintah sama dengan 'test ' perintah di Linux. Biar saya jelaskan.

Dalam pemrograman shell, jika Anda ingin memeriksa apakah file tertentu ada atau tidak, maka Anda biasanya menggunakan IF cond? Sesuatu seperti yang ditunjukkan di bawah ini:

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

Sekarang, jika ‘/etc/passwd ‘ ada, maka Anda melihat output “Ya ” lain “Tidak “. Itu sederhana dan Anda dapat melakukan hal yang sama untuk membandingkan nilai juga. Namun apakah Anda memperhatikan bahwa ‘[ ' kurung setelah 'jika '? Di situlah'/usr/bin/[ ' muncul di tempat kejadian.

Atau, Anda dapat memeriksa apakah file ada atau tidak seperti di bawah ini (tanpa JIKA):

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

Dalam cuplikan di atas, Anda dapat melihat ‘[‘ memerintah. Seperti yang diceritakan, perintahnya sama dengan 'test '. Lihat contoh di bawah ini:

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

Oke, keduanya '[ ' dan 'uji ' melakukan pekerjaan yang sama, tetapi apakah mereka terhubung? Saya memeriksanya juga, tetapi tidak.

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

Pada dasarnya, ‘[ ' adalah perintah shell bawaan. Konfirmasikan menggunakan 'ketik ' perintah seperti di bawah ini:

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

Catatan: Anda melihat ‘[ ' adalah perintah bawaan di Linux. Artinya, jika perintah tidak mengandung garis miring, maka SHELL akan mencoba menemukannya melalui PATH variabel.

Karena ini adalah perintah, seharusnya ada halaman manual bukan?

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

Saya tidak dapat menemukan halaman manual untuk ‘[ ', lalu saya melihat halaman manual dari 'test ' di mana di bagian bawah, ada Catatan yang mengatakan tentang '[ '. Lihat di bawah:

[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.
Berikut adalah tweet menarik terkait ini dari Joe Walnes.

Bonus…Seperti ‘[‘ ada ‘[[‘ juga]

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

[[] ' sebenarnya adalah kata kunci yang mirip dengan kata kunci lain di SHELL – '! sampai selesai pilih elif else esac fi untuk fungsi kasus jika [[ ]] di kemudian saat { } waktu

Karena ini adalah kata kunci, Anda tidak dapat menemukannya sebagai perintah.

[demo ~]$ ls -l /usr/bin/[[
ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[
[[:
.]
Linux
  1. Cara menggunakan perintah grep Linux

  2. Apa yang dilakukan baris '!/bin/sh -e'?

  3. Apa arti dari /usr/sbin, /usr/local/sbin dan /usr/local/bin?

  1. Cara menggunakan perintah history di Linux

  2. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

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

  1. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  2. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

  3. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?