(Saya tidak yakin apakah itu pertanyaan yang sesuai di sini)
Script shell, seperti yang ditulis bash
, dapat melakukan banyak hal. Mereka dapat memanggil program Unix, menyalurkan outputnya, mengalihkan I / O dari / ke file, mengontrol aliran, memeriksa apakah ada file, dll.
Tetapi bahasa pemrograman modern, misalnya, python
dan ruby
, juga dapat melakukan hal-hal ini. Dan, mereka (saya pikir) lebih mudah dibaca dan dipelihara.
bash
menikmati adopsi penyebaran luas. Tetapi banyak distribusi telah menginstal python
interpreter juga.
Jadi apa kelebihan shell script? Jika saya bisa menulis python
, ruby
atau perl
, apakah itu layak untuk dipelajari bash
?
programming-languages
shell
Lai Yu-Hsuan
sumber
sumber
Jawaban:
Shells memiliki fitur khusus untuk bekerja dengan file dan memasukkan data dari satu program ke program lain (dengan asumsi data adalah teks). Untuk tugas-tugas itu, skrip shell bisa menjadi lebih rumit daripada bahasa skrip seperti Python.
Script Shell juga memiliki keuntungan bahwa perintah yang Anda gunakan pada dasarnya adalah perintah yang sama yang akan Anda gunakan dari baris perintah - jadi jika Anda dapat melakukan sesuatu di shell, Anda lebih dari setengah jalan untuk membuat skrip operasi yang sama.
Di sini misalnya adalah skrip bash yang memindahkan semua file PNG dari direktori saat ini ke direktori yang ditentukan.
Ini versi Python.
Anda akan melihat:
mv
perintah di bashsource
untuk menjalankannya di instance shell yang samaglob.iglob("./*.png")
cukup seteguk hanya untuk mengatakan*.png
Jika Anda ingin menulis operasi pipa dasar dengan Python, Anda akan terkejut dengan verbositasnya. (Tentu saja, beberapa hal, seperti pemipaan melalui
grep
, dapat diganti dengan kode Python daripada menggunakan program eksternal, jadi Anda sering tidak perlu mem-pipe cukup banyak.)Sebagai contoh tandingan, saya pernah harus menulis rutin yang memeriksa untuk melihat berapa lama masing-masing nama file dalam direktori tertentu. Jika mereka lebih lama dari yang didukung oleh OS tertentu, mereka harus dipersingkat. Ini dapat menghasilkan duplikat nama file, yang perlu saya ralat, dan karena mereka akan ditautkan dari halaman Web, nama yang disingkat harus stabil, yaitu, mereka harus dibuat sedemikian rupa sehingga nama file yang sama akan selalu menghasilkan nama file pendek yang sama. Saya melakukan ini dengan menghasilkan hex md5 dari nama file panjang dan menambahkan empat karakter pertama itu ke nama singkat (nama masih bisa bertabrakan, tapi itu sangat tidak sopan, jadi saya hanya memeriksa kondisi itu dan menebus jika itu terjadi) .
Saya melakukan ini di bash karena itu adalah bagian dari sistem build kami yang sudah ditulis dalam bash. Persis sulit untuk mendapatkan yang benar seperti yang mungkin Anda pikirkan. Butuh waktu lebih sedikit untuk menulis dengan Python dan mungkin akan lebih jelas juga.
Singkatnya: berbagai bahasa dirancang untuk berbagai jenis tugas; pilih bahasa yang tersedia untuk Anda yang paling sesuai dengan tugas yang ada.
sumber
mv *.png $1
(komentar tidak mempertahankan format) tetapi dengan perl Anda juga dapat menggunakan fitur bahasa tingkat yang lebih tinggi.Jawaban yang ada juga valid, tetapi ada satu alasan yang belum disebutkan: karena AKAN ada di sana.
Setiap instalasi * nix dilakukan dengan beberapa paket opsional yang mungkin atau mungkin tidak dimuat, dan tidak semua sistem memiliki Python atau Perl atau Ruby. Tetapi jika sistem diharapkan memiliki kemampuan interaktif sama sekali, itu akan memiliki shell. Ini berarti bahwa skrip shell akan bekerja pada sistem dari server ke desktop programmer ke desktop sekretaris thin-client ke perangkat tertanam, pada sistem apa pun yang mendukung sistem file yang dapat ditulis dan baris perintah bash.
Untuk seseorang yang hanya pernah bekerja di lingkungan server yang konsisten, ini adalah sesuatu yang dapat diterima begitu saja, dan tidak begitu penting. Untuk seseorang yang bekerja di lingkungan yang lebih bervariasi, ini tidak boleh diabaikan.
sumber
Sebagian besar dari pertanyaan Anda dijawab di sini:
Berikut kutipan dari jawaban saya untuk pertanyaan itu :
sumber
Saya akan mengatakan skrip shell memiliki keuntungan dalam situasi di mana Anda hanya ingin menyiapkan tugas otomatis super sederhana. Misalnya, jika Anda ingin menulis skrip yang mencadangkan direktori dari satu server ke server lainnya setiap hari pada pukul 5:00, akan sulit untuk menggunakan bahasa pemrograman tugas berat.
Di sisi lain, jika tugas pemrograman Anda lebih membutuhkan struktur kontrol (jika / kemudian / lain), struktur berulang (perulangan), basis data & file I / O, dll, maka mungkin lebih cocok untuk yang lebih mampu bahasa pemrograman dari skrip shell.
Saya pikir aturan praktis yang baik adalah:
sumber
shellScript() if automatingSimpleTask else programmingLanguage()
lol.Meskipun Anda dapat meluncurkan program dari program python / ruby / apa pun, itu berbeda di shell. Anda mungkin perlu menggunakan API untuk meluncurkan sesuatu - fork () misalnya. Dalam skrip shell, program berperilaku lebih seperti fungsi dalam bahasa pemrograman konvensional dan dapat dieksekusi, disalurkan, dll dengan upaya minimal. Alur data sangat jelas menggunakan pipa juga.
sumber
Jika Anda benar-benar bebas memilih bahasa pemrograman yang Anda gunakan untuk tugas-tugas tertentu, Anda mungkin bisa hampir sepenuhnya menghindari belajar bash dan melakukan setiap tugas pemrograman skrip dengan Perl, Python atau Ruby. Ini kadang-kadang dapat mengarah pada solusi yang lebih verbose, terutama dalam kasus ketika Anda hanya memerlukan skrip yang memanggil urutan alat Unix lainnya, tetapi dalam kasus yang lebih kompleks Anda benar, bahasa skrip modern memberi Anda lebih banyak kemungkinan untuk menulis kode yang dapat dikelola dengan lebih baik (mereka memberi Anda lebih banyak kemungkinan untuk menulis kode yang dikaburkan, tapi itu pilihan Anda).
Di sisi lain, sering kali kita tidak bebas memilih bahasa yang paling kita sukai, karena kita harus bekerja dengan kode lawas atau kode yang ditulis oleh orang yang tahu bash tetapi tidak tahu salah satu bahasa skrip yang Anda sebutkan.
sumber
Shell scripting adalah bahasa pemrograman yang ditafsirkan. Berikut adalah beberapa alasan mengapa saya memilih untuk menulis skrip di bash daripada perl atau python atau bahasa skrip lain:
Bekerja di mana saja : Penerjemah yang lebih kompleks mungkin tidak selalu tersedia, seperti saat startup sistem atau pada sistem embedded. Bash tersedia bahkan di busybox.
Bekerja pada baris perintah : Jika Anda berpengalaman dalam skrip shell, Anda dapat menggunakan keterampilan itu untuk melakukan hal-hal kompleks dalam skrip ad-hoc tepat di baris perintah. Saya menggunakan keterampilan ini setiap hari sebagai sysadmin.
Lebih mudah menulis program yang memanggil program lain: Jika apa yang Anda coba lakukan adalah mengaitkan beberapa program yang ada bersama-sama dengan cara yang menarik, itu bisa lebih mudah dilakukan dalam skrip shell daripada dengan bahasa tingkat yang lebih tinggi.
Jika program ini 30 baris atau kurang, saya biasanya akan menulisnya menggunakan skrip shell. Jika ada manipulasi kompleks atau kompleks atau analisis yang harus dihadapi, saya akan melakukannya menggunakan python atau perl.
sumber
Anda harus melihat pada coffeescript. Kata-kata mereka:
Aturan emas CoffeeScript adalah: "Ini hanya JavaScript".
Nah ... inilah jawaban super-pemula.
Sebagai pemula yang belajar otomatis selama 6 bulan terakhir, dan mencicipi sedikit C, C ++, Javascript, dan lebih banyak Bashscript dalam beberapa hari terakhir ... Saya dapat memberi tahu Anda:
dan bukankah ini sederhana, fantastis! ? loop dan variabel? Wow!
Tolong, beri tahu saya di mana Anda melihat ini? Saya menulis bashscript di gedit bahkan di geany dan saya bisa memformat, (tab?) Dan saya membaca kode saya dalam kecepatan cahaya menggunakan bashscript sebagai perbandingan pada bahasa lain.
Apakah bahasa ini memiliki alat lain untuk menjaga ketertiban? Saya tahu berorientasi objek menyimpan BANYAK kode, tetapi ... orang mengatakan bashscript juga OO! WOW 2! Itu maksud saya di sini. Pergi ke:
ada di dalam pertanyaan ini: Bagaimana melakukan apa yang bisa dilakukan bashdamn ini di perl atau phyton atau ruby? Mudah?
( bashdamnthing = xdotool )
sumber