Pelajari Aliran Kontrol Python dan Loop untuk Menulis dan Tune Script Shell - Bagian 2

Pelajari Aliran Kontrol Python dan Loop untuk Menulis dan Tune Script Shell - Bagian 2

Dalam artikel sebelumnya dari seri Python ini, kami berbagi pengantar singkat Python, shell baris perintahnya, dan idle.

Kami juga menunjukkan cara melakukan perhitungan aritmatika, cara menyimpan nilai dalam variabel, dan cara mencetak kembali nilai -nilai tersebut ke layar. Akhirnya, kami menjelaskan konsep metode dan sifat dalam konteks pemrograman berorientasi objek melalui contoh praktis.

Dalam panduan ini, kami akan membahas aliran kontrol (untuk memilih berbagai tindakan tergantung pada informasi yang dimasukkan oleh pengguna, hasil perhitungan, atau nilai variabel saat ini) dan loop (untuk mengotomatiskan tugas berulang) dan kemudian diterapkan Apa yang telah kami pelajari sejauh ini untuk menulis skrip shell sederhana yang akan menampilkan jenis sistem operasi, nama host, rilis kernel, versi, dan nama perangkat keras mesin.

Contoh ini, meskipun mendasar, akan membantu kita menggambarkan bagaimana kita dapat memanfaatkan Python oopKemampuan untuk menulis skrip shell lebih mudah daripada menggunakan alat bash biasa.

Dengan kata lain, kami ingin pergi

# uname -snrvm 
Periksa nama host Linux

ke

Periksa nama host Linux menggunakan skrip python

atau

Skrip untuk memeriksa informasi sistem linux

Terlihat cantik, bukan? Mari kita gulung lengan baju kita dan mewujudkannya.

Daftar isi

1
  • Pelajari Aliran Kontrol dalam Python
  • Pelajari Loops in Python
  • Modul Python
  • Skrip Python
      • Ringkasan

Pelajari Aliran Kontrol dalam Python

Seperti yang kami katakan sebelumnya, aliran kontrol memungkinkan kami untuk memilih hasil yang berbeda tergantung pada kondisi yang diberikan. Implementasinya yang paling sederhana dalam Python adalah sebuah jika / lain ayat.

Sintaks dasarnya adalah:

If Condition: # Action 1 Lain: # Action 2 
  • Ketika kondisi dievaluasi ke true, blok kode di bawah ini akan dieksekusi (diwakili oleh # Tindakan 1. Kalau tidak, kode di bawahnya akan dijalankan.
  • Suatu kondisi dapat berupa pernyataan apa pun yang dapat mengevaluasi sebagai benar atau salah.

Misalnya:

1 < 3 # true firstName == "Gabriel" # true for me, false for anyone not named Gabriel 
  • Pada contoh pertama, kami membandingkan dua nilai untuk menentukan apakah satu lebih besar dari yang lain.
  • Dalam contoh kedua kami membandingkan nama depan (variabel) Untuk menentukan apakah, pada titik eksekusi saat ini, nilainya identik dengan “Gabriel"
  • Kondisi dan pernyataan lain harus diikuti oleh usus besar (:)
  • Lekukan penting dalam Python. Baris dengan indentasi identik dianggap berada di blok kode yang sama.

Harap dicatat bahwa jika / lain pernyataan hanyalah satu dari banyak Alat Aliran Kontrol Tersedia dalam Python. Kami meninjaunya di sini karena kami akan menggunakannya di skrip kami nanti. Anda dapat mempelajari lebih lanjut tentang sisa alat di dokumen resmi.

Pelajari Loops in Python

Sederhananya, a lingkaran adalah urutan instruksi atau pernyataan yang dieksekusi secara berurutan selama suatu kondisi benar, atau sekali per item dalam daftar.

Loop paling sederhana dalam python diwakili oleh untuk loop yang mengulangi item dari daftar yang diberikan atau string yang dimulai dengan item pertama dan berakhir dengan yang terakhir.

Sintaks Dasar:

untuk x dalam contoh: # lakukan ini 

Di sini contoh bisa berupa daftar atau string. Jika yang pertama, variabel bernama X mewakili setiap item dalam daftar; Jika yang terakhir, X mewakili setiap karakter dalam string:

>>> Rockbands = [] >>> Rockbands.append ("roxette") >>> rockbands.append ("Guns N 'Roses") >>> Rockbands.append ("u2") >>> untuk x di rockbands: print (x) atau >>> firstname = "gabriel" >>> untuk x di firstName: cetak (x) 

Output dari contoh -contoh di atas ditampilkan pada gambar berikut:

Pelajari Loops in Python

Modul Python

Untuk alasan yang jelas, harus ada cara untuk menyimpan urutan instruksi dan pernyataan Python dalam file yang dapat dipanggil saat dibutuhkan.

Itulah tepatnya modul. Khususnya, os Modul menyediakan antarmuka ke sistem operasi yang mendasarinya dan memungkinkan kami untuk melakukan banyak operasi yang biasanya kami lakukan dalam prompt baris perintah.

Dengan demikian, ia menggabungkan beberapa metode dan sifat yang dapat dipanggil seperti yang kami jelaskan dalam artikel sebelumnya. Namun, kita perlu mengimpor (atau memasukkannya) di lingkungan kita menggunakan kata kunci impor:

>>> Impor OS 

Ayo cetak direktori kerja saat ini:

>>> OS.getCwd () 
Pelajari modul Python

Sekarang mari kita kumpulkan semua ini (bersama dengan konsep yang dibahas dalam artikel sebelumnya) untuk menulis skrip yang diinginkan.

Skrip Python

Diperlukan praktik yang baik untuk memulai skrip dengan pernyataan yang menunjukkan tujuan skrip, istilah lisensi di mana ia dirilis, dan riwayat revisi yang mencantumkan perubahan yang telah dibuat. Meskipun ini lebih merupakan preferensi pribadi, ini menambah sentuhan profesional pada pekerjaan kami.

Inilah skrip yang menghasilkan output yang telah kami tunjukkan di bagian atas artikel ini. Itu sangat dikomentari sehingga Anda dapat memahami apa yang terjadi.

Luangkan beberapa menit untuk melewatinya sebelum melanjutkan. Perhatikan bagaimana kami menggunakan struktur IF / lain untuk menentukan apakah panjang setiap keterangan bidang lebih besar dari nilai bidang itu sendiri.

Berdasarkan hasilnya, kami menggunakan karakter kosong untuk mengisi ruang antara keterangan bidang dan berikutnya. Kami juga menggunakan jumlah tanda hubung yang tepat sebagai pemisah antara keterangan lapangan dan nilainya di bawah.

#!/usr/bin/python3 # ubah baris di atas menjadi #!/usr/bin/python jika Anda tidak memiliki Python 3 diinstal # NAMA SCRIPT: UName.PY # TUJUAN: Ilustrasi kemampuan OOP Python untuk menulis skrip shell lebih mudah # Lisensi: GPL V3 (http: // www.gnu.org/lisensi/gpl.html) # Hak Cipta (C) 2016 Gabriel Alejandro Cánepa # Facebook / Skype / G+ / Twitter / Github: Gacanepa # Email: Gacanepa (at) Gmail (DOT) COM # Program ini adalah perangkat lunak gratis: Anda dapat mendistribusikan ulang dan / atau modifikasi # Di bawah ketentuan Lisensi Publik Umum GNU seperti yang diterbitkan oleh # Free Software Foundation, baik versi 3 lisensi, atau # (di opsi Anda) versi selanjutnya. # Program ini didistribusikan dengan harapan akan bermanfaat, # tetapi tanpa jaminan apa pun; bahkan tanpa jaminan tersirat dari # diperjualbelbayakan atau kebugaran untuk tujuan tertentu. Lihat lisensi publik umum # GNU untuk lebih jelasnya. # Anda seharusnya menerima salinan GNU General Public License # bersama dengan program ini. Jika tidak, lihat . # Sejarah Revisi # Versi Tanggal Penulis Ubah Deskripsi # ---------- ------- -------------- # 2016-05-28 1.0 Gabriel Cánepa Versi Awal # Impor Modul OS Impor OS # Tetapkan output OS.uname () ke variabel SystemInfo # OS.uname () mengembalikan tuple 5-string (sysname, nodename, rilis, versi, mesin) # dokumentasi: https: // docs.Python.org/3.2/perpustakaan/OS.html#module-os systeminfo = os.uname () # Ini adalah array tetap dengan keterangan yang diinginkan di header output skrip = ["sistem operasi", "nama host", "rilis", "versi", "mesin"] # Nilai awal dari variabel indeks. Ini digunakan untuk mendefinisikan # indeks kedua SystemInfo dan header di setiap langkah iterasi. indeks = 0 # Nilai awal dari variabel keterangan. CAPTION = "" # Nilai Awal dari Nilai Variabel Nilai = "" # Nilai Awal dari Pemisah Pemisah Pemisah = "" # Awal Loop untuk Item di SystemInfo: If Len (Item) < len(headers[index]): # A string containing dashes to the length of item[index] or headers[index] # To repeat a character(s), enclose it within quotes followed # by the star sign (*) and the desired number of times. separators = separators + "-" * len(headers[index]) + " " caption = caption + headers[index] + " " values = values + systemInfo[index] + " " * (len(headers[index]) - len(item)) + " " else: separators = separators + "-" * len(item) + " " caption = caption + headers[index] + " " * (len(item) - len(headers[index]) + 1) values = values + item + " " # Increment the value of index by 1 index = index + 1 # End of the loop # Print the variable named caption converted to uppercase print(caption.upper()) # Print separators print(separators) # Print values (items in systemInfo) print(values) # INSTRUCTIONS: # 1) Save the script as uname.py (or another name of your choosing) and give it execute permissions: # chmod +x uname.py # 2) Execute it: # ./uname.py 

Setelah Anda menyimpan skrip di atas ke file, berikan izin menjalankan dan jalankan seperti yang ditunjukkan di bagian bawah kode:

# chmod +x uname.PY # ./nama kamu.py 

Jika Anda mendapatkan kesalahan berikut saat mencoba menjalankan skrip:

-pesta: ./nama kamu.py:/usr/bin/python3: Bad Interpreter: Tidak ada file atau direktori seperti itu 

Itu berarti Anda tidak memilikinya Python 3 terpasang. Jika itu masalahnya, Anda dapat menginstal paket atau mengganti baris interpreter (Berikan perhatian khusus dan berhati -hatilah jika Anda mengikuti langkah -langkah untuk memperbarui tautan simbolis ke binari Python sebagaimana diuraikan dalam artikel sebelumnya):

#!/usr/bin/python3 

dengan

#!/usr/bin/python 

yang akan menyebabkan versi terpasang Python 2 untuk menjalankan skrip sebagai gantinya.

Catatan: Skrip ini telah diuji dengan sukses keduanya Python 2.X Dan 3.X.

Meskipun agak belum sempurna, Anda dapat menganggap skrip ini sebagai modul python. Ini berarti Anda dapat membukanya di tempat tidur (File → Buka… → Pilih File):

Buka Python di Idle

Jendela baru akan terbuka dengan isi file. Lalu pergi ke Jalankan → Jalankan modul (atau cukup tekan F5). Output skrip akan ditampilkan di shell asli:

Jalankan skrip Python

Jika Anda ingin mendapatkan hasil yang sama dengan skrip yang ditulis murni Pesta, Anda perlu menggunakan kombinasi AWK, SED, dan menggunakan metode yang kompleks untuk menyimpan dan mengambil item dalam daftar (belum lagi penggunaan TR untuk mengonversi huruf kecil menjadi huruf besar).

Selain itu, Python Memberikan portabilitas di mana semua sistem Linux mengirim setidaknya satu versi Python ( 2.X atau 3.X, Terkadang keduanya). Jika Anda perlu mengandalkan shell untuk mencapai tujuan yang sama, Anda perlu menulis versi naskah yang berbeda berdasarkan shell.

Ini menunjukkan bahwa fitur pemrograman berorientasi objek dapat menjadi sekutu yang kuat dari administrator sistem.

Catatan: Anda dapat menemukan skrip python ini (dan lainnya) di salah satu repositori gitub saya.

Ringkasan

Dalam artikel ini, kami telah meninjau konsep aliran kontrol, loop/iterasi, dan modul di Python. Kami telah menunjukkan cara memanfaatkan metode dan properti OOP di Python untuk menyederhanakan skrip shell yang kompleks.

Apakah Anda punya ide lain yang ingin Anda uji? Silakan dan tulis skrip Python Anda sendiri dan beri tahu kami jika Anda memiliki pertanyaan. Jangan ragu untuk memberi kami garis menggunakan formulir komentar di bawah ini, dan kami akan menghubungi Anda sesegera mungkin.