Ketahui aliran kawalan python dan gelung untuk menulis dan menala skrip shell - Bahagian 2

Ketahui aliran kawalan python dan gelung untuk menulis dan menala skrip shell - Bahagian 2

Dalam artikel sebelumnya siri Python ini, kami berkongsi pengenalan ringkas kepada Python, cangkang baris arahannya, dan terbiar.

Kami juga menunjukkan cara melakukan pengiraan aritmetik, cara menyimpan nilai dalam pembolehubah, dan bagaimana mencetak semula nilai tersebut ke skrin. Akhirnya, kami menjelaskan konsep kaedah dan sifat dalam konteks pengaturcaraan berorientasikan objek melalui contoh praktikal.

Dalam panduan ini, kami akan membincangkan aliran kawalan (untuk memilih kursus tindakan yang berbeza bergantung kepada maklumat yang dimasukkan oleh pengguna, hasil pengiraan, atau nilai semasa pembolehubah) dan gelung (untuk mengautomasikan tugas berulang) dan kemudian memohon Apa yang telah kita pelajari setakat ini untuk menulis skrip shell mudah yang akan memaparkan jenis sistem operasi, nama hos, pelepasan kernel, versi, dan nama perkakasan mesin.

Contoh ini, walaupun asas, akan membantu kita menggambarkan bagaimana kita dapat memanfaatkan OOP PYTHONKeupayaan untuk menulis skrip shell lebih mudah daripada menggunakan alat bash biasa.

Dengan kata lain, kami mahu pergi

# uname -snrvm 
Periksa nama hos linux

ke

Semak nama hos linux menggunakan skrip python

atau

Skrip untuk menyemak maklumat sistem Linux

Nampak cantik, bukan? Mari kita gulungkan lengan baju kami dan mewujudkannya.

Isi kandungan

1
  • Belajar Aliran Kawalan di Python
  • Belajar gelung di python
  • Modul Python
  • Skrip Python
      • Ringkasan

Belajar Aliran Kawalan di Python

Seperti yang kita katakan sebelumnya, aliran kawalan membolehkan kami memilih hasil yang berbeza bergantung pada keadaan tertentu. Pelaksanaan yang paling mudah di Python adalah jika tidak fasal.

Sintaks asas adalah:

jika keadaan: # tindakan 1 lain: # tindakan 2 
  • Apabila keadaan dinilai untuk benar, blok kod di bawah akan dilaksanakan (diwakili oleh # Tindakan 1. Jika tidak, kod di bawah lain akan dijalankan.
  • Syarat boleh menjadi kenyataan yang dapat dinilai sama ada benar atau salah.

Sebagai contoh:

1 < 3 # true firstName == "Gabriel" # true for me, false for anyone not named Gabriel 
  • Dalam contoh pertama, kami membandingkan dua nilai untuk menentukan sama ada seseorang lebih besar daripada yang lain.
  • Dalam contoh kedua kita membandingkan nama pertama (pembolehubah) Untuk menentukan sama ada, pada titik pelaksanaan semasa, nilainya adalah sama dengan "Gabriel"
  • Keadaan dan pernyataan lain mesti diikuti oleh kolon (:)
  • Lekukan penting dalam python. Garis dengan lekukan yang sama dianggap berada dalam blok kod yang sama.

Sila ambil perhatian bahawa jika tidak pernyataan hanya salah satu daripada banyak Alat aliran kawalan Terdapat di Python. Kami menyemaknya di sini kerana kami akan menggunakannya dalam skrip kami kemudian. Anda boleh mengetahui lebih lanjut mengenai alat lain dalam dokumen rasmi.

Belajar gelung di python

Ringkasnya, a gelung adalah urutan arahan atau pernyataan yang dilaksanakan mengikut urutan selagi keadaan adalah benar, atau sekali setiap item dalam senarai.

Gelung yang paling mudah di Python diwakili oleh untuk gelung yang melewati item senarai tertentu atau rentetan yang bermula dengan item pertama dan berakhir dengan yang terakhir.

Sintaks asas:

Untuk x contohnya: # lakukan ini 

Contoh di sini boleh menjadi senarai atau rentetan. Sekiranya bekas, pemboleh ubah bernama x mewakili setiap item dalam senarai; jika yang terakhir, x mewakili setiap watak dalam rentetan:

>>> rockbands = [] >>> rockbands.tambah ("Roxette") >>> Rockbands.tambah ("Guns N 'Roses") >>> Rockbands.tambah ("u2") >>> untuk x dalam rockbands: cetak (x) atau >>> firstName = "gabriel" >>> untuk x dalam nama sirip: cetak (x) 

Output contoh di atas ditunjukkan dalam imej berikut:

Belajar gelung di python

Modul Python

Atas alasan yang jelas, mesti ada cara untuk menyimpan urutan arahan dan pernyataan python dalam fail yang boleh digunakan apabila diperlukan.

Itulah yang sebenarnya modul. Terutamanya, yang OS modul menyediakan antara muka kepada sistem operasi asas dan membolehkan kami melakukan banyak operasi yang biasanya kami lakukan dalam arahan baris arahan.

Oleh itu, ia menggabungkan beberapa kaedah dan sifat yang boleh dipanggil seperti yang dijelaskan dalam artikel sebelumnya. Walau bagaimanapun, kita perlu mengimport (atau memasukkan) dalam persekitaran kita menggunakan kata kunci import:

>>> Import OS 

Mari cetak direktori kerja semasa:

>>> os.getCwd () 
Belajar modul python

Mari kita buat semua ini bersama -sama (bersama -sama dengan konsep yang dibincangkan dalam artikel sebelumnya) untuk menulis skrip yang dikehendaki.

Skrip Python

Ia dianggap sebagai amalan yang baik untuk memulakan skrip dengan pernyataan yang menunjukkan tujuan skrip, terma lesen di mana ia dikeluarkan, dan sejarah semakan yang menyenaraikan perubahan yang telah dibuat. Walaupun ini lebih daripada keutamaan peribadi, ia menambah sentuhan profesional untuk kerja kita.

Inilah skrip yang menghasilkan output yang telah kami tunjukkan di bahagian atas artikel ini. Ia sangat mengulas supaya anda dapat memahami apa yang berlaku.

Luangkan masa beberapa minit untuk meneruskannya sebelum meneruskan. Perhatikan bagaimana kita menggunakan struktur jika / lain untuk menentukan sama ada panjang setiap kapsyen medan lebih besar daripada nilai medan itu sendiri.

Berdasarkan hasilnya, kami menggunakan aksara kosong untuk mengisi ruang antara kapsyen lapangan dan seterusnya. Juga, kami menggunakan bilangan sengkang yang betul sebagai pemisah antara kapsyen medan dan nilainya di bawah.

#!/usr/bin/python3 # Tukar baris di atas ke #!/usr/bin/python jika anda tidak mempunyai Python 3 dipasang # Nama skrip: Uname.PY # Tujuan: Ilustrasikan Keupayaan OOP Python untuk Menulis Skrip Shell Lebih Mudah # Lesen: GPL V3 (http: // www.gnu.org/lesen/gpl.html) # Copyright (c) 2016 Gabriel Alejandro Cánepa # Facebook / Skype / G+ / Twitter / GitHub: Gacanepa # Email: Gacanepa (at) Gmail (dot) com # Program ini adalah perisian percuma: anda boleh mengagihkan semula IT dan / atau mengubahsuai # Ia berada di bawah terma Lesen Awam Umum GNU seperti yang diterbitkan oleh # Yayasan Perisian Percuma, sama ada versi 3 lesen, atau # (pada pilihan anda) Mana -mana versi kemudian. # Program ini diedarkan dengan harapan ia akan berguna, # tetapi tanpa sebarang jaminan; tanpa jaminan tersirat # kebolehdagangan atau kecergasan untuk tujuan tertentu. Lihat Lesen Awam Umum # GNU untuk maklumat lanjut. # Anda sepatutnya menerima salinan Lesen Awam Umum GNU # bersama dengan program ini. Sekiranya tidak, lihat . # SEJARAH SEJARAH # TARIKH Versi Pengarang Perubahan Penerangan # ---------- ------- -------------- # 2016-05-28 1.0 Gabriel Cánepa Versi Awal # Import Modul OS Import OS # Berikan output OS.uname () ke pemboleh ubah sistemInfo # os.uname () mengembalikan tuple 5-string (sysname, nodename, pelepasan, versi, mesin) # dokumentasi: https: // docs.python.org/3.2/Perpustakaan/OS.html#modul-os SystemInfo = OS.uname () # Ini adalah array tetap dengan kapsyen yang dikehendaki dalam tajuk output skrip = ["Sistem Operasi", "HostName", "Release", "Version", "Machine"] # Nilai awal pembolehubah indeks. Ia digunakan untuk menentukan indeks # kedua -dua SystemInfo dan tajuk dalam setiap langkah lelaran. indeks = 0 # nilai awal pemboleh ubah kapsyen. Caption = "" # Nilai awal nilai pembolehubah nilai = "" # Nilai awal pemisah pemisah pemisah = "" # permulaan gelung untuk item dalam SystemInfo: jika 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 

Sebaik sahaja anda telah menyimpan skrip di atas ke fail, berikannya melaksanakan keizinan dan jalankan seperti yang ditunjukkan di bahagian bawah kod:

# chmod +x uname.py # ./uname.py 

Jika anda mendapat ralat berikut semasa cuba melaksanakan skrip:

-bash: ./uname.py:/usr/bin/python3: penterjemah buruk: tiada fail atau direktori sedemikian 

Ini bermaksud anda tidak mempunyai Python 3 dipasang. Sekiranya itu berlaku, anda boleh memasang pakej atau ganti garis penterjemah (Beri perhatian khusus dan berhati -hati jika anda mengikuti langkah -langkah untuk mengemas kini pautan simbolik ke binari python seperti yang digariskan dalam artikel sebelumnya):

#!/usr/bin/python3 

dengan

#!/usr/bin/python 

yang akan menyebabkan versi dipasang Python 2 untuk melaksanakan skrip sebaliknya.

Catatan: Skrip ini telah berjaya diuji baik di Python 2.x dan 3.x.

Walaupun agak asas, anda boleh memikirkan skrip ini sebagai modul python. Ini bermaksud bahawa anda boleh membukanya di dalam terbiar (Fail → Buka ... → Pilih Fail):

Buka python dalam terbiar

Tetingkap baru akan dibuka dengan kandungan fail. Kemudian pergi ke Run → Run modul (atau hanya tekan F5). Output skrip akan ditunjukkan dalam shell asal:

Jalankan skrip Python

Sekiranya anda ingin mendapatkan hasil yang sama dengan skrip yang ditulis semata -mata Bash, Anda perlu menggunakan gabungan AWK, SED, dan menggunakan kaedah yang kompleks untuk menyimpan dan mengambil item dalam senarai (belum lagi penggunaan TR untuk menukar huruf kecil ke huruf besar).

Sebagai tambahan, Python Menyediakan mudah alih di mana semua sistem sistem linux dengan sekurang -kurangnya satu versi python (sama ada 2.x atau 3.x, Kadang -kadang kedua -duanya). Sekiranya anda perlu bergantung pada cangkang untuk mencapai matlamat yang sama, anda perlu menulis versi skrip yang berbeza berdasarkan cangkang.

Ini menunjukkan bahawa ciri pengaturcaraan berorientasikan objek dapat menjadi sekutu pentadbir sistem yang kuat.

Catatan: Anda boleh menemui skrip python ini (dan lain -lain) di salah satu repositori github saya.

Ringkasan

Dalam artikel ini, kami telah mengkaji konsep aliran kawalan, gelung/lelaran, dan modul di Python. Kami telah menunjukkan cara memanfaatkan kaedah dan sifat OOP di Python untuk memudahkan skrip shell yang tidak kompleks.

Adakah anda mempunyai idea lain yang ingin anda uji? Teruskan dan tulis skrip Python anda sendiri dan beritahu kami jika anda mempunyai sebarang pertanyaan. Jangan teragak -agak untuk menggugurkan kami menggunakan borang komen di bawah, dan kami akan kembali kepada anda sebaik sahaja kami dapat.