GNU/Linux >> Belajar Linux >  >> Linux

Apa itu Shebang di Linux Shell Scripting?

Anda akan sering menemukan skrip shell yang dimulai dengan:

#!/bin/bash

Ini #! disebut shebang atau hashbang. Shebang memainkan peran penting dalam skrip shell, khususnya saat menangani berbagai jenis shell.

Dalam tutorial ini, Anda akan belajar:

  • Apa itu Shebang?
  • Bagaimana peran penting dalam skrip shell?

Apa itu shebang dalam skrip shell?

Shebang adalah kombinasi dari # (kunci pound) dan ! (tanda seru). Kombinasi karakter ini memiliki arti khusus ketika digunakan pada baris pertama naskah. Ini digunakan untuk menentukan penerjemah yang dengannya skrip yang diberikan akan dijalankan secara default.

Jadi, jika baris pertama skrip adalah:

#!/bin/bash

Itu berarti penerjemah harus bash Shell. Jika baris pertama adalah:

#!/bin/zsh

Artinya interpreter yang akan digunakan adalah Z shell.

#! pasti istimewa karena # digunakan untuk komentar di skrip shell tetapi di sini memiliki arti khusus.

Mengapa shebang penting dalam skrip shell?

Inilah masalahnya. Shebang diikuti oleh shell yang dapat dieksekusi tidak wajib untuk skrip.

Jika Anda menulis skrip sederhana seperti ini:

echo "Namaste, folks!"

Dan berikan izin eksekusi dan jalankan dengan ekstensi . operator, itu akan dijalankan oleh shell login Anda.

[email protected]:~$ cat sample 
echo "Namaste, folks!"
[email protected]:~$ chmod u+x sample 
[email protected]:~$ ./sample 
Namaste, folks!

Lalu mengapa skrip shell menyertakan baris #!/bin/bash di awal skrip?

Karena ada beberapa shell yang tersedia untuk sistem Linux dan UNIX. Sementara shell ini sebagian besar memiliki sintaks yang sama, mereka memiliki sintaks yang berbeda atau cara penanganan yang berbeda.

Inilah sebabnya mengapa menjadi penting untuk menentukan penerjemah shell yang benar dalam skrip, jika tidak, beberapa skrip dapat menghasilkan hasil yang berbeda ketika dijalankan di shell yang berbeda.

Biarkan saya menunjukkannya kepada Anda dengan contoh sederhana.

Pentingnya menentukan penerjemah shell dengan shebang

Saya telah menulis contoh skrip shell dengan array distribusi. Script kemudian menampilkan distro pada indeks 2.

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Saya belum menambahkan baris Shebang untuk menentukan penerjemah Shell apa pun. Ini berarti ketika saya menjalankan skrip ini, skrip ini akan dijalankan oleh shell default (bash dalam kasus saya):

[email protected]:~$ echo $0
bash

Bisakah Anda menebak output dari skrip?

[email protected]:~$ ./arrays.sh 
Distro at index 2 is: SUSE

Ini menunjukkan SUSE pada indeks 2 karena indeks array mulai dari 0 di Bash dan banyak bahasa pemrograman dan skrip lainnya. TAPI itu tidak terjadi di Z shell. Di shell Z, indeks array dimulai dari 1.

Saya telah menginstal Z shell di sistem saya. Saya mengubah skrip dan menambahkan baris Shebang untuk menentukan bahwa skrip harus dijalankan oleh Z shell secara default.

#!/bin/zsh

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Bisakah Anda menebak hasilnya ketika saya menjalankan skrip sekarang?

[email protected]:~$ ./arrays.sh 
Distro at index 2 is: Fedora

Apakah Anda melihat perbedaannya sekarang? Ini skrip yang sama tetapi penambahan baris Shebang membuat perbedaan.

Dan inilah mengapa menentukan penerjemah shell yang benar dengan operator Shebang itu penting. Sebagai sysadmin, Anda dapat menulis skrip shell dengan mengingat shell tertentu, baik itu bash, ksh atau zsh. Tetapi Anda tidak dapat memastikan bahwa sistem yang akan menjalankan skrip akan memiliki shell default yang sama dengan milik Anda. Sekarang semuanya masuk akal, bukan?

Shebang diabaikan jika Anda secara eksplisit menentukan shell

Mengapa saya menekankan pada shell "default"? Karena shebang menentukan penerjemah untuk menjalankan skrip.

Namun, Anda dapat menentukan shell secara eksplisit dan dalam kasus seperti itu, baris shebang akan diabaikan.

Bagaimana tepatnya shebang bekerja?

Saat Anda menggunakan shebang di baris pertama skrip, Anda memberi tahu shell untuk menjalankan skrip yang diberikan dengan perintah yang ditentukan.

Pada dasarnya, #!/bin/zsh setara dengan:

/bin/zsh script_name

Saya telah memberi tahu Anda bahwa jika baris pertama skrip dimulai dengan Shebang, itu berarti Anda menentukan penerjemah Shell.

Itu hanya sebagian benar. Sebenarnya, itulah tujuan dari karakter shebang. Tetapi garis Shebang tidak harus memiliki shell yang dapat dieksekusi. Itu bisa apa saja.

Misalnya, saya akan mengganti #!/bin/zsh dengan #!/bin/cat . /bin/cat adalah eksekusi dari perintah cat.

#!/bin/cat

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Artinya sekarang skrip ini akan dijalankan dengan cat perintah dan tampilkan konten skrip.

Ini akan berfungsi selama itu menunjuk ke perintah yang dapat dieksekusi. Jika Anda meletakkan beberapa hal acak, itu akan menimbulkan kesalahan.

Saya mengubah baris Shebang menjadi:

#!/home/abhishek

Jelas, itu tidak menunjuk ke eksekusi perintah apa pun dan dengan demikian menimbulkan kesalahan penerjemah yang buruk.

[email protected]:~$ cat arrays.sh 
#!/home/abhishek

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"
[email protected]:~$ ./arrays.sh 
bash: ./arrays.sh: /home/abhishek: bad interpreter: Permission denied

Kesimpulan

Biarkan saya menjawab beberapa pertanyaan lagi sebelum mengakhiri artikel ini:

  • Penting agar tidak ada spasi di antara # dan ! . Anda TIDAK BISA menggunakannya seperti ini:# !/bin/bash .
  • Sebagian besar sistem memungkinkan ruang antara #! dan /bin/bash namun merupakan praktik yang baik untuk menghindari spasi di antara #! dan /bin/bash .
  • #! harus berada di baris pertama, jika tidak, baris Shebang akan diperlakukan sebagai komentar. Anda bahkan tidak dapat memiliki baris kosong sebelumnya.

Saya harap Anda lebih memahami mengapa #! digunakan di awal skrip shell di Linux. Jangan ragu untuk meninggalkan komentar jika Anda memiliki pertanyaan atau saran.


Linux
  1. Bagaimana Mengurai Json Dengan Shell Scripting Di Linux?

  2. Apa itu Skrip Shell? Bagaimana Cara Membuat Script Shell?

  3. Jalankan skrip yang disalurkan dari stdin (Linux/Shell Scripting)

  1. Apa Artinya `:-` Dalam Skrip Shell?

  2. 4 Cara Mengeksekusi Shell Script di UNIX / Linux

  3. Skrip transliterasi untuk shell linux

  1. Simbol Backtick (`) di Linux Shell Scripting

  2. Apa itu penggunaan () dalam skrip shell?

  3. Apa yang dilakukan % di string shell Linux?