Назад | Перейти на главную страницу

Альтернативы сценариям сценариям оболочки Bash

Я только что перешел на рабочую станцию ​​UNIX. Моя память о сценариях оболочки Bash сошла со школы, и я нахожу синтаксис очень запутанным. Мне интересно, какие еще языки сценариев используются для автоматизации задач. Два самых популярных, о которых я слышал, - это Perl и Python.

  1. Какой язык сценариев наиболее широко используется в реальных магазинах?
  2. Какой язык сценариев больше всего похож на синтаксис C / C ++?
  3. Есть ли другой язык сценариев, о котором я не знаю?

Спасибо за вашу помощь,

Скотт

В некоторой степени это вопрос личных предпочтений. Perl и Python определенно лидируют по популярности.

Однако, чтобы ответить на два из трех ваших вопросов:

  1. Я предполагаю, что наиболее широко используется bash, за ним, вероятно, следует perl. Просто догадываюсь, не знаю, проводил ли кто-нибудь опрос. :)
  2. Существуют миллиарды языков сценариев. :)

Однако я рекомендую Python. Его легко читать и писать, он невероятно мощный, и в Интернете есть масса полезных ресурсов для его изучения, не говоря уже о коде, который вы можете скопировать и переназначить.

Perl и Python - очевидные ответы; но каждый из них используется для выполнения разных задач:

  1. Bash - самый простой в освоении. С помощью сценариев Bash вы запускаете команды и управляете выводом.
  2. Python - второй по сложности в изучении. Python намного полезнее, чем Bash, поскольку вы можете использовать Python для написания полных программ, и он хорошо поддерживается сообществом. Python также чрезвычайно удобен для чтения и его легко редактировать спустя месяцы.
  3. Perl - лучший из трех (для написания сценариев), но самый крутой путь обучения. Имеет очень хорошую поддержку регулярных выражений (что является основной причиной, по которой он все еще используется сегодня), и вы, вероятно, со временем столкнетесь с большим количеством сценариев Perl. Основные проблемы Perl - это читаемость кода - через несколько месяцев после написания кода вы не сможете понять, что он делает. Так что вам лучше подробно комментировать.
  4. Awk / Sed - оба очень полезны, но оба очень трудны для изучения. Я бы посоветовал заняться этим последним, если вы не разбираетесь в шаблонах.

Что касается того, какой из них изучать прямо сейчас (поскольку вы, вероятно, не знаете ни одного из них), я бы изучил Python. Это самое простое и полезное знание.

А что касается ответов на ваши вопросы:

Какой язык сценариев наиболее широко используется в реальных магазинах?

Все они, но я полагаю, что Perl имеет здесь небольшое преимущество (в том, что он используется в системном администрировании гораздо дольше).

Какой язык сценариев больше всего похож на синтаксис C / C ++?

Perl

Есть ли другой язык сценариев, о котором я не знаю?

Рубин, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

awk для небольших работ, python для более чем одинарных.

Python (если вы не используете определенные API-интерфейсы и другие вещи, зависящие от платформы) имеет богатую «стандартную библиотеку», которая доступна на всех платформах, на которых вы используете версию Python. Это очень приятно, так как вы можете легко повторно использовать свои скрипты и означает, что ваши знания являются хорошим вложением, даже если вы измените свою платформу.

В нашей компании мы используем python для всех сценариев, мониторинга ... и java для приложения, и мы живем в гетерогенной среде.

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

  • Рубин
  • Python
  • Go - кроссплатформенный язык, скрипты упоминаются как одна из сильных сторон Go.
  • Node.js - см. Grunt.js, Gulp.js. Многие проекты сейчас используют Node.js в качестве инструмента автоматизации оболочки.
  • Perl

Я бы сказал, что perl и python, вероятно, две лучшие альтернативы. Вы также можете многое сделать с помощью sed и awk.

Если вы хотите выучить что-то с нуля, вероятно, лучше (пере) изучить bash.

Помимо этого, в наши дни популярны perl и python; Я неравнодушен к Perl, но мой стиль написания сценариев на Perl не сильно изменился с тех пор, как вышел Perl 4.

Я не знаю ни одного скриптового языка, похожего на c-синтаксис.

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

Perl также имеет то преимущество, что он настолько сложен, насколько это необходимо в текущей ситуации. Вы можете рассматривать его как простой язык сценариев для быстрого администрирования или одноцелевые сценарии, но вы можете использовать объектно-ориентированные концепции или обширные метаобъектные системы, когда хотите создавать более крупные, простые в обслуживании приложения (например, демоны, серверы, клиенты).

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

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

И для скептиков относительно удобочитаемости: вы можете писать трудночитаемый код на любом языке. Если вы посмотрите на свой код четырехмесячной давности и не можете его понять, значит, вы делаете что-то не так.

p.s. Этот пост был заполнен ссылками на различные удобные для администрирования модули на CPAN, но очевидно, что новые пользователи могут размещать только одну ссылку, поэтому используйте эту ссылку CPAN для поиска таких вещей, как «CVS», «SVN», «Cron» и «Moose» (обширный объектная система)

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

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

    • другие языки сценариев: много! Lua, Рубин, JavaScript ...

Вы должны использовать комбинацию всех тех, где это уместно. Я действительно не люблю perl (читабельность), но он хорош для многих вещей. С другой стороны, Python был для меня чем-то новым с точки зрения системного администрирования, пока мне не пришлось управлять (и все еще приходится) несколькими KVM-машинами. Запуск, остановка, сохранение, загрузка, миграция всех этих машин с помощью скрипта стали реальностью после 1 часа возни с привязками python libvirt.

И последнее, но не менее важное: я бы не стал использовать perl или python, если мне нужно, скажем, сбрасывать все базы данных с сервера mysql каждую ночь (каждая база данных в своем собственном файле дампа), tar их и rsync на другой сервер. Зачем ? Потому что на bash это быстрее и проще писать :)

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

[общие советы по созданию сценариев см. в других ответах]

Этот ответ касается использования программ командной строки, а также их больших цепочек.

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

Если вы перебираете файлы и параметры, проще всего начать с bash. Вы можете создать прототип в оболочке, а затем скопировать в сценарий и добавить несколько массивов и циклов с минимальными накладными расходами.

Примеры того, что я имею в виду:

$ 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. Это можно сделать, но полностью заменить родную среду оболочки это невозможно.

Если бы у оболочки был лучший язык, всего этого можно было бы избежать.

Мне нравится рубин. Это просто и легко программировать. Есть отличная книга о системное администрирование с использованием Ruby.

Ruby используется в нескольких системах управления конфигурациями (capistrano, chef, puppet) и последней версии metasploit.

Ты можешь использовать порыв, замену оболочки 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 }

Пример однострочников на Ruby:

> 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, немного старой школы, и синтаксис для меня слишком сложен.

Чтобы добавить еще один интересный вариант в кучу, посмотрите Closh

https://github.com/dundalek/closh

Это замена bash, которая запускает полную версию Clojure (Script). Вы можете использовать все краткие и мощные инструменты Clojure в командной строке. Это еще молодой проект, но он представляет собой довольно интересную и привлекательную альтернативу синтаксису bash.