Програмування оболонок - це весело. Але так і Python. Люди з фоном C або, головне, люди, які використовують Windows, не погоджуються. Люди часто вважають за краще використовувати графічний інтерфейс, ніж командний рядок. Але це так абсолютно неправильно. Графічний користувальницький інтерфейс призначений для людей, які думають, що програмне забезпечення робить те, що його опис каже, що це робить. Але це не завжди так. Особливо у випадку з вікнами програмування оболонок, де віруси та шкідливі програми створили загрозу розміром з Торнадо. Тож люди, які використовують інтерфейс командного рядка, зазвичай погоджуються, що те, що вони роблять, це правильно, і я згоден з ними, що вони мають рацію.

Ви багато разів зазвичай застрягли, і весь комп'ютер зависає завдяки простому програмному забезпеченню на основі графічного інтерфейсу. Робота над інтерфейсом командного рядка часто більш елегантна, швидка і головне, що ви знаєте, що виконуєте. Але знову ж таки, використання оболонок та написання програм - це не те, що воліли б кожен.

Крім того, написання програм на C або Java насправді буде набагато гірше, ніж використання програмного забезпечення на основі графічного користувальницького інтерфейсу у Windows. Я не проклинаю тут C або Java, це лише те, що вони не підходять для щоденного використання. І саме тут переважають мови сценаріїв, такі як програмування Shell та мови Python. Отже, сьогодні ми воюємо тут, який з них підходить як для менших, так і для більших застосувань. Або це насправді ми можемо об'єднати їх обох разом і зробити щось нове і краще з двох. Давайте глибше зазирнемо в обидва з них і подивимось, куди нас веде.

Сценарії Баша Шелла

Сценарій оболонок справді приголомшливий. Тут ви можете майже виконати більшість своїх робіт лише в одному рядку коду. Наприклад, візьміть цей фрагмент коду: -

$ touch file.txt | echo -e 'привіт \ n Новий \ n Світ \ n привіт \ n Привіт' >> file.txt | cat file.txt | сортувати | uniq | wc -l

Отже, як бачите, тут відбувається багато сценаріїв оболонок, але що саме відбувається? Спочатку '| 'відомий як труба. Він використовується для передачі виводу одного файлу в інший. Синтаксис "дотик" використовується для створення будь-якого файлу, а синтаксис ехо - використовується для друку будь-якого оператора. Подвійні правосторонні стрілки '>>' використовуються для вставки виводу в будь-який файл або програму. Синтаксис 'cat' використовується для читання вмісту файлу. Сортування використовується для сортування всього за порядком, а 'uniq' використовується для видалення дублікатів із сортування. 'Wc' використовується для підрахунку рядків, а -l - це лише прапор для їх друку. Отже всі ці ланцюгові команди виконують наступне.

  1. Спочатку створюється файл із файлом імен з розширенням txt, щоб повідомити, що це текстовий файл.
  2. По-друге, echo -e використовується для друку декількох слів всередині файлу file.txt, а 'slash n' або '\ n' використовується для введення нового рядка або переходу до наступного рядка.
  3. Після введення рядків у файл файл зчитується, сортується за порядком і передається в синтаксис uniq, щоб видалити всі існуючі дублікати, тут, у нашому випадку, "привіт".
  4. Нарешті, ми друкуємо кількість рядків, використовуючи 'wc -l' для підрахунку, і друкуємо його на екрані терміналу.

Отже, хоча вище є лише одним рядком коду, він, як правило, може ускладнюватися, коли додається більше умов. Таким чином, сценарії оболонок хороші, але їх не можна використовувати для виконання нових завдань постійно. Іноді ви хочете, щоб речі були простішими, настільки ж простими, як графічний інтерфейс користувача. Сценарії оболонки насправді дуже хороші для запуску пакетних сценаріїв та виконання повторних завдань, але в той же час вони мають деякі недоліки:

  1. Сценарії оболонок, як правило, стають надзвичайно складними, оскільки вони стають великими.
  2. Багаторазового використання сценаріїв майже немає. Що я тут маю на увазі, це те, що bash-скрипти дуже важко вставити в C або інші коди Java.
  3. Розширені функції, такі як розбір HTML, не є доступними для bash.

Однак тут для порятунку є Python, і найбільш підходяща його заміна. Але хіба сценарій Bash Shell повністю замінений? Давайте подивимось.

Рекомендовані курси

  • Навчання онлайн-сертифікації в J2EE всебічному
  • Професійне навчання програмуванню R
  • Навчання онлайн-сертифікації в програмуванні Go
  • Навчання за програмою Haskell

Сценарії оболонок Python

Python встановлюється за замовчуванням майже на всіх системах Linux та UNIX. Іноді дистрибутив може мати старішу версію, але його можна оновити за допомогою простої команди. Програмування Python Shell набагато простіше зрозуміти, а чистіше писати навіть для початківців. Також за замовчуванням Python має стиль Read Eval Print Loop, який допомагає випробувати нові коди в інтерпретаторі. Але просто використовувати python може бути трохи важко без допомоги сценаріїв bash shell. Крім того, у попередній програмі з одним рядком ми використовували синтаксис 'uniq' для видалення дублікатів, але це не показало нам, що таке дублікати. Отже, давайте написати програму python, щоб зробити те саме: -

#! / usr / bin / env pythonimport sys # імпортує системні модулі для роботи з файлами каталогів __name__ == “__main __”: # Починаючи з порожнього словника тут. Що називається порядком # Усі клавіші в цьому словнику відображаються як ім'я, і ​​вказані для них значення # будуть кількість разів, коли з'явиться конкретне ім’я.order = () # sys.stdin - це об'єкт, який використовується для файлів. Усі ті функції, до яких застосовано

# файл-об'єкт також може бути використаний для sys.stdin.

для замовлення в sys.stdin.readlines ():

order = order.strip ()

якщо замовлення в замовленнях:

замовлення (замовлення) + = 1

ще:

замовлення (замовлення) = 1

для замовлення, рахуйте в order.iteritems ():

sys.stdout.write ("% d \ t% s \ n"% (кількість, порядок))

Тепер цей файл спочатку зчитує вхід з об’єкта sys.stdin. Весь вихід записується на об'єкт sys.stdout. Створивши цей скрипт, якщо припустити, що ви назвали його як order.py, ви можете просто виконати наступний скрипт оболонки в терміналі, і ви знайдете загальну кількість всіх повторюваних рядків.

$ cat file.txt | python order.py

Аналогічно, ми можемо також розібратися з цим синтаксисом сортування:

$ cat file.txt | python order.py | сортувати -рн

Python Shell - Сценарій програмування Bash Shell

Тепер ми побачили, як ми можемо комбінувати сценарії python та shell, щоб створити ланцюжок команд та виконати їх разом. Тепер давайте зробимо крок далі і подивимось, чи може Python повністю замінити Bash Shell.

Якщо говорити про програмування bash shell, то з точки зору продуктивності, bash повністю вибиває лайно з пітона. Але якщо порівнювати його з типами даних та іншими сучасними матеріалами, bash не має великої сумісності. Час запуску сценарію bash shell - 2, 8 мілісекунд, а пітон - 11, 1 мілі секунд. Якщо бути відвертішим, баш - мова загального призначення так само, як і Python, але обидва мають свої сильні та слабкі сторони. Програмування оболонки Bash - це термінал за замовчуванням у більшості дистрибутивів Linux, і тому він завжди буде швидшим з точки зору продуктивності. Але чи означає це, що він може повністю замінити Python? Ні. У роботі з великими програмами, Bash буде продовжувати ускладнюватися, тоді як Python цього не робить. Наскільки я знаю, Python також може використовуватися як об'єктно-орієнтована мова. Якщо ви лише початківець, ви, можливо, навіть не знаєте різниці між ними. Python - це найелегантніша сценарна мова, навіть більше, ніж Ruby та Perl. Програмування оболонки Баша, з іншого боку, насправді дуже чудове в тому, щоб передати вихід однієї команди в іншу.

Сценарій оболонок простий, і не такий потужний, як пітон. Він не має стосунку до рамок і його важко розпочати роботу з веб-програмами, використовуючи Shell Scripting. Справжня сила сценаріїв оболонок полягає в редакторі Stream Text або sed, програмах Awk та подібних програмах.

Обробка файлів та розробка веб-додатків

Скриптинг Bash Shell працює бездоганно і швидко при роботі з файлами. Під обробкою файлів я маю на увазі копіювання, клонування дисків, запис резервних програм для мереж, ftp-серверів, зберігання файлових входів і доступ до них пізніше та перенесення цих виходів пізніше на щось інше за допомогою pipe. З іншого боку, Python є більш корисним для роботи з фрагментами даних, такими як зчитування даних з файлу та обробка даних. Якщо я більш конкретний, баш - це навіть не мова програмування. Це скоріше проста оболонка, яка була спрямована на обробку системних файлів за допомогою командного рядка, щоб процес був швидшим і швидшим.

Таким чином, якщо ви правильно знаєте програмування bash shell, то ви також знаєте, що змінні та сфери застосування в bash вкрай обмежені. З іншого боку, Python - це скоріше мова сценарію оболонок, ніж мова програмування. Якщо ми називаємо Bash мовою програмування, це більше нагадує розповідати Python як об'єктно-орієнтовану мову програмування оболонки. Можна працювати з python об'єктно-орієнтованим способом, але він ніколи не буде суто орієнтованим на об'єкти, як C або Java. Аналогічно, Bash хоча є сценарієм мови; це краще використовувати як щось, що потрібно швидко обробляти файли, а не писати великі програми в ньому. Крім того, хоча Python є мовою сценаріїв оболонок, він фактично має справу у власній оболонці. Наприклад, переміщення всього файлу, що знаходиться на Desktop, до іншої випадкової каталогів через оболонку Bash, піде приблизно так:

$ cd Desktop $ mv * randomDirectory

Але з іншого боку, робити те ж саме в python - це трохи складніше. Це виглядає приблизно так: -

import os, glob для fname в glob.glob ('*'): os.rename (fname, 'randomdirectory')

Однак у кращому випадку можна зробити найбільш компактним таким чином:

import os, glob (os.rename (fname, 'randomdirectory') для fname у glob.glob ('*'))

Навчаючись будь-якій мові, люди часто розповідатимуть вам, як вичистити основи та всі ці речі, але вони не розкажуть, як спочатку впоратися із самою системою, яка є найважливішою. Крім того, Python і Bash - це сценарій мови Shell, що означає, що вони розроблені в основному для роботи з системою та її файлами.

Bash всередині Python?

Так, ви правильно прочитали. До цього часу ми читали про те, як ми можемо вводити сценарії Python всередину Shell. Але ми також можемо ввести сценарії Shell в сценарії python. Візьмемо для прикладу: - Введіть 'apt-get update' в оболонці python? Ви, очевидно, отримаєте помилку, як недійсний синтаксис. Отже, справа в тому, що якщо ви хочете використовувати bash-коди, такі як 'ls, cd, mv' або що-небудь ще в python, вам доведеться імпортувати модуль ОС. Тепер зробіть одне, скопіюйте наступний код і вставте його в оболонку пітона і перевірте, як він працює: -

$ python >>> з OS імпорту * >>> системи ('sudo apt-get update')

А зараз це працює … так. Це ще один спосіб, як змусити сценарії python та bash працювати разом. Крім того, є ще один модуль python, який спеціально побудований для роботи з bash. Цей модуль відомий як pexpect. Pexpect - модуль python, який використовується для нерестування дочірніх процесів, їх контролю та повернення результатів відповідно до запиту дочірнього процесу. Модуль pexpect має надзвичайно простий інтерфейс для імпорту потрібних модулів та дочірніх процесів всередині нього та виконання їх відповідно. Для встановлення pexpect потрібно просто встановити pip, щоб встановити модуль так: -

$ pip встановити pexpect

Версія Pexpect потребує версії python більше 3, 3 або конкретно 2, 7.

Насправді набагато більше змішується python і bash, і нічого не працює так добре, як суміш сценаріїв Python і Bash. Ця суміш робить сценарій швидким завдяки Bash і включаючи вдосконалені функції через Python. Про pexpect та його документацію можна прочитати на https://pexpect.readthedocs.org/online.

Рекомендовані статті

Ось кілька статей, які допоможуть вам отримати більш детальну інформацію про сценарії Bash та Python, тому просто перейдіть за посиланням.

  1. Python vs JavaScript-Цінні відмінності
  2. Топ-25 запитань та відповідей щодо інтерв'ю Python
  3. Відмінності Python vs JavaScript
  4. R Програмування проти Python
  5. Обробка файлів PHP