Istilah 'shell' dinamai dengan baik. Secara harfiah shell di sekitar O / S memungkinkan pengguna untuk berinteraksi dengan komputer. Ketika awalnya dikandung ada sangat sedikit jika ada antarmuka pengguna grafis (tidak ada windows :(). Semuanya dilakukan pada baris perintah. Tetapi bahkan baris perintah membutuhkan tempat tinggal. Ia hidup, dan masih, di shell .
Secara sederhana, agar baris perintah bermanfaat, diperlukan instruksi yang bisa dihubungi. Jadi program dibuat untuk dijalankan di dalam shell agar baris perintah dapat digunakan. Program-program tersebut dikelompokkan dalam paket mereka sendiri, dan dimaksudkan untuk bekerja bersama. Mereka termasuk program seperti "ls" dan "grep", "ps", "sed", dll. Mereka juga termasuk perintah pengalihan file seperti ">" dan "<" dan pipa ("|"). Lebih penting lagi mereka juga memasukkan konstruksi pemrograman seperti operasi kondisional (jika, lalu, lain, untuk loop, sementara loop, cara untuk memeriksa status yang dikembalikan ketika Anda menjalankan pernyataan (misalnya jika Anda menjalankan "ls" apakah itu menemukan sesuatu?), Hal seperti itu). Ini adalah dasar dari skrip baris perintah (shell) yang lebih kompleks,
Ketika seseorang menggunakan istilah 'Bash Shell' mereka berbicara tentang penerjemah baris perintah yang disebut 'Bash' yang berjalan di shell O / S. Anda bisa menganggapnya sebagai kependekan dari 'Bash Shell Interpreter'. Ada penerjemah lain seperti Bourne (Bash adalah 'Bourne Shell yang baru dan lebih baik dan merupakan kependekan dari Bourne Again Shell). Ada juga C-Shell, K-Shell (disukai oleh banyak orang yang menulis skrip shell kompleks), dan varian GNU lainnya. Selama bertahun-tahun sudah menjadi kebiasaan untuk merujuk ke juru bahasa command line tertentu yang Anda gunakan sebagai shell karena yang satu tidak dapat digunakan tanpa yang lain. Tetapi kenyataannya adalah mereka berbeda.
Mengapa mereka dikenal sebagai interpreter baris perintah dan bukan sebagai shell yang sebenarnya: itu karena mereka hidup di shell dan menafsirkan semua perintah seolah-olah mereka sedang menjalankan program. Dan shell tidak peduli apa yang Anda jalankan di dalamnya, selama memenuhi standar yang benar.
Dan mengapa mereka disebut penafsir, itu karena mereka benar-benar penafsir. Bahkan jika Anda tidak secara eksplisit menjalankan skrip (dan skrip sebenarnya hanyalah file teks dari perintah yang Anda buat sehingga Anda dapat menjalankan perintah yang sama berulang-ulang tanpa harus mengetiknya lagi). Misalnya, ambil perintah 'ls' yang rendah hati. Ketika Anda menjalankannya, ia mengembalikan daftar file. Tetapi bagaimana cara kerjanya lebih penting bagi pertanyaan Anda: Ini sebenarnya berjalan di dalam konteks interpreter baris perintah, bahkan jika Anda hanya menjalankan apa yang tampaknya menjadi perintah sederhana. Artinya, ini berjalan seolah-olah itu adalah pernyataan di bagian dari program yang lebih besar. Ini berjalan seolah-olah itu dalam file skrip shell script tanpa benar-benar berada di file skrip shell. File skrip shell anonim.
Apa pun yang Anda jalankan pada baris perintah memiliki kesamaan (apakah itu perintah tunggal seperti 'ls' atau file skrip yang penuh dengan perintah dan iterator dan pernyataan bersyarat): semuanya diproses oleh penerjemah baris perintah; baik itu Bash, C-Shell, K-Shell (default pada AIX btw).
Untuk melihat apa yang saya maksud, buat direktori 'test':
mkdir test
Masukkan dan jalankan perintah berikut
grep hello *
Anda akan mendapatkan semacam respons seperti 'tidak ada file atau direktori'. Sekarang masukkan perintah
echo $?
($? Katakan, beri tahu saya apa yang Anda temukan di komputer samar berbicara.) Anda harus melihatnya mengembalikan nomor (seharusnya) '2'. Itu adalah kode kembali dari grep yang berarti 'tidak ada file atau direktori'. Sekarang jalankan yang berikut ini:
echo hello > hello.txt
grep hello *
echo $?
Anda akan melihat file 'hello.txt' dikembalikan dari perintah grep awal dan sekarang akan melihat 'echo $?' mengembalikan angka '0' yang berarti itu benar-benar menemukan sesuatu.
Bahkan jika perintah yang tampaknya tidak aktif ini dijalankan, penerjemah baris perintah bertindak seolah-olah mereka adalah bagian dari program yang lebih besar dan melacak nilai kembalinya. Itu sebabnya jika Anda lupa * pada akhir perintah grep itu tidak kembali. Ia tahu pernyataan itu tidak lengkap dan mengharapkan lebih banyak input. Setelah semua Anda mungkin akan memintanya untuk menangkap hasil dari beberapa loop yang sangat sah untuk ditulis dan dijalankan pada baris perintah.
Intinya adalah shell adalah shell, dan interpreter (apa pun nama yang Anda gunakan, 'Bash', k-shell, dll.) Berbeda. Tetapi sering kali mereka digunakan secara bergantian, karena pada suatu saat mereka benar-benar terikat bersama.