Стоит ли изучать BASH, когда я знаю Perl?

Все мои скрипты выполняются в Perl, я могу выполнить один лайнер в командной строке, а регулярное выражение Perl выглядит проще. Могу ли я что-нибудь сделать в BASH, что я не могу сделать в Perl?

Я просто не чувствую себя настоящим хакером, если я не трачу время на изучение BASH и начинаю использовать Sed и Awk.

Стоит ли это, или я просто прошу о боли и разочарованиях?

Ответ 1

Если вы так удобны в Perl, продолжайте использовать Perl.

Bash удобно знать, будете ли вы редактировать существующие скрипты (например, материал в /etc/init.d), и вы, вероятно, найдете, что можете прочитать его достаточно легко, если знаете Perl.

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

Если вы хотите почувствовать себя хакером, узнайте Lisp.

Ответ 2

Bash олицетворяет дух UNIX - объединение нескольких простых инструментов для решения более сложной задачи, обычно используя каналы для направления вывода одной команды на вход следующего. Это стиль программирования, который, я думаю, стоит знать; слишком много людей пишут целую программу для достижения чего-то, что может быть сделано путем объединения нескольких существующих инструментов в командной строке.

Итак, изучите bash. Даже если вы не используете его сами, вы также сможете прочитать многие сценарии bash, которые являются ключевыми компонентами большинства систем UNIX/Linux.

Ответ 3

Вам нужно научиться читать его.

Вам не обязательно учиться писать.

Но ваши друзья sysadmin будут смотреть на вас смешно, когда вы пишете perl-обертки для заданий cron.

То, что я чаще всего использую bash, - это примерно так:

for serv in `cat server_names.txt`; do 
   ssh $serv 'some command'; 
done;

Конечно, я мог бы сделать это в Perl... но это просто немного переборщило.

Ответ 4

Изучите bash. Хороший программист имеет ряд строк для своих носовых и командных сценариев, что является фундаментальным для любого хорошего разработчика UNIX.

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

find | grep -l | xargs perl -e "xxx"

По крайней мере, научитесь использовать команды while, case и test вместе с переменными операторами в конструкциях ${var: xxx}.

Ответ 5

Нет... если вы знаете, как кодировать в Perl/Python/Ruby, не утруждайте себя изучением bash.

ДУ узнайте, как использовать командную строку UNIX, т.е. каналы, перенаправления и полезные команды.

Ответ 6

Вы не должны чувствовать, что вам нужно чему-то научиться только потому, что другие люди используют его. Я использую unix с 1988 года и, вероятно, написал менее 1000 строк оболочки script.

Все, что я использую bash (ksh) for, как оболочка - сторона сценариев не полезна - простые вещи выполняются с awk и pipe, а сложный материал требует C. В основном awk.

Я не могу придумать убедительной причины, чтобы научиться писать сценарии bash - за пределами основ.

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

Ответ 7

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

Иными словами, использование sed, awk и друзей в порядке, но вы обнаружите, что можете сделать одну и ту же работу на Perl более чистым способом, который более соответствует тому, что вы уже знаете. BASH и инструментальная цепочка Unix иногда более дружелюбны к скорости, чем Perl, но, с другой стороны, они полны странными или, по крайней мере, необычными оригиналами. Изучение и удержание их довольно трудоемкое, а ИМХО не стоит того, если у вас уже есть подобный мощный инструмент, такой как Perl, который можно было бы рассматривать как преемника.

Ответ 8

Такие вещи, как bash и awk, по-прежнему представляют собой дух Unix маленькие языки:

  • bash - это язык только для выполнения и подключения программ, и он очень подходит для этого
  • awk - это язык, предназначенный только для обработки записей данных, и он очень подходит для этого

Пока perl сильно зависит от этих двух, он разработан как язык общего назначения. Конечно, вы можете выполнять эти задачи в perl, и вы можете предпочесть это, потому что вы знакомы с его синтаксисом.

Но как только вы познакомитесь с bash - это не так сложно, язык намного меньше, чем perl - станет легче и, конечно, более экономичным использовать более конкретный инструмент.

Я изучил perl для веб-разработки, и я использовал его практически для всего. Теперь я нахожу, что большинство заданий достаточно просты для bash и awk, или достаточно сложно оправдать скомпилированный язык.

Ответ 9

Конечно, поскольку это оболочка по умолчанию в большинстве дистрибутивов Linux.

Но еще одна причина: что, если Perl недоступен? Не так давно я переключился на новую работу, и хотя я знаю немного Python и Ruby и несколько Perl, но они не были доступны в живой системе, где мне приходилось разбирать файлы журналов, создавать резервные копии и очищать данные, Мне пришлось изучить Bash (и awk), и они того стоит.

Ответ 10

Я использовал Perl в качестве основного языка сценариев в течение нескольких лет и в конце концов начал собирать бит bash, sed и awk, и я думаю, что они все знают. По сути, все, что вы можете сделать в Perl, вы, вероятно, можете сделать в sed, awk или bash, и с достаточным количеством изысканной трекировки, вероятно, верно и обратное. Тем не менее, есть много случаев, когда sed или awk или bash обеспечивают более элегантное решение проблемы. Perl, очевидно, сильно заимствован из этих языков и невероятно универсален, но эти инструменты сохраняются, потому что они все еще простые и полезные во многих случаях.

Ответ 11

Я хорошо знаком с командной строкой unix, и все утилиты (sed, awk, grep, find..) доступны. Мое общее правило - если это однострочный или цикл for, чтобы поймать кучу файлов и сделать всего несколько операций с ними, я использую bash/tcsh/zsh, иначе я использую Python. Я нашел awk боль для использования, и в любое время требуется больше, чем простое использование awk, или что-то вроде script-like, просто проще использовать реальный язык.

Я использовал Perl в течение длительного времени и полностью переключился на Python. Если вы знаете Perl, используйте его. Это то, для чего это было сделано.

Ответ 12

Я знаю как Perl, так и Bash. Я использую их как на работе, так и на дому.

Да, вы должны обязательно узнать Bash. Затем вы сможете использовать лучший инструмент для работы. Да, все, что вы можете сделать с помощью Bash, может быть выполнено с помощью Perl, но это не значит, что вы должны.

Ответ 13

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

Мое одно предостережение: подумайте о парне, который должен будет поддерживать ваш код. Будет ли он так же свободно владеть Perl, как и вы?

Лично я ненавижу их обоих.;-P

Ответ 14

не изучайте "bash", изучите sh/ksh/pdksh, его основу bash и зная его основы, а не все дурные практики (bashisms), учащиеся bash научат вас, позволит вам использовать любую систему unix/posix с ksh или sh (или bash). Даже службы для Unix от Microsoft поставляются с оболочкой korn.

Ответ 15

Не беспокойтесь о bash, но будьте осторожны с пониманием sh и знайте различия между ними. (например, понять, что в bash script недействительно sh, т.е. "базисы" )

Рассмотрим следующее:

test x"$SHELL" = x/bin/perl && RESULT=no; echo "${RESULT-yes}"

Если вы полностью поймете это, то вы, вероятно, уже знаете достаточно, чтобы пройти. Если вы не понимаете вышеизложенного, выполните команду; если он печатает "да", тогда вам нужно узнать больше sh. (Английская интерпретация: если вы используете perl как свою оболочку для входа, то вы можете обойтись без обучения sh. В противном случае вы это сделаете.)

Чтобы ответить на ваш вопрос конкретно; Нет, вы, вероятно, ничего не можете сделать в bash, который вы не можете сделать в perl, но если вы используете bash для своей оболочки, глупо переходить к perl все время. Если bash - ваша оболочка, то это инструмент, который вы используете много. Поэтому вы должны знать, как использовать его хорошо.

Ответ 16

Несколько пунктов:

  • Знание bash помогает вам действительно учиться судороги Unix/Linux набор команд, поэтому он может быть бесценный для системного администратора.
  • Bash везде и используется в большинстве все от сценариев init до корпоративный клей (посмотрите некоторые из netbackup toolchain когда-то).
  • Если вам необходимо устранить неполадки кто-то другой (или какой-либо другой продукт bash script), вы будете счастливы, что вы знать bash.
  • Если perl недоступен, вы будете счастливы, что знаете bash.
  • И, наконец, иногда bash просто быстрее для быстрой и грязной работы Мне это нужно через 5 минут разнообразие. Вы можете быстро выбить конвейер команд и простой цикл.

Чтобы не сказать, что вы не должны изучать perl, ruby ​​и python. bash - это определенно "умение". Вы должны изучить bash и что-то еще (или несколько элементов elses).

Ответ 17

На ваш вопрос нет правильного и окончательного ответа. Это зависит от того, что вы собираетесь делать. Если он должен поддерживать какой-то код, то изучение bash, awk и sed имеет смысл. Если это просто для личного удовольствия, это также приемлемо.

Однако если поддерживать script, который никто не может поддерживать, потому что никто не знает bash, awk и sed, тогда нет смысла изучать языки, и если вы можете переписать script при правильном тестировании и воспроизводить его без ошибок, тогда изучение нового языка не имеет смысла в отношении ваших временных масштабов.

Знание больше, чем на языке сценариев, хорошо работает, так как в большинстве случаев люди не слишком знакомы с perl, и в этом случае они, скорее всего, знают не менее bash. Также, если вы находитесь в команде, где большинство людей знают bash, awk, sed, тогда было бы разумно изучить эти языки.

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

Ответ 18

Есть действительно много "да" и "нет".

Я бы сказал, что это потому, что полезно изучить некоторые основные bash/zsh/tcsh/whatever (трубы, циклы, перенаправление потоков,...).

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

Ответ 19

Этот пост делает некоторое лоббирование в пользу Perl: http://lindesk.com/2008/05/shell-script-language-use-perl-not-bash/

Для людей, привыкших к достойным языкам, эти языки оболочки будут казаться неуклюжими - или даже злыми. Но поскольку большинство сценариев оболочки невелики, большинство людей не против пыток. В bash команды управления потоком, похоже, выбрасываются как мысль, а не что-то, что встроено в язык. Если вы не верите мне, сравните цикл if if bash и Perl.

[...]

Решение прост - не используйте язык оболочки для написания сценариев оболочки - используйте язык сценариев высокого уровня, такой как Perl. Или Python, Ruby, PHP, Tcl или даже JavaScript. Я все еще использую bash для написания сценариев оболочки, но если оболочка script имеет условие if (кроме простой проверки аргумента), я использую более высокий язык - обычно Perl.

Ответ 20

Там эта действительно хорошая книга под названием "Минимальный Perl", в которой есть много трюков для дребезга bash. Мне очень нравится использовать оба, поскольку я не могу обрабатывать sed и awk. Поэтому, если какой-либо из моих скриптов становится беспорядочным, я знаю, что мне нужно использовать Perl или Python. Кроме того, я считаю, что Perl намного быстрее работает при работе с файлами. Но использование Perl для отправки некоторых файлов по SSH или для выполнения некоторых ifs и fors является излишним.

OTOH, Bash (или любая другая Unix-оболочка, если на то пошло) сосать на выполнение простой/сложной математики и действительно трудно отлаживать. Bash -s foo.sh недостаточно!

Ответ 21

Как говорят многие люди, вам не нужно изучать Bash, но вы хотели бы знать основы. Но основная часть оболочки (sh главным образом потому, что во всех системах и очень минимальна). Поэтому я узнаю, как сделать цикл, что $() находится в Bash и его новая магия, как захватить аргументы командной строки ($ 0, $1 и т.д.), Как работает цитата в Bash (и в остальных оболочках http://www.grymoire.com/Unix/Quote.html). Но, по крайней мере, я советую, чтобы, если вам это не нужно, не потратил много времени на изучение Bash, но прочитал об этом, чтобы узнать, где ответы, когда вам это нужно. И не только Bash, но и Cshell или аналогичные, чтобы хотя бы знать, как устанавливать переменные, условные операторы, псевдонимы и циклы для ваших файлов конфигурации. Все сложнее, вы можете сделать это с помощью Perl, но не потому, что это лучше (или нет), а потому, что вы уже знаете это, и обычно вы не заметите разницу (если ваш perl-lib действительно огромен и вы называете ваши oneliner zillions раз).

Также как программист на Perl, я потратил некоторое время на обучение, чтобы сделать Perl одним лайнером эффективно, связать их в оболочке и как они заменяют команды unix. Я рекомендую книгу: http://minimalperl.com/

Ответ 22

Возможно, глупый способ ответить на то, что на самом деле есть оболочки Perl. Я написал патч для Zoidberg (оболочка Perl) и надеюсь снова получить этот проект снова (я был в контакте с автор оригинала).

Общая идея заключается в том, что если zoid распознает команду как Perl, она интерпретирует ее, а не тогда она рассматривает ее как команду. Сила состоит в том, чтобы обернуть оба вместе для мощного использования оболочки.

Ответ 23

Я бы сказал: "bash -c help". Если вы работаете в мире * nix, это определенно помогает читать вещи и иногда писать быстрые вещи. Это может быть быстрее, чем запись на Perl и более умная с точки зрения nix.