Сильные стороны сценариев оболочки по сравнению с Python

Я пытался несколько раз изучить скрипты оболочки (bash), но был удален из синтаксиса. Затем я нашел Python и смог сделать большинство вещей, которые оболочка script может делать в Python. Теперь я не уверен, должен ли я потратить свое время на изучение сценариев оболочки. Поэтому я хочу спросить:

Каковы сильные стороны сценариев оболочки, которые делают его незаменимым инструментом по сравнению с Python?

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

Ответ 1

  • Сценарии оболочки имеют более простые обозначения для перенаправления ввода-вывода.
  • Проще создавать конвейеры из существующих программ в оболочке.
  • Сценарий оболочки повторно использует целые программы.
  • Shell универсально доступна (на любом подобном Unix) - Python не обязательно установлен.

'Это правда, что вы можете делать все на Python, что вы можете сделать в оболочке; "Также верно, что в Python есть вещи, которые очень трудны в оболочке (так же, как в Python есть простые вещи, но они сложны в Python). Знание обоих будет лучшим в долгосрочной перспективе.

Ответ 2

"Каковы сильные стороны сценариев оболочки, которые делают его незаменимым инструментом по сравнению с Python?"

Оболочка не является обязательной. Почему вы думаете, что их так много? bash, tcsh, csh, sh и т.д. и т.д.,

Python - это оболочка. Не тот, который вы использовали для запуска всех команд, но для сценариев он идеален.

Python - это более или менее стандартная часть всех дистрибутивов Linux.

Более традиционные раковины делают слишком много вещей.

  • У них есть удобный пользовательский интерфейс для запуска команд. Это включает в себя однострочные команды, в которых оболочка ищет ваш PATH, вилки и выполняет запрошенную программу. Он также включает в себя конвейеры, последовательности и параллельные программы (с использованием ;, | и &), а также некоторое перенаправление (используя > и <).

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

Запуск программ из оболочки, перенаправление stderr в файл журнала и т.д. это хорошо. Сделайте это в оболочке.

Почти все остальное можно сделать более эффективно и яснее, чем Python script.

Вам нужны оба. Однако вы никогда не должны писать script с if-операторами или циклами на традиционном языке оболочки.

Ответ 3

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

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

Это приводит к тому, что для оптимальной ежедневной производительности вам требуется shell-скриптинг, но вы должны использовать его в основном для сценариев throwaway и использовать python всюду.

Ответ 4

С помощью сценариев оболочки, которые вы не можете сделать с python, вы ничего не можете сделать. Большое преимущество сценариев оболочки заключается в том, что вы используете те же команды, что и при использовании оболочки, поэтому, если вы являетесь тяжелым пользователем оболочки, сценарий оболочки в какой-то момент станет очень быстрым и простым способом автоматизации работы вашей оболочки.

Мне также легче работать с трубами данных в сценариях оболочки, чем в python, хотя это абсолютно выполнимо с python.

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

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

Ответ 5

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

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

плюс: выучив язык, вы можете экстравагантно отбросить его ограничения с позиции полного знания и знакомства. это, вероятно, не заставит вас заложить, но может заработать вам пиво у ваших сверстников!

Ответ 6

Я согласен с большинством предыдущих ответов. Я рассматриваю команды оболочки, наиболее подходящие для задач, ориентированных на файловую систему (копирование и перемещение файлов, grep и т.д.). На мой взгляд, Shell лучше, если вам нужно читать и записывать в файл, поскольку одно перенаправление >>file.txt добавляется к файлу мгновенно, вместо необходимости, скажем, file=open('file.txt','a'); file.write() и т.д.

В настоящее время для моего личного использования я смешиваю оба, создавая python script и вызывая os.system('command') или os.popen('command') каждый раз, когда какое-либо действие проще в оболочке, чем в python.

Ответ 7

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

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

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

Ответ 8

Еще одна вещь, которую следует учитывать при выборе сценариев оболочки Python - это версия Python, которая будет запущена на целевых компьютерах. RHEL5 (чтобы назвать один) будет длиться долгое время. RHEL5 застрял с Python 2.4. Есть много хороших библиотек, которые зависят от функциональности, добавленной к Python после 2.4.