Какие вещи можно сделать с помощью Perl, но нельзя сделать с помощью Bash? - PullRequest
1 голос
/ 10 июля 2010

Я новичок в использовании скриптового языка. Я сталкиваюсь с двумя языками сценариев, которые называются Perl и Bash.

Я хотел бы знать, что можно сделать с помощью сценария Perl, но нельзя сделать с помощью сценария оболочки Bash?

Спасибо.

Ответы [ 8 ]

8 голосов
/ 10 июля 2010

Bash - это оболочка, и она не предназначена для полноценного языка программирования, такого как Perl / Python. У него нет таких вещей, как модули, пакеты и т. Д. Однако оболочка bash поставляется с такими средствами программирования, как массивы, управление потоком, например, if / else, циклы (for, while) и т. Д., Которые позволяют выполнять простые сценарии. Чтобы сделать оболочку bash практически эквивалентной мощности Python / Perl, вы должны использовать ее вместе с такими инструментами Unix, как sed / awk и т. Д. В сочетании с этим сценарии / программирование bash могут быть столь же мощными.

Я не согласен с постером Филлипом о том, чтобы избегать Bash, потому что некоторые вещи лучше сделать с помощью инструментов оболочки и * nix, чем на других языках.

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

5 голосов
/ 10 июля 2010

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

4 голосов
/ 11 июля 2010

Вот версия tl; dr: если вы пишете больше, чем страница bash, остановите и перепишите ее на реальном языке программирования . Мне все равно, если это Perl или Python или Ruby. Только не создавайте несмываемые шарики для волос из 500 линий.

Теперь, в дополнение к существующим ответам ...

В Perl есть отладчик.

Многие люди не используют отладчик Perl, но я сильно полагаюсь на него. Это кошмар для меня, чтобы понять, что делает большой сценарий оболочки. Я нахожу этот цикл: «разбрызгивать отладочную информацию по всему коду, запускать, смотреть на результаты отладки, понимать, что мне нужно знать что-то еще, посыпать больше отголосков, повторять», чтобы быть очень медленным и разочаровывающим. Запуск кода в отладчике позволяет вам проверять данные по мере необходимости и проводить больше проверок, чтобы лучше понять, что вам нужно.

Perl является кроссплатформенным.

Скрипт bash не будет работать в Windows без посторонней помощи, но я не совсем об этом говорю. Bash опирается на множество программ командной строки, которые поставляются с системой Unix ... возможно. Предполагая, что они существуют, они не всегда работают одинаково. Такие вещи, как find и grep. Это версия GNU? Версия BSD? Может быть, старая Sun / AIX / версия? Поддерживает ли он флаги, которые вы ему бросаете?

Но, эй, вы используете только Fedora, Debian или кого-то еще, кого это волнует? В конце концов, либо ваш дистрибутив изменит что-то несовместимое, либо вы захотите перейти на другую систему, и вдруг вы окажетесь в огромном беспорядке. «Почему этот сервер все еще работает на Redhat 7 ?!» часто потому, что некоторые хрупкие скрипты оболочки делают что-то важное.

Что приводит нас к ...

Perl может объявить свои зависимости.

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

Perl легко тестируется.

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

1 голос
/ 10 июля 2010

Чтобы ответить на самом базовом уровне, с помощью perl вы можете получить доступ к CPAN , который (насколько я знаю, в любом случае) вы не можете сделать с bash.CPAN содержит библиотеки для всего, что вы хотели бы сделать с языком программирования.Вероятно, одна из самых распространенных вещей, которые вы делаете с perl, которую вы не можете (легко) сделать с bash, - это взаимодействие с базой данных.

1 голос
/ 10 июля 2010

Я новичок в использовании скриптового языка.Я сталкиваюсь с двумя языками сценариев, которые называются Perl и Bash.

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

Я хотел бы знать, какие вещи можно сделать с помощью сценария Perl, но нельзя сделать с помощью Bashсценарий оболочки?

Оба завершены , так что вы можете сделать что-либо в любом из них.Но это не очень полезный ответ :) У обоих есть свои достоинства, bash (или ksh, csh) часто используется для скриптов конфигурации или скриптов драйверов.Посмотрите в вашем каталоге /etc/init.d список скриптов этого варианта.Как только вы выйдете за рамки такого рода сценариев, bash будет становиться все труднее, чем стоит.

Perl немного более функционален с библиотеками и т. Д. Это самая большая сила (так мне сказали, яне занимайтесь программированием на Perl), это обработка текста.Удобно (и я думаю, что изначально оно было разработано) для анализа текстовых файлов, которые облегчают жизнь сисадмина.

Что бы вы предложили?(вы не спрашивали об этом, но я притворяюсь, что вы это сделали :))

Если вы хотите выучить язык сценариев, изучите python .Это будет более знакомый язык, его легко выучить и он чрезвычайно мощный.Зная bash и python, я никогда не чувствовал необходимости изучать perl - но в восторге от изуродованного синтаксического беспорядка, который выливается в «программы».прочитайте учебник или два, возьмите несколько закладок.В основном вы узнаете это, взламывая вещи в командной строке или собирая вместе несколько строк .bashrc или что-то в этом роде.Не беспокойтесь об «изучении» этого.Вы просто впитываете это со временем, а затем заглядываете в углы, когда понимаете, что вам это нужно.

1 голос
/ 10 июля 2010

В принципе, если все, что я хочу сделать, это настроить и выполнить программу или запустить ряд «встроенных» команд, таких как sed, grep или awk, я бы использовал Bash. Если бы мне пришлось делать какие-либо вычисления, манипулирование данными или циклы, я бы использовал Perl. И я занимаюсь написанием сценариев оболочки Bourne и Perl уже более 20 лет. Если бы я только начинал, я бы использовал Python вместо Perl.

0 голосов
/ 11 июля 2010

Если это работа, связанная с системным администратором, вы должны знать оба.Основой является оболочка, потому что это то, что вы используете в Unix для выполнения ваших команд.Perl важен, потому что я считаю, что его проще использовать для обработки строк (хотя большинство из них вы можете сделать и в оболочке), вы можете использовать это для автоматизации регистрации и проверки журналов, а также для быстрого соединения нескольких команд.Ничто из оболочки не может сделать, но в наши дни все больше и больше файлов в формате xml (например), и это легче обрабатывать в perl, то же самое с веб-интерфейсами и т. Д.во многих инструментах будут доступны модули для Perl, или, по большей части, они могут быть написаны на Perl (например, некоторые продукты от Symantec).

Что касается Python, это очень хороший язык, ииспользование в основном на платформах Linux (многие инструменты redhat & ubuntu написаны на python).Хотя это не относится к Unix-платформам (Solaris, hpux-Python даже не устанавливается по умолчанию на них), которые все еще больше склоняются к Perl.может быть важно, относительно того, на какой ОС вы будете фокусироваться.

0 голосов
/ 10 июля 2010

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

Если вы хотите / должны изучать Bash, будьте готовы к тому, что большое количество информации или примеров кода наивно или неправильно (многие сценарии уже ломаются, когда имена файлов содержат пробелы!).Моя рекомендация для программирования на Bash - обширная документация по вики Грега Вуледжа , например, Руководство по Bash , FAQ по Bash и Подводные камни .

Для возможных downvoters: Я говорю только о Bash, когда используется в качестве языка сценариев, а не когда используется в качестве интерактивной оболочки, в этом случае это нормально.Если вы не думаете, что Bash отстой, читайте различные темы о Bash здесь или читайте известные ошибки Bash: большинство проблем в Bash возникают из-за его неспособности правильно использовать структуры данных и из-за его зависимости от внешних программ.сделать базовую обработку данных.Я бы оценил, что 95% всех проблем, с которыми сталкиваются программисты Bash, просто не могут возникнуть в языках со здравым синтаксисом и реальными структурами данных и алгоритмами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...