Какой язык сценариев лучше?
Для написания сценариев для автоматизации процессов на платформе Linux какой язык сценариев будет лучше? Сценарий оболочки, Perl или Python или есть что-нибудь еще? Я новичок во всех из них. Итак, я просто думаю, на какой пойти?
21 ответ
Ответ таков: что лучше всего подходит для работы!
Мое эмпирическое правило;
Bash - для короткого скрипта, который может нуждаться в цикле for для повторного выполнения.
Perl - все, что связано с какой-либо обработкой текста или обработки файлов, особенно, если это один из вариантов. Просто сделайте грязный противный скрипт на Perl и покончите с этим
Python - Если это то, что вы можете сделать снова или что-то очень похожее. Тогда, по крайней мере, у вас есть возможность повторно использовать сценарий.
Перейдите ко всем трем из них, начните с bash/awk/sed plus fileutils (grep, find и т. Д.), А затем двигайтесь вверх по иерархии абстракций с помощью perl и python.
Таким образом, вы сможете решить для себя, какой из них лучше всего соответствует вашим потребностям. Я говорю, начните с bash и друзей, потому что они вездесущи, на некоторых машинах не будет установлен Perl или Python, и вы будете чувствовать себя там беспомощными, особенно в традиционной среде Unix (т.е. не в Linux).
При выборе языка сценариев для автоматизации вашей среды linux / unix, на мой взгляд, самое важное... ваша замена:-)
Под этим я подразумеваю следующих / других системных администраторов, которым, возможно, придется поддерживать ваши сценарии. В настоящее время я работаю в среде, где ведущий парень Unix - настоящий сценарист, но в основном он воздерживается от использования bash, при этом для удачи добавляются некоторые perl и windows vbscript. По крайней мере, это заставило меня освежить свой Perl.
Соглашаясь с другими комментариями здесь, я бы предложил освоить bash - по возможности, делать как можно больше в bash, как это знают большинство людей, и может поддерживать / отлаживать его. И это будет самым портативным. Использование с sed & awk особенно мощно.
Когда вы освоите это, вы можете вернуться сюда и спросить: "Какой язык сценариев я должен выучить после bash?":-)
JB
Я использую Perl для чего угодно, кроме очень простых скриптов.
Я также 'use warnings'
, 'use strict'
, избегайте кавычек, вызывайте систему как 'system($command, @and_args)'
, И потому, что мне нравится, что его можно поддерживать: IPC::Run (для каналов), File::Fu (для имен файлов, временных файлов и т. Д.), YAML (для конфигов или разных данных) и Getopt::Helpful (так что я помню какие варианты были.)
Я думаю, это зависит от того, насколько сложные задачи вы хотите автоматизировать. Лично я всегда использовал shell-скрипты, которые позволяют вам вызывать awk, sed, grep, find, ls, cat и т. Д., Которые можно объединить, чтобы сделать практически все, что вы можете достичь с помощью perl или python. С другой стороны, если процессы, которые вы хотите автоматизировать, являются сложными (например, не просто линейной последовательностью шагов), то вы, вероятно, обнаружите, что написание сценариев на perl или python (или даже ruby!) Намного быстрее и делает их легче поддерживать.
Я бы порекомендовал bash, awk и sed.
bash - http://tldp.org/LDP/abs/html/
awk - http://www.uga.edu/~ucns/wsg/unix/awk/
http://www.grymoire.com/Unix/Awk.html
sed - http://www.ce.berkeley.edu/~kayyum/unix_tips/sedtips.html
http://www.grymoire.com/Unix/Sed.html
Просто несколько идей.
Зависит от сложности и проблемной области поставленной задачи.
Скрипты Bash быстрые и грязные для простых задач автоматизации системы. Для более сложных вещей, чем перемещение файлов и запуск команд, я бы лично сказал, что Perl - следующий в очереди как инструмент автоматизации defacto sys-admin goto. Чтобы больше сосредоточиться на повторном использовании кода и удобочитаемости / поддержке, я бы хотел довести его до Python или Ruby.
PHP также может быть использован для автоматизации задач, однако, по моему опыту, он не является широко распространенным для этой цели.
Это действительно сводится к тому, какой язык вы больше всего интересуетесь в изучении, большинство из них могут быть использованы для автоматизации, помимо многих других вещей.
Если вы хотите минималистичное, компактное и быстрое решение (быстрее, чем Python/Ruby), тогда -> переходите на язык сценариев LUA:-) Однако скорость и компактность кода Lua достигается благодаря относительно небольшому ядру языка Lua, поэтому, если вы хотите, чтобы "батареи включались" (ака. очень большие "стандартные" библиотеки) тогда Lua не для вас. В остальном, ребята из мира C/C++ очень любят скорость Lua:-)
п.с.
Тест Lua vs Ruby 1.9 (вы можете посмотреть также Lua Vs Python 3):
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=lua&lang2=yarv
Я предпочитаю сценарии оболочки только для очень маленьких задач. Написание надежных сценариев оболочки требует большого количества знаний о возможных подводных камнях, которые вы узнаете только на практике. Но изучение даже основ увеличит вашу производительность!
Если мне нужна сложная логика, я обычно использую Python. Под сложным я подразумеваю все, что имеет более двух if -statements =)
Perl подходит для своей первоначальной цели, но имейте в виду, что многие из изученных вами перлизмов не применимы нигде.
Python и Ruby примерно эквивалентны. Я бы порекомендовал вам хорошо изучить один из них и изучить учебник по другому. Я предпочитаю Python, но это действительно сводится к личным предпочтениям.
Подводя итог: Изучите основы сценариев оболочки. Изучите хотя бы Python или Ruby.
Я бы обычно говорил тот, который вы знаете лучше всего, который может достичь желаемых результатов. Как и во всех религиозных войнах, и после изучения большого количества языков, вы понимаете, что вы можете делать большинство вещей на большинстве языков (обратите внимание, я сказал больше всего). Я использую Perl. Возможно, он не так актуален, как Python или Ruby, но он имеет мощную поддержку библиотек из CPAN. И я пока не нашел ничего, что я не мог бы сделать в этом. Когда я это сделаю, я посмотрю на другие языки, чтобы выяснить, какой из них может заполнить этот пробел.
Если бы я начинал сегодня, возможно, я бы выбрал Python или Ruby, но я не знаю достаточно о них, чтобы сделать суждение. Кто-нибудь из ваших друзей / коллег знает языки сценариев? Это может вам очень помочь, так как поддержка при изучении нового языка очень важна.
Удачи
Я все время рекомендую Python. Это должно позволить вам сделать что-нибудь. Для небольших задач я использую сценарии оболочки, хотя.
Ну, это так:
Perl не самый удобный язык сценариев, но у него есть CPAN (Comprehensive Perl Archive Network), который содержит тысячи библиотек, реализующих практически все, о чем вы только можете подумать, и Perl действительно мощен, когда дело доходит до обработки текста. Недостатком может быть то, что Perl-код довольно сложно поддерживать (если вы не очень хорошо его знаете).
Python - это язык сценариев, который становится все более популярным среди сценаристов. У него нет сообщества, подобного CPAN (пока), но оно более читабельно и его легче поддерживать. Это так же быстро, как Perl.
Ruby - новейшая тенденция в скриптовых языках. Ruby - полный ООП, что означает, что все является объектом. Его преимущество в том, что код очень удобочитаемый, и его довольно легко выучить, если вы новичок. Основным недостатком является его скорость выполнения, которая вроде s*x.
Это зависит от того, какой тип автоматизации вы делаете, когда тестируете autoamtion. Perl предлагается, потому что Perl- это очень мощные модули расширения через CPAN, онлайн-инвентарь модулей Perl. Если вам нужен только удобный инструмент для создания простого исходного файла, awk очень удобен. Если вы планируете использовать сценарии для автоматизации большого проекта, Perl- лучший выбор с большим количеством функций. Снова Python был спроектирован с самого начала как объектно-ориентированный язык. В Perl 5 добавлены некоторые новые функции, но для меня это выглядит как неловкая модернизация. В Python реализованы хорошо реализованные функции множественного наследования, полиморфизма и инкапсуляции. Подводя итог, мне кажется, что Python доминирует в Perl в большинстве приложений, за исключением довольно коротких приложений типа shell-script, и там они примерно сопоставимы.
Я второй Python - мощный, простой, производительный и... на самом деле довольно забавный, по сравнению с Perl или Bash. Кроме того, если вы знаете это, вы найдете другие применения, это используется во многих проектах. И не просто как "классический" язык сценариев, возьмем, например, витой проект. Я думаю, это верно и для Perl, но мне больше нравится Python на порядок
Итог, как было сказано выше, убедитесь, что у вас есть подходящий инструмент для работы...
Если бы мне пришлось выбрать один, это должен был бы быть AWK. Он легкий, имеет небольшую кривую обучения и имеет много полезных функций, таких как index и substr.
Зависит от того, что вы хотите сделать, я регулярно использую все из них:
- Оболочка для простого пакетирования команд с использованием, возможно, цикла или оператора if.
- Perl, когда я жую файлы, делаю замену текста и делаю вещи.
- Python когда нужно больше логики.
В *nix вы должны использовать правильный инструмент для правильной работы, что может быть трудно для новичка, так как ему нужно многому научиться (примерно через 15 лет, как пользователь *nix, я все еще нахожу новые вещи). Я рекомендую быстро взглянуть на все языки, чтобы увидеть, на что они способны, а затем начать с использования оболочки для всего, когда ваши скрипты становятся неуклюжими, переместите их к чему-то другому.
Просто напишите ваши команды одну за другой, поместите их в файл и запустите этот файл с
promp> bash file
и у вас есть ваша первая автоматизация. Затем изучите переменные, циклы и управляющие структуры bash.
Если вы хотите иметь простую скриптовую программу, "контролирующую" другую программу (конечно, из командной строки), то вам следует пересмотреть Tcl/Tk, особенно его ожидаемый диалект - они просты и ориентированы на эту цель - это очень легко создайте скрипт, который контролирует ftp и даже делает su с ними!
Awk очень хорошо обрабатывает текстовые файлы - не такой мощный, как perl, но гораздо более простой и понятный (и без ужасного синтаксиса).
Конечно, ваш пробег может варьироваться, поэтому я думаю, что лучшим ответом будет спросить вас: для чего вы хотите писать сценарии? А потом: вы знакомы с любым языковым сценарием? Ответы на эти вопросы покажут вам язык сценариев, который вы должны использовать, в соответствии с достоинствами и недостатками каждого из них и их основной целью.
В линуксе? Выбери свой яд, в основном. Мне нравится Python, другие Ruby, третьи Perl. Выберите один и пойти на это.:-)
Я бы сказал, Python - он имеет очень высокую читабельность, он прост (нет фигурных скобок, ключевые слова максимально приближены к английскому и т. Д.), И в нем можно делать практически все, от простых до очень сложных вещей. Это также популярно и интересно для кода.
Это может показаться немного странным, я использую bash более 10 лет. Я начал использовать PHP5, и поначалу это было сложно, но теперь у меня гораздо лучшая база кода для повторного использования.
Я не рекомендовал бы это как отправную точку все же!