Panduan Pemula untuk Skrip Shell: Asasnya

Istilah "shell scripting" sering disebut di forum Linux, tetapi banyak pengguna tidak biasa dengannya. Mempelajari kaedah pengaturcaraan yang mudah dan hebat ini dapat membantu anda menjimatkan masa, mempelajari baris perintah dengan lebih baik, dan membuang tugas pengurusan fail yang membosankan.

Apa itu Skrip Shell?

Menjadi pengguna Linux bermaksud anda bermain-main dengan baris perintah. Suka atau tidak, hanya ada beberapa perkara yang dilakukan dengan lebih mudah melalui antara muka ini daripada dengan menunjuk dan mengklik. Semakin banyak anda menggunakan dan mempelajari baris perintah, semakin banyak anda melihat potensinya. Nah, baris perintah itu sendiri adalah program: shell. Kebanyakan distro Linux hari ini menggunakan Bash, dan inilah yang sebenarnya anda masukkan perintah.

Sekarang, sebilangan daripada anda yang menggunakan Windows sebelum menggunakan Linux mungkin ingat fail kumpulan. Ini adalah fail teks kecil yang dapat anda isi dengan perintah untuk dijalankan dan Windows akan menjalankannya secara bergantian. Ini adalah cara yang bijak dan rapi untuk menyelesaikan beberapa perkara, seperti menjalankan permainan di makmal komputer sekolah menengah anda ketika anda tidak dapat membuka folder sistem atau membuat jalan pintas. Fail kumpulan dalam Windows, walaupun berguna, adalah tiruan skrip shell yang murah.

Skrip shell memungkinkan kita memprogram perintah dalam rantai dan membuat sistem melaksanakannya sebagai acara skrip, seperti file batch. Mereka juga membolehkan fungsi yang jauh lebih berguna, seperti penggantian perintah. Anda boleh menggunakan perintah, seperti tarikh, dan menggunakannya sebagai sebahagian daripada skema penamaan fail. Anda boleh mengautomasikan sandaran dan setiap fail yang disalin boleh mempunyai tarikh semasa yang ditambahkan hingga akhir namanya. Skrip juga bukan sekadar doa perintah. Mereka program sendiri. Skrip membolehkan anda menggunakan fungsi pengaturcaraan - seperti gelung 'untuk', jika / kemudian / pernyataan lain, dan sebagainya - secara langsung di antara muka sistem operasi anda. Dan, anda tidak perlu belajar bahasa lain kerana anda menggunakan apa yang sudah anda ketahui: baris perintah.

Itu benar-benar kekuatan skrip, saya fikir. Anda dapat memprogram dengan arahan yang sudah anda ketahui, sambil mempelajari rujukan kebanyakan bahasa pengaturcaraan utama. Perlu melakukan sesuatu yang berulang-ulang dan membosankan? Skripnya! Perlukan jalan pintas untuk perintah yang benar-benar berbelit? Skripnya! Ingin membina antara muka baris perintah yang sangat mudah digunakan untuk sesuatu? Skripnya!

Sebelum awak bermula

Sebelum memulakan siri skrip kami, mari kita bahas beberapa maklumat asas. Kami akan menggunakan shell bash, yang kebanyakan distribusi Linux digunakan secara asli. Bash tersedia untuk pengguna Mac OS dan Cygwin di Windows juga. Oleh kerana ia begitu universal, anda seharusnya dapat membuat skrip tanpa mengira platform anda. Di samping itu, sepanjang semua perintah yang dirujuk ada, skrip dapat berfungsi di beberapa platform dengan sedikit atau tanpa tweak diperlukan.

Skrip dapat dengan mudah menggunakan hak istimewa "pentadbir" atau "superuser", jadi lebih baik anda menguji skrip sebelum anda menggunakannya. Gunakan juga akal, seperti memastikan anda mempunyai sandaran fail yang akan anda jalankan skripnya. Juga sangat penting untuk menggunakan pilihan yang tepat, seperti –i untuk perintah rm, agar interaksi anda diperlukan. Ini dapat mengelakkan beberapa kesalahan yang tidak menyenangkan. Oleh itu, baca skrip yang anda muat turun dan berhati-hati dengan data yang anda miliki, sekiranya berlaku kesilapan.

Pada intinya, skrip hanyalah fail teks biasa. Anda boleh menggunakan mana-mana penyunting teks untuk menulisnya: gedit, emacs, vim, nano ... Senarai ini berterusan. Pastikan anda menyimpannya sebagai teks biasa, bukan teks kaya, atau dokumen Word. Oleh kerana saya menyukai kemudahan penggunaan yang disediakan oleh nano, saya akan menggunakannya.

Kebenaran dan Nama Skrip

Skrip dilaksanakan seperti program, dan agar hal ini terjadi, mereka harus memiliki izin yang tepat. Anda boleh membuat skrip dapat dilaksanakan dengan menjalankan perintah berikut di atasnya:

chmod + x ~ / somecrazyfolder / skrip

Ini akan membolehkan sesiapa sahaja menjalankan skrip tersebut. Sekiranya anda ingin mengehadkan penggunaannya hanya untuk pengguna anda, anda boleh menggunakannya:

chmod u + x ~ / somecrazyfolder / skrip

Untuk menjalankan skrip ini, anda harus memasukkan ke dalam direktori yang betul dan kemudian menjalankan skrip seperti ini:

cd ~ / somecrazyfolder

./skrip1

Untuk menjadikan sesuatu lebih mudah, anda boleh meletakkan skrip dalam folder "bin" di direktori utama anda:

~ / tong sampah

Di banyak distro moden, folder ini tidak lagi dibuat secara lalai, tetapi anda boleh membuatnya. Ini biasanya di mana fail boleh laku disimpan milik pengguna anda dan bukan pengguna lain. Dengan meletakkan skrip di sini, Anda hanya dapat menjalankannya dengan mengetikkan namanya, seperti perintah lain, dan bukannya harus membuat cd di sekitar dan menggunakan awalan './'.

Namun, sebelum anda menamakan skrip, anda harus memerintahkan perintah berikut untuk memeriksa apakah anda telah memasang program yang menggunakan nama itu:

yang mana [perintah]

Banyak orang menamakan skrip awal mereka sebagai "ujian", dan ketika mereka mencuba menjalankannya di baris perintah, tidak ada yang terjadi. Ini kerana ia bertentangan dengan perintah ujian, yang tidak melakukan apa-apa tanpa hujah. Sentiasa pastikan nama skrip anda tidak bertentangan dengan perintah, jika tidak, anda mungkin akan melakukan perkara yang tidak anda mahu lakukan!

Garis Panduan Skrip

Seperti yang saya nyatakan sebelumnya, setiap fail skrip pada dasarnya adalah teks biasa. Itu tidak bermaksud anda boleh menulis apa yang anda mahukan. Apabila fail teks dicuba dieksekusi, shell akan menguraikannya untuk mengetahui apakah itu skrip atau tidak, dan bagaimana menangani semuanya dengan betul. Oleh kerana itu, terdapat beberapa panduan yang perlu anda ketahui.

  1. Setiap skrip harus dengan "#! / Bin / bash"
  2. Setiap baris baru adalah arahan baru
  3. Baris komen bermula dengan #
  4. Perintah dikelilingi oleh ()

Peretasan Hash-Bang

Apabila shell menguraikan fail teks, cara paling tepat untuk mengenal pasti fail sebagai skrip adalah dengan membuat baris pertama anda:

#! / bin / bash

Sekiranya anda menggunakan cengkerang lain, ganti jalannya di sini. Baris komen bermula dengan hash (#), tetapi menambahkan bang (!) Dan jalur shell setelah itu adalah semacam hack yang akan memotong peraturan komen ini dan akan memaksa skrip untuk melaksanakan dengan shell yang ditunjukkan oleh baris ini.

Baris Baru = Perintah Baru

Setiap baris baru harus dianggap sebagai perintah baru, atau komponen sistem yang lebih besar. Jika / kemudian / pernyataan lain, misalnya, akan mengambil alih beberapa baris, tetapi setiap komponen sistem itu berada dalam baris baru. Jangan biarkan perintah mengalir ke baris berikutnya, kerana ini dapat memotong perintah sebelumnya dan memberi anda kesalahan pada baris berikutnya. Sekiranya editor teks anda melakukannya, anda harus mematikan pembungkus teks agar berada di sisi yang selamat. Anda boleh mematikan pembungkus teks dalam bit nano yang memukul ALT + L

Selalu Komen dengan #s

Sekiranya anda memulakan garis dengan #, garis tersebut akan diabaikan. Ini mengubahnya menjadi baris komen, di mana anda dapat mengingatkan diri sendiri tentang apa output perintah sebelumnya, atau apa yang akan dilakukan oleh perintah seterusnya. Sekali lagi, matikan pembungkus teks, atau pecahkan komen anda menjadi beberapa baris yang semuanya bermula dengan hash. Menggunakan banyak komen adalah amalan yang baik untuk disimpan, kerana ini membolehkan anda dan orang lain mengubah skrip anda dengan lebih mudah. Satu-satunya pengecualian adalah peretasan Hash-Bang yang disebutkan di atas, jadi jangan ikuti #s dengan! S. ;-)

Perintah Dikelilingi oleh Tanda kurung

Pada masa lalu, penggantian arahan dilakukan dengan tanda centang tunggal (`, berkongsi kunci ~). Kami belum akan menyentuh perkara ini, tetapi kerana kebanyakan orang pergi dan meneroka setelah mempelajari asasnya, mungkin idea yang baik untuk menyebut bahawa anda harus menggunakan tanda kurung sebagai gantinya. Ini terutamanya kerana semasa anda bersarang - meletakkan perintah di dalam perintah lain - kurungan berfungsi dengan lebih baik.

Skrip Pertama Anda

Mari kita mulakan dengan skrip ringkas yang membolehkan anda menyalin fail dan menambahkan tarikh hingga akhir nama fail. Mari namakannya "datecp". Pertama, mari kita periksa untuk mengetahui apakah nama itu bertentangan dengan sesuatu:

Anda dapat melihat bahawa tidak ada output dari perintah mana, jadi kami siap menggunakan nama ini.

Mari buat fail kosong dalam folder ~ / bin:

sentuh ~ / bin / datecp

Dan, mari tukar kebenaran sekarang, sebelum kita lupa:

Mari mula membina skrip kita kemudian. Buka fail itu di editor teks pilihan anda. Seperti yang saya katakan, saya suka kesederhanaan nano.

nano ~ / bin / datecp

Dan, mari kita teruskan dan meletakkan baris pertama prasyarat, dan komen mengenai apa yang dilakukan oleh skrip ini.

Seterusnya, mari kita nyatakan pemboleh ubah. Sekiranya anda pernah mengambil aljabar, anda mungkin tahu apa itu. Pemboleh ubah membolehkan kita menyimpan maklumat dan melakukan sesuatu dengannya. Pemboleh ubah boleh "berkembang" apabila dirujuk di tempat lain. Maksudnya, bukannya memaparkan nama mereka, mereka akan memaparkan kandungannya yang tersimpan. Anda kemudian dapat memberitahu pemboleh ubah yang sama untuk menyimpan maklumat yang berbeza, dan arahan yang berlaku selepas itu akan menggunakan maklumat baru. Tempat letak kenderaan yang sangat mewah.

Apa yang akan kita masukkan dalam pemboleh ubah? Baiklah, mari simpan tarikh dan masa! Untuk melakukan ini, kami akan memanggil arahan tarikh.

Lihat tangkapan skrin di bawah untuk bagaimana membina output dari tarikh arahan:

Anda dapat melihat bahawa dengan menambahkan pemboleh ubah yang berbeza yang bermula dengan%, anda dapat mengubah output perintah kepada yang anda inginkan. Untuk maklumat lebih lanjut, anda boleh melihat halaman manual untuk arahan tarikh.

Mari gunakan lelaran terakhir dari tarikh arahan, "tarikh +% m_% d_% y-% H.% M.% S", dan gunakannya dalam skrip kami.

Sekiranya kita menyimpan skrip ini sekarang, kita boleh menjalankannya dan itu akan memberi kita output arahan tarikh seperti yang kita harapkan:

Tetapi, mari kita buat sesuatu yang berbeza. Mari beri nama pemboleh ubah, seperti tarikh_format pada arahan ini. Sintaks yang betul untuk ini adalah seperti berikut:

pemboleh ubah = $ (argumen perintah-pilihan)

Dan bagi kami, kami akan membuatnya seperti ini:

date_formatted = $ (tarikh +% m_% d_% y-% H.% M.% S)

Inilah yang kita panggil penggantian arahan. Kami pada dasarnya memberitahu bash bahawa setiap kali pemboleh ubah "date_formatted" muncul, untuk menjalankan perintah di dalam kurungan. Kemudian, apa sahaja output yang diberikan oleh perintah harus ditunjukkan dan bukannya nama pemboleh ubah, "date_formatted".

Inilah skrip contoh dan outputnya:

Perhatikan bahawa terdapat dua ruang dalam output. Ruang dalam petikan perintah echo dan ruang di hadapan pemboleh ubah kedua-duanya dipaparkan. Jangan gunakan ruang jika anda tidak mahu ruang tersebut muncul. Juga perhatikan bahawa tanpa baris "echo" yang ditambahkan ini, skrip tidak akan menghasilkan output sama sekali.

Mari kembali ke skrip kami. Mari kita tambah bahagian penyalinan arahan.

cp –iv $ 1 $ 2. $ date_formatted

Ini akan memanggil perintah salin, dengan pilihan –i dan –v. Yang pertama akan meminta pengesahan sebelum menimpa fail, dan yang kedua akan memaparkan apa yang ada di baris perintah.

Seterusnya, anda dapat melihat saya telah menambahkan pilihan "$ 1". Semasa membuat skrip, tanda dolar ($) diikuti dengan angka akan menunjukkan argumen skrip bernombor itu ketika diminta. Contohnya, dalam arahan berikut:

cp –iv Trogdor2.mp3 nada dering.mp3

Argumen pertama adalah "Trogdor2.mp3" dan argumen kedua adalah "ringtone.mp3".

Melihat kembali skrip kami, kami dapat melihat bahawa kami merujuk dua argumen:

Ini bermaksud bahawa ketika kita menjalankan skrip, kita perlu memberikan dua argumen agar skrip dapat berjalan dengan betul. Argumen pertama, $ 1, adalah fail yang akan disalin, dan diganti sebagai argumen pertama perintah "cp –iv".

Argumen kedua, $ 2, akan bertindak sebagai fail output untuk perintah yang sama. Tetapi, anda juga dapat melihat bahawa ia berbeza. Kami telah menambahkan titik dan kami merujuk pemboleh ubah "date_formatted" dari atas. Ingin tahu apa ini?

Inilah yang berlaku semasa skrip dijalankan:

Anda dapat melihat bahawa fail output disenaraikan sebagai apa sahaja yang saya masukkan untuk $ 2, diikuti dengan noktah, maka output dari perintah tarikh! Masuk akal, bukan?

Sekarang ketika saya menjalankan perintah datecp, ia akan menjalankan skrip ini dan membolehkan saya menyalin fail ke lokasi baru, dan secara automatik menambahkan tarikh dan waktu ke akhir nama fail. Berguna untuk mengarkibkan barang!

Skrip Shell adalah inti menjadikan OS anda berfungsi untuk anda. Anda juga tidak perlu belajar bahasa pengaturcaraan baru untuk mewujudkannya. Cuba buat skrip dengan beberapa perintah asas di rumah dan mulailah memikirkan apa yang boleh anda gunakan untuk ini.

Adakah anda skrip? Ada nasihat untuk pemula? Kongsi pendapat anda dalam komen! Terdapat banyak lagi yang akan datang dalam siri ini!