Alternatif penulisan skrip Bash shell


16

Saya baru saja pindah ke workstation UNIX. Memori skrip Bash shell saya telah memudar sejak sekolah dan saya menemukan sintaksnya sangat membingungkan. Saya bertanya-tanya bahasa scripting apa yang digunakan untuk mengotomatisasi tugas. Dua yang paling populer yang pernah saya dengar adalah Perl dan Python.

  1. Bahasa scripting mana yang paling banyak digunakan oleh toko dunia nyata?
  2. Bahasa scripting mana yang paling mirip dengan sintaks C / C ++?
  3. Apakah ada bahasa scripting lain yang tidak saya sadari?

Terima kasih atas bantuan Anda,

Scott


2
Ini mungkin seharusnya merupakan wiki komunitas.
EBGreen

2
Saya sebenarnya menggunakan PHP sekarang untuk sebagian besar tugas sistem. Saya akan menyusun jawaban yang tepat dengan ini segera. Ini memiliki banyak perpustakaan bawaan, yang berguna.
Kyle Hodgson

Bahasa yang dimaksudkan Shell melakukan sesuatu yang bahasa lain mungkin tidak; Yang mengelola dan tetap memeriksa semua proses anak-anak secara rekah pernah melahirkan. Periklanan blog Phusion Passenger menjelaskan mengapa secara terperinci: phusion.github.io/baseimage-docker Singkatnya, skrip Anda yang ditulis dengan bahasa lang-x mungkin tidak menangani rutinitas shutdown dengan benar. Yang sangat oke selama Anda menjalankannya sebagai anak-anak dari proses shell nyata. Penafian, saya bukan ahli. Informasi ini hanya untuk yang terbaik dari pemahaman saya yang mungkin salah.
ThorSummoner

Jawaban:


12

Pada tingkat tertentu ini adalah masalah preferensi pribadi. Perl dan Python pasti ada di sana dalam hal popularitas.

Namun, untuk menjawab dua dari tiga pertanyaan Anda:

  1. Saya kira bash paling banyak digunakan, mungkin diikuti oleh perl. Hanya menebak-nebak, tidak tahu apakah ada yang melakukan survei. :)
  2. Ada banyak sekali bahasa scripting di luar sana. :)

Rekomendasi saya adalah Python. Sangat mudah untuk membaca dan menulis, sangat kuat, dan ada banyak sumber daya yang berguna di web untuk mempelajarinya, belum lagi kode yang dapat Anda salin dan gunakan kembali.


1
Saya yang kedua itu. Saya menemukan Python mudah dipelajari dan dapat melakukan apa pun yang saya lakukan karena sudah dalam OS lama yang baik / 2 hari dengan REXX.
slovon

3
+1 untuk python ... kekuatan C dalam bahasa scripting. Anda dapat membuat skrip Anda sesederhana atau serumit yang Anda inginkan;)
KFro

1
pada sistem non NT modul python shmembuat penggunaan python sebagai bahasa skrip shell dapat diakses; Namun jika Anda mengalami kasus tepi (seperti multiprocessing) Anda harus mempelajari modul subproses yang menurut saya sampai hari ini terlalu sulit untuk digunakan.
ThorSummoner

5

Perl dan Python adalah jawaban yang jelas; tetapi masing-masing digunakan untuk menyelesaikan tugas yang berbeda:

  1. Bash - Tangan ke bawah yang paling mudah dipelajari. Dengan skrip Bash Anda menjalankan perintah dan memanipulasi output.
  2. Python - Kedua termudah untuk dipelajari. Python jauh lebih berguna daripada Bash karena Anda dapat menggunakan Python untuk menulis program lengkap, dan itu didukung oleh komunitas. Python juga sangat mudah dibaca dan mudah diedit beberapa bulan kemudian.
  3. Perl - Yang terbaik dari ketiganya (untuk scripting), tetapi dengan mudah kurva belajar paling curam. Memiliki dukungan ekspresi reguler yang sangat baik (yang merupakan alasan utama masih digunakan saat ini), dan Anda mungkin akan mengalami banyak skrip Perl dari waktu ke waktu. Masalah utama dengan Perl adalah keterbacaan kode - berbulan-bulan setelah Anda menulis kode Anda tidak akan dapat mengetahui apa yang dilakukannya. Jadi sebaiknya Anda berkomentar banyak.
  4. Awk / Sed - Keduanya sangat berguna, tetapi keduanya sangat sulit untuk dipelajari. Saya sarankan menangani yang terakhir ini, kecuali jika Anda pandai pola.

Mengenai yang mana yang harus dipelajari sekarang (karena Anda mungkin tidak mengenal mereka), saya akan belajar Python. Ini yang paling sederhana dan paling berguna untuk diketahui.

Dan untuk jawaban atas pertanyaan Anda:

Bahasa scripting mana yang paling banyak digunakan oleh toko dunia nyata?

Semua dari mereka, tapi saya bayangkan Perl memiliki sedikit keuntungan di sini (adalah bahwa ini telah digunakan dalam administrasi sistem lebih lama).

Bahasa scripting mana yang paling mirip dengan sintaks C / C ++?

Perl

Apakah ada bahasa scripting lain yang tidak saya sadari?

Ruby, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language


2
Jika Anda meluangkan waktu ke perl, Anda dapat menulis perl yang dapat dibaca dengan sempurna. Orang yang menulis kode spageti terlalu cepat untuk menyalahkan Perl atas kegagalan mereka.
Cian

1
Saya hanya berbicara berdasarkan pengalaman sebagai sysadmin; Saya harus memelihara kode yang ditulis orang lain yang hampir mustahil untuk dibaca. Biasanya saya hanya menulis ulang kode dengan Python.
Michael Pobega

3

awk untuk pekerjaan kecil, python untuk lebih dari oneliners.

Python (jika Anda tidak menggunakan API tertentu dan hal-hal lain yang bergantung pada platform) memiliki "pustaka standar" yang kaya yang tersedia di semua platform tempat Anda menggunakan versi python. Ini sangat bagus karena Anda dapat menggunakan kembali skrip Anda dengan mudah dan berarti pengetahuan Anda adalah investasi yang baik bahkan jika Anda mengubah platform Anda.

Di perusahaan kami, kami menggunakan python untuk semua skrip, pemantauan, ... dan java untuk aplikasi, dan kami kaya dalam lingkungan yang heterogen.


1

Saya akan mengatakan bahwa perl dan python mungkin adalah dua alternatif terbaik. Anda dapat melakukan banyak hal dengan sed dan awk juga.


1

Sh (bourne shell), grep, awk, dan sed selalu merupakan hal yang baik untuk dicengkeram lagi. Perl sangat baik jika Anda tidak banyak regexing teks dan rawatan tidak begitu penting (tidak mengatakan bahwa itu tidak mungkin). Python; jika keterbacaan penting bagi Anda. Preferensi saya adalah Python tetapi semua alat ini bagus untuk sebagian besar hal yang Anda lakukan. Anda mungkin ingin mempertimbangkan kembali persyaratan sintaksis c / c ++ Anda, tetap menggunakannya tidak akan membantu Anda dalam jangka panjang.


Terima kasih Martin. Saya perhatikan (dari sampel di web), bahwa Perl memiliki kemiripan yang luar biasa dengan PHP (meskipun saya yakin itu Perl sebelum PHP, secara historis). Apakah ini pernyataan yang adil?
Scott Davies

PHP 1.0 adalah script perl, sehingga tidak kebetulan :)
Bill Weiss

1

Jika Anda ingin belajar sesuatu dari awal, mungkin yang terbaik adalah (kembali) belajar bash.

Di luar itu, perl dan python populer akhir-akhir ini; Saya menyukai perl, tetapi gaya penulisan skrip perl saya tidak banyak berubah sejak Perl 4 keluar.

Saya tidak mengetahui adanya bahasa skrip "c-syntax-like".


1

Perl, tangan ke bawah, jika hanya untuk sumber daya CPAN yang luar biasa ( http://search.cpan.org/ ). Manfaat menggunakan bahasa scripting dengan komunitas yang berkontribusi besar adalah Anda tidak akan pernah perlu menemukan sesuatu sendiri.

Perl juga memiliki manfaat menjadi serumit yang Anda butuhkan untuk situasi saat ini. Anda bisa memperlakukannya sebagai bahasa skrip sederhana untuk administrasi cepat atau skrip tujuan tunggal, tetapi Anda dapat menggunakan konsep berorientasi objek atau sistem objek meta luas ketika Anda ingin membuat aplikasi yang lebih besar, mudah dirawat (seperti daemon, server, klien).

Perbedaan antara bahasa skrip saja tidak cukup parah untuk memilih pemenang yang jelas, tetapi Anda terutama harus melihat betapa mudahnya bagi Anda untuk menemukan informasi tentang topik yang Anda pedulikan.

Sintaks Perl juga bisa sangat dekat dengan C, selama Anda bisa mengatasi kekurangan mengetik dan sigils; penggunaan perl lanjutan akan datang secara alami karena Anda akhirnya mempelajari kekuatan bahasa.

Dan untuk penentang di bagian keterbacaan: Anda dapat menulis kode yang sulit dibaca dalam bahasa apa pun. Jika Anda melihat kembali kode Anda sejak 4 bulan lalu dan tidak dapat memahaminya, Anda melakukan sesuatu yang salah.

ps Posting ini diisi dengan tautan ke berbagai modul ramah administrasi di CPAN, tetapi tampaknya pengguna baru hanya dapat memposting satu tautan, jadi gunakan tautan CPAN itu untuk mencari hal-hal seperti 'CVS' 'SVN' 'Cron' dan 'Moose' (sebuah sistem objek yang luas)


1
  • Rubi
  • Python
  • Go - bahasa lintas platform, scripting disebut sebagai salah satu kekuatan Go .
  • Node.js - lihat Grunt.js, Gulp.js. Banyak proyek sekarang menggunakan Node.js sebagai alat otomatisasi shell.
  • Perl

1

[untuk saran skrip umum, lihat jawaban lain]

Jawaban ini adalah tentang penggunaan program-program baris perintah dan juga rangkaian besar dari mereka.

Untuk menjalankan rantai program CLI, dan mungkin banyak rantai secara berurutan, bash adalah yang termudah. Perl dapat melakukan hal yang sama tetapi bahasanya jauh lebih sulit untuk dipelajari dan jauh lebih kompleks, dan seperti yang telah banyak ditunjukkan, Perl mudah untuk dituliskan.

Jika Anda mengulangi file dan parameter, bash paling mudah digunakan. Anda dapat membuat prototipe dalam shell, lalu menyalinnya ke dalam skrip dan menambahkan beberapa array dan loop dengan overhead yang minimal.

Contoh yang saya maksud:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

Dalam bash, mudah untuk membungkusnya dalam beberapa loop atas beberapa parameter tersebut. Namun , kode menjadi sulit dibaca setelah skrip lebih dari beberapa puluh baris. --- bayangkan 30 set perintah (masing-masing beberapa baris) untuk tiga puluh plot data yang berbeda ---

Perl dan Python bisa lebih baik untuk skrip besar karena mereka memiliki sintaks yang lebih bersih untuk perulangan dan variabel, tetapi perintah bash harus dihasilkan sebagai string, dijalankan sebagai subproses, dan stdin, stdout ditangkap. Itu bisa dilakukan, tetapi itu tidak dapat sepenuhnya menggantikan lingkungan shell asli.

Jika cangkang memiliki bahasa yang lebih baik ini semua akan dihindari.


0
  1. paling sering digunakan: Perl, sebagian besar karena alasan historis. Python tersedia secara luas di semua distro Linux dan BSD (bahkan diinstal pada Mac OSX), dan jauh lebih baik untuk dipelajari / diprogram. Tentu saja, setelah Anda mendapatkan sintaks, Bash lebih sederhana untuk hampir semua hal yang dapat Anda lakukan di baris perintah. Bagaimanapun, itu adalah baris perintah.

    • Sintaks C: ada csh , tetapi Anda dapat dengan mudah menginstal TCC dan menggunakan nyata C sebagai bahasa scripting, dikompilasi dari sumber dalam waktu yang lebih singkat daripada startup bahasa lain.

    • bahasa skrip lain: banyak! Lua , Ruby , JavaScript ...


0

Anda harus menggunakan kombinasi dari semua yang sesuai. Saya sangat tidak suka perl (keterbacaan), tetapi bagus untuk banyak hal. Python di sisi lain adalah sesuatu yang baru bagi saya dalam hal administrasi sistem, sampai saya harus mengelola (dan masih harus) beberapa mesin KVM. Memulai, menghentikan, menyimpan, memuat, memigrasi semua mesin itu melalui skrip menjadi kenyataan setelah 1 jam bermain-main dengan binding python libvirt.

Last but not least saya tidak akan menggunakan perl atau python jika saya harus, katakanlah, dump semua database dari server mysql setiap malam (setiap database di file dump itu sendiri), tar mereka dan rsync itu ke server lain. Mengapa Karena lebih cepat dan lebih mudah untuk menulisnya di bash :)

Pada akhirnya, Anda harus menggunakan bahasa apa pun yang paling sesuai dengan tugas Anda saat ini dan jangan hanya menggunakan bahasa skrip yang diberikan hanya karena Anda sangat menyukainya.


0

Saya suka ruby. Sederhana dan mudah diprogram. Ada buku bagus tentang administrasi sistem menggunakan ruby .

Ruby digunakan dalam beberapa sistem manajemen konfigurasi (capistrano, chef, boneka) dan versi terakhir dari metasploit.

Anda dapat menggunakan rush , pengganti shell Unix dengan sintaks ruby ​​dan melakukan hal-hal seperti ini:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }

Terima kasih, chmeee. Saya tidak tahu Anda bisa menggunakan Ruby untuk sysadmin - Saya selalu berpikir itu adalah web-centric. Saya mencari sesuatu yang digunakan di sebagian besar organisasi. Apakah adil untuk mengatakan bahwa Ruby untuk sysadmin masih terlalu berdarah?
Scott Davies

1
Shell / Perl adalah satu-satunya dua bahasa yang dapat Anda andalkan terinstal di mana-mana. Python mungkin yang paling umum berikutnya, dengan ruby ​​menjalankan keempat yang sangat jauh (sebenarnya, mungkin kelima, di belakang awk).
Cian

@ScottDavies PHP dan ASP.net adalah satu-satunya bahasa web-sentris yang saya tahu; bahkan Javascript yang dirancang untuk berjalan secara eksklusif di web telah matang sebagai antek validasi formulir. Namun Anda dapat mengirim html dengan bahasa apa pun, bahkan untuk bash .
ThorSummoner

0

Contoh Ruby satu baris:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

Saya akan menggunakan ruby.

Dibandingkan dengan sh, ini modern dan kuat.

Bandingkan dengan python, itu adalah konsistensi, satu edisi, satu manajer paket. Dan saya tidak suka sintaks lekukan.

Bandingkan dengan Perl, sedikit old-school dan sintaksisnya terlalu rumit untukku.

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.