Сценарії альтернативних сценаріїв оболонок Bash


16

Я щойно перейшов на робочу станцію UNIX. Моя пам’ять про сценарії оболонки Баша згасла ще зі школи, і я вважаю синтаксис дуже заплутаним. Мені цікаво, які інші мови сценаріїв використовуються для автоматизації завдань. Два найпопулярніших з них, про які я чув, - це Perl і Python.

  1. Яку мову сценаріїв найбільш широко використовують магазини реального світу?
  2. Яка сценарна мова найбільше нагадує синтаксис C / C ++?
  3. Чи існує інша мова сценаріїв, про яку я не знаю?

Спасибі за вашу допомогу,

Скотт


2
Це, мабуть, має бути вікі спільноти.
EBGreen

2
Зараз я фактично використовую PHP для більшості системних завдань. Я незабаром зіставлю належну відповідь. У ньому багато вбудованих бібліотек, що зручно.
Кайл Ходжсон

Мови, призначені для оболонки, роблять те, чого можуть не використовувати інші мови; Який керує та контролює всі дитячі процеси, що виникають рекурсивно. Реклама в блозі Phusion Passenger пояснює, чому докладно: phusion.github.io/baseimage-docker Коротше кажучи, ваші сценарії, написані в lang-x, ймовірно, не належним чином обробляють процедури вимкнення. Що цілком нормально, якщо ви керуєте ними як дітьми справжньої оболонки. Відмова, я не експерт. Ця інформація є лише наскільки я розумію, що може бути хибним.
ThorSummoner

Відповіді:


12

В якійсь мірі це питання особистих уподобань. Perl і Python, безумовно, там в плані популярності.

Щоб відповісти на два ваші три запитання:

  1. Я б здогадався, що баш найбільш широко використовується, ймовірно, слідом за perl. Хоча тільки здогадуйтесь, не знаю, чи хтось робив опитування. :)
  2. Там є базові мільйони мов сценаріїв. :)

Моя рекомендація є Python. Читати і писати це легко, надзвичайно потужно, і в Інтернеті є безліч корисних ресурсів для вивчення цього, не кажучи вже про код, який ви можете скопіювати і перевзначити.


1
Я другий, що. Мені здається, що Python простий у навчанні та вміє робити все, що я кидаю на нього, як це було у старій добрій ОС / 2 дні з REXX.
slovon

3
+1 для python ... потужність C мовою сценаріїв. Ви можете зробити свої сценарії настільки ж простими або складними, як хочете;)
KFro

1
у системах, що не належать до NT, модуль python shробить доступним використання python як мови скриптів оболонки; Однак якщо ви стикаєтеся з крайовими справами (як, наприклад, багатопроцесорна), вам доведеться вивчити модуль підпроцесу, який мені сьогодні важко просто використовувати.
ThorSummoner

5

Перл і Пітон - це очевидно відповіді; але кожен з них використовується для виконання різних завдань:

  1. Баш - Руки вниз найлегше вчитися. За допомогою сценаріїв Bash ви запускаєте команди та маніпулюєте результатами.
  2. Пітон - другий найпростіший у навчанні. Python набагато корисніший за Bash, оскільки ви можете використовувати Python для написання повноцінних програм, і це добре підтримується громадою. Python також надзвичайно читабельний і легко редагується через кілька місяців.
  3. Perl - найкраща з трьох (для сценаріїв), але легко найкрутіша крива навчання. Має дуже гарну підтримку регулярних виразів (що є основною причиною, що вона все ще використовується сьогодні), і ви, ймовірно, з часом натрапите на багато сценаріїв Perl. Основна проблема Perl - це читабельність коду - через кілька місяців після написання коду ви не зможете зрозуміти, що він робить. Тож вам краще коментувати.
  4. Awk / Sed - Обидва дуже корисні, але обох дуже важко вчитися. Я б запропонував розібратися з цими останніми, якщо ви не добрі в моделях.

Що стосується того, який саме зараз вивчити (оскільки, мабуть, ви не знаєте жодного з них), я би навчився Python. Це найпростіше і найкорисніше знати.

А щодо відповідей на ваші запитання:

Яку мову сценаріїв найбільш широко використовують магазини реального світу?

Усі вони, але я думаю, що Perl має тут трохи переваги (будучи тим, що він використовується в системному адмініструванні набагато довше).

Яка сценарна мова найбільше нагадує синтаксис C / C ++?

Perl

Чи існує інша мова сценаріїв, про яку я не знаю?

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


2
Якщо ви вкладете трохи часу в perl, ви можете написати ідеально читабельну perl. Люди, які пишуть код спагетті, занадто швидко звинувачують Перла у своїх невдачах.
Cian

1
Я говорю лише на основі досвіду як систематик; Мені довелося підтримувати код, про який писали інші люди, який був чортів майже неможливо прочитати. Зазвичай я закінчую лише переписування коду в Python.
Майкл Побега

3

awk для невеликих робочих місць, python для більш ніж одиниць.

Python (якщо ви не використовуєте конкретні API та інші речі, що залежать від платформи), має багату "стандартну бібліотеку", яка доступна на всіх платформах, де ви використовуєте версію python у використанні. Це дуже приємно, оскільки ви можете легко використовувати свої сценарії легко і означає, що ваші знання - це хороша інвестиція, навіть якщо ви зміните свою платформу.

У нашій компанії ми використовуємо python для всіх сценаріїв, моніторингу, ... і java для програми, і ми добре перебуваємо в неоднорідному середовищі.


1

Я б сказав, що perl і python - це, мабуть, дві найкращі альтернативи. Ви також можете багато зробити з sed і awk.


1

Sh (bourne shell), grep, awk і sed - це завжди гарна річ, щоб знову схопитися. Perl є чудовим, якщо ви не хочете багато регенерувати текст, а ремонтопридатність не так важлива (не кажучи, що це неможливо). Пітон; якщо читабельність для вас важлива. Мої переваги - Python, але всі ці інструменти корисні для більшості речей, які ви кидаєте на нього. Ви можете переглянути свою вимогу до синтаксису c / c ++, але тримання на ньому не допоможе вам у довгостроковій перспективі.


Дякую, Мартіне. Я помітив (із зразків в Інтернеті), що Perl має неабияку схожість з PHP (хоча я впевнений, що це був Perl до PHP, історично). Це справедлива заява?
Скотт Девіс

PHP 1.0 був сценарієм Perl, тому це не випадково :)
Білл Вайс

1

Якщо ви хочете навчитися чомусь з нуля, напевно, найкраще (повторно) вивчити баш.

Крім того, перл і пітон популярні в наші дні; Я частковий до perl, але мій стиль сценаріїв Perl не сильно змінився з моменту виходу Perl 4.

Мені невідомі будь-які "с-синтаксичні" мови сценаріїв.


1

Perl, руки вниз, хоч би за неймовірний ресурс CPAN ( http://search.cpan.org/ ). Користь використання мови сценаріїв з такою масовою спільнотою полягає в тому, що вам навряд чи колись потрібно буде щось вигадувати.

Perl також має перевагу бути настільки ж складним, як вам потрібно для поточної ситуації. Ви можете розглядати це як просту мову скриптів для швидкого адміністрування або сценарії з єдиною метою, але ви можете використовувати об'єктно-орієнтовані концепції або розширені метаоб'єктні системи, коли ви хочете створити більші, прості в обслуговуванні програми (наприклад, демони, сервери, клієнти).

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

Синтаксис Perl також може бути разюче близьким до C, якщо ви можете обійти відсутність набору тексту та сигіл; вдосконалене використання perl прийде природним чином, коли ви зрештою вивчите сильні сторони мови.

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

ps Ця публікація була заповнена посиланнями на різні модулі, призначені для адміністрування в CPAN, але, очевидно, нові користувачі можуть розміщувати лише одне посилання, тому використовуйте це посилання CPAN для пошуку таких речей, як "CVS", SVN "Cron" та "Moose" ( розгалужена об'єктна система)



1

[для загальної поради щодо сценаріїв дивіться інші відповіді]

Ця відповідь стосується використання програм командного рядка, а також великих ланцюгів їх.

Для запуску ланцюгів програм CLI і, можливо, багатьох ланцюгів послідовно, bash є найпростішим. Perl може зробити те ж саме, але мову вивчити набагато складніше і набагато складніше, і як багато хто вказував, писати зрозумілий Perl легко.

Якщо ви перебираєте файли та параметри, bash найпростіше отримати b / c, ви можете прототипувати в оболонці, потім скопіюйте в сценарій і додайте кілька масивів і циклів з мінімальними накладними витратами.

Приклади того, що я маю на увазі:

$ 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}

У bash, легко обернути це за кілька циклів над деякими з цих параметрів. Однак код стає важко читати, коли сценарій перевищує кілька десятків рядків. --- уявіть 30 наборів команд (по кілька рядків у кожному) для тридцяти різних графіків даних ---

Perl і Python можуть бути кращими для великих сценаріїв, оскільки вони мають більш чистий синтаксис для циклічного циклу та змінних, але команди bash повинні бути сформовані як рядки, виконані як підпроцеси, і stdin, stdout, захоплені. Це можна зробити, але він не може повністю замінити рідне середовище оболонки.

Якби оболонки мали кращу мову, цього б уникнути.


0
  1. найбільш використовувані: Perl, здебільшого з історичних причин. Python широко доступний у всіх дистрибутивах Linux та BSD (він навіть встановлений на Mac OSX) і набагато приємніше вчитися / програмувати. Звичайно, щойно ви отримуєте синтаксис, Bash простіше майже нічого, що ви могли зробити в командному рядку. В кінці кінців, це командний рядок.

    • Синтаксис C: є csh , але ви можете легко встановити TCC і використовувати реальний C як мову сценаріїв, складений з джерела за менший час, ніж запуск інших мов.

    • інші мови сценаріїв: багато! Lua , Ruby , JavaScript ...


0

Ви повинні використовувати комбінацію всіх тих, де це доречно. Мені дуже не подобається perl (читабельність), але це корисно для багатьох речей. З іншого боку, Python був для мене чимось новим з точки зору адміністрування системи, поки мені не довелося керувати (і досі потрібно) декількома машинами KVM. Запуск, зупинка, збереження, завантаження, міграція всіх цих машин за допомогою сценарію стали реальністю після 1 години возитися з прив'язкою пітонних лібвіртів.

І останнє, але не менш важливе, я б не використовував perl або python, якщо мені, скажімо, щовечора скидайте всі бази даних з mysql-сервера (кожна база даних у власному дамп-файлі), націлюйте їх та rsync що-небудь на інший сервер. Чому? Тому що це швидше і простіше написати це bash :)

Зрештою, ви повинні використовувати будь-яку мову, яка найкраще відповідає вашій поточній задачі, і не використовувати лише задану мову сценарію, тільки тому, що вам це найбільше подобається.


0

Мені подобається рубін. Програмувати це просто і легко. Існує чудова книга про адміністрування системи з використанням рубіну .

Ruby використовується в декількох системах управління конфігурацією (capistrano, шеф-кухар, ляльковий) і останньої версії metasploit.

Ви можете використовувати Rush , заміну оболонки Unix з синтаксисом ruby ​​і робити такі дії:

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 }

Спасибі chmeee. Я не мав уявлення, що ти можеш використовувати Рубі для системдміна - я завжди вважав, що це орієнтоване на веб. Я шукаю щось, що використовується в більшості організацій. Чи справедливо сказати, що Ruby для sysadmin все ще занадто кровоточить?
Скотт Девіс

1
Shell / Perl - це єдині дві мови, які можна надійно знайти скрізь. Пітон є, мабуть, наступним найпоширенішим, рубін працює на дуже віддаленій четвертій (насправді, мабуть, п’ятій, поза awk).
Cian

@ScottDavies PHP і ASP.net - єдині мови, орієнтовані на веб; навіть Javascript, призначений для роботи виключно в Інтернеті, визрів, ставши лаком для перевірки форми. Однак ви можете відправляти HTML з будь-якою мовою, навіть башти .
ThorSummoner

0

Приклад Ruby one-liners:

> 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

Я б користувався рубіном.

Порівняйте з sh, він сучасний і потужний.

Порівняйте з python, це послідовність, одне видання, один менеджер пакунків. І мені не подобається синтаксис відступу.

Порівняйте з Perl, трохи старої школи та синтаксис для мене занадто складний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.