Apakah skrip bash sama dengan skrip shell?


58

Saya sangat baru di Ubuntu. Saya mendengar orang mengatakan "scripting shell", "bash scripting".

Saya ingin tahu apakah mereka sama? Atau mereka berbeda?


Ada jawaban yang berguna di SO
Mr. Pei

Jawaban:


55

Bash ( bash) adalah salah satu dari banyak shell Unix yang tersedia (namun yang paling umum digunakan). Bash adalah singkatan dari " B ourne A gain SH ell", dan merupakan pengganti / peningkatan dari shell Bourne asli ( sh).

Skrip shell adalah skrip dalam shell apa pun , sedangkan skrip Bash adalah skrip khusus untuk Bash. Namun dalam praktiknya, "skrip shell" dan "skrip bash" sering digunakan secara bergantian, kecuali shell yang dimaksud bukan Bash.

EDIT: Sebenarnya, shell scripting default di Ubuntu adalah dash, sedangkan shell interaktif default (apa yang Anda dapatkan jika Anda menarik terminal) adalah Bash. Meskipun demikian, kedua istilah tersebut sebagian besar masih dapat dipertukarkan.


1
Apa yang mendefinisikan tanda hubung sebagai shell skrip default?
wjandrea

1
@wjandrea Fakta bahwa /bin/shsymlink untuk /bin/dashmembuat shell sistem default , tapi itu bukan shell scripting default , yaitu tidak ada aturan tertulis yang benar-benar harus Anda gunakan /bin/sh. Ketika seseorang menggunakannya /bin/shterutama untuk alasan portabilitas, ketika Anda mengharapkan skrip Anda akan digunakan pada beberapa platform OS mirip Unix, yang sebagian besar memiliki /bin/shshell yang sesuai dengan POSIX, Bourne-family.
Sergiy Kolodyazhnyy

29

pengantar

Script shell dan Bashscripting bukan hal yang sama, seperti shell lain yang ada seperti shyang dapat digunakan untuk menjalankan script; skrip yang dimaksudkan untuk dieksekusi Bashharus diberi label sebagai Bashskrip. Istilah-istilah ini sering digunakan secara bergantian karena Bash, dengan fungsi yang diperluas dibandingkan dengan sh, adalah yang paling umum digunakan untuk mengeksekusi skrip pengguna di banyak distribusi. Namun, ada cangkang lain seperti Korn (ksh), C shell (csh)dan Z shell (zsh), tetapi kami tidak akan membahasnya di sini sebagai diskusi shdan bashpaling relevan untuk Ubuntu. Artikel IBM yang hebat di sini membahas lebih detail tentang evolusi shell di Linux dan menjelaskan dengan baik arsitektur shell dan bagaimana shell berbeda.

Script Shell

Shadalah shell Unix asli yang dikembangkan oleh Stephen Bourne; namun sistem berbasis Debian dan Ubuntu menganggapnya dashsebagai shshell ( shsebenarnya terhubung ke dash). Di Debian dan Ubuntu, karena kecepatan sh, ia lebih sering digunakan untuk prosedur sistem kritis dan untuk mengeksekusi skrip kunci pada saat startup; untuk lebih jelasnya lihat wiki Ubuntu . Bashsingkatan dari Bourne Again SHell dan dikembangkan kemudian oleh Brian Fox dan banyak memperpanjang aslinya sh. Pengembangan Fox dan lainnya Bashadalah bagian penting dari proyek GNU. Lihat ini diskusi besar sejarah Bashuntuk informasi lebih lanjut.

Penting untuk dicatat bahwa keduanya shdan Bash, seperti yang digunakan dalam Ubuntu dan distribusi lainnya, adalah POSIXsesuai, yang berarti mereka berlangganan sejumlah standar tentang bagaimana perintah dieksekusi di Shell. Ini untuk memastikan bahwa hasil skrip yang digunakan dalam OS dapat diprediksi dengan andal, dan bahwa perilaku shell dapat disimpan dalam POSIXparameter tersebut, karena itu sangat penting bagi pengembang. Untuk informasi lebih lanjut tentang standar, lihat dokumentasi resmi .

Seringkali skrip shell memiliki akhiran .sh, meskipun skrip tersebut dimaksudkan untuk dieksekusi sebagai bashskrip, dan ada #!/bin/bashdi bagian atas skrip. Sebenarnya tidak masalah apakah skrip itu disebut script.sh atau my.script , yang penting adalah apakah panggilan ke penerjemah itu /bin/shatau tidak /bin/bash. Script Shell juga dapat dipanggil pada baris perintah dengan salah satu shatau bash.

Namun, penting untuk dicatat bahwa hasilnya bisa berbeda tergantung pada penerjemah mana yang dipanggil, karena tidak semua bashperintah akan bekerja sh, sedangkan sebagian besar shperintah akan bekerja bash. Secara umum, sebagian besar pengguna ingin menggunakan /bin/bashskrip mereka sehingga mereka dapat mengambil keuntungan dari rangkaian fitur yang diperluas; skrip sistem dapat dijalankan dengan /bin/shjika diperlukan.

Sumber daya untuk skrip Bash Shell

Terkadang sulit untuk menemukan sumber daya daring yang mengikuti praktik yang baik dan yang memberikan saran yang memungkinkan Anda membuat skrip yang bermanfaat. Setelah itu man bash, beberapa sumber yang paling penting adalah wiki Greg , peretas Bash , dan buku terbaru Steve Parker tentang skrip Shell yang berfokus terutama pada Bashdan diterbitkan oleh O'Reilly. Pengantar yang baik juga dilakukan oleh Panduan pemula Bash .


2
Jawaban ini sebenarnya lebih unggul dari milikku (jawaban yang diterima), milikku baru datang seminggu sebelum ini.
Hilton Shumway

4

Ada beberapa kerang tersedia untuk Ubuntu, seperti bash, zsh, ksh, tcshdan csh.

Jadi kapan saja seseorang mengatakan shell , dia berbicara tentang salah satunya. Namun, cangkang tersebut sedikit berbeda satu sama lain. Jadi, ketika seseorang berbicara tentang bashscripting, dia menggunakan shell, tetapi ketika seseorang berbicara tentang scripting shell, dia tidak menggunakan per se bash. Tapi seperti bashyang biasa digunakan dalam scripting untuk Ubuntu, dia biasanya begitu. Selain itu, cangkang yang berbeda adalah sama dalam banyak aspek, jadi biasanya tidak masalah.


2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

Ini menunjukkan bahwa 'sh' adalah symlink ke 'dash', dan bahwa / bin / bash, yang merupakan shell interaktif bawaan pada Ubuntu, adalah executable yang hampir 9 kali lebih besar dari / bin / sh.

Memang, 'man sh' (1590 lines) vs 'man bash' (5459 lines) mengungkapkan bahwa bash adalah superset besar dari 'sh' tradisional.

Baca lebih lanjut di sini:


2

Script Shell akan didefinisikan sebagai skrip berorientasi portabilitas yang dapat dijalankan oleh shell sistem dari POSIX-compliant OSs. Sintaksnya akan sama atau mirip dengan sintaksis bahasa scripting shell yang didefinisikan oleh standar POSIX. Itu adalah standar untuk sebagian besar OS yang kompatibel dengan POSIX, seperti Linux / Unix / * BSD dll. POSIX adalah landasan paling umum untuk kompatibilitas di seluruh Sistem Operasi.

OS yang berbeda dari implementasi shell yang disebutkan di atas berbeda untuk penggunaan non-interaktif (mis. Untuk mengeksekusi skrip sistem atau skrip yang menggunakan #! /bin/shshebang) yang selain mengimplementasikan perintah dan sintaks POSIX, memiliki ekstensi sendiri atau mungkin dapat dilucuti dari beberapa fitur yang kurang bermanfaat untuk alasan kinerja, tetapi tanah POSIX memungkinkan portabilitas skrip yang sangat tinggi yang dirancang untuk OS yang sesuai dengan POSIX.

Sebagian besar tersebut OS memiliki shell interaktif yang terpisah yang biasanya penuh fitur pesta . Bash sebagian besar kompatibel dengan POSIX, tetapi juga memiliki kumpulan besar perintah tambahan dan mendukung sintaks yang berbeda. Memulai Bash dengan opsi baris perintah --posix atau mengeksekusi 'set -o posix' saat Bash sedang berjalan akan menyebabkan Bash menyesuaikan diri lebih dekat dengan standar POSIX dengan mengubah perilaku untuk mencocokkan yang ditentukan oleh POSIX di area di mana Bash default berbeda, lihat: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html

Shebang specifier dan path yang seragam untuk executable shell pada OS yang mirip Unix

Berkat aturan seragam tentang penempatan executable untuk shell (biasanya ada di direktori '/ bin /'), kita dapat memiliki aturan seragam untuk membuat skrip shell, lebih khusus lagi, kita jelas jalur apa yang harus dimasukkan dalam ekspresi shebang untuk menunjuk pada shell yang dapat dieksekusi untuk menjalankan skrip. Sistem file Unix / Linux / * BSD tidak mendukung ekstensi secara intrinsik, sehingga ekstensi file hanya berfungsi sebagai petunjuk tambahan, atau untuk tujuan pengindeksan.

Pada Debian / Ubuntu secara khusus, bin/shadalah symlink menunjuk bin/dashyang merupakan executable dari dash shell . Itu membuat dash shell sistem, yang diperkirakan 4x lebih cepat dan ~ 1/10 ukuran daripada bash yang lebih fungsional. sumber: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash

Terminal interaktif Debian / Ubuntu secara default, seperti di banyak sistem lain Unix-seperti operasi, bash, yang jalan juga seragam: /bin/bash.

POSIX.1-2017 standar: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html

Aturan umum adalah:

Jika suatu perintah atau opsi tidak didefinisikan oleh POSIX, maka jangan meletakkannya di dalam #! /bin/shskrip terlebih dahulu.

Konversi skrip Anda atau periksa kesalahan

Untuk mengonversi skrip Anda dari bash ke formulir POSIX, Anda mungkin ingin memeriksa bug di skrip shell Anda secara otomatis atau melihat perubahan apa pada skrip bash yang harus Anda buat agar kompatibel dengan POSIX:

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism


1
Jawaban yang cukup bagus, +1. Selamat datang di AskUbuntu!
Sergiy Kolodyazhnyy

1
Mengenai Dash sebagai / bin / sh di ubuntu, ada artikel yang juga ingin Anda kutip. Dan ada juga askubuntu.com/q/976485/295286
Sergiy Kolodyazhnyy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.