Я несколько раз пытался изучить сценарии оболочки (bash), но меня оттолкнул синтаксис. Затем я нашел Python и смог сделать большинство вещей, которые скрипт оболочки может делать в Python. Сейчас я не уверен, стоит ли мне больше тратить свое время на изучение сценариев оболочки. Итак, я хочу спросить:
Каковы сильные стороны сценариев оболочки, которые делают его незаменимым инструментом по сравнению с Python?
Я не являюсь системным администратором по профессии, но меня интересует настройка систем Linux для домашних пользователей, поэтому я думаю, что изучение сценариев оболочки может стать необходимым.
bash
оболочка не является универсальной для всех дистрибутивов Linux, в частности для встроенных систем и других, на которыхbusybox
выполняется исполняемый файл. Сценарии, нацеленные на саму оболочку Bourne, с которойbash
имеет обратную совместимость, будут работать на всех POSIX-совместимых системах, однако этот язык гораздо более ограничен, чем тот, который реализован вbash
.«Какие сильные стороны сценариев оболочки делают их незаменимым инструментом по сравнению с Python?»
Оболочка не обязательна. Как вы думаете, почему их так много? bash, tcsh, csh, sh и т. д. и т. д.,
Python - это оболочка. Не тот, который вы бы использовали для выполнения всех команд, но для написания сценариев он идеален.
Python - более или менее стандартная часть всех дистрибутивов Linux.
Более традиционные снаряды делают слишком много вещей.
У них есть удобный пользовательский интерфейс для выполнения команд. Это включает однострочные команды, в которых оболочка ищет ваш PATH, разветвляет и запускает запрошенную программу. Она также включает в себя трубопроводы, последовательности и параллельных программ ( с использованием
;
,|
а&
), а также некоторые перенаправления ( с помощью>
и<
).У них есть жалкие маленькие возможности, подобные языку программирования, для запуска скриптов. Этот язык довольно сложен в использовании и крайне неэффективен. Большинство операторов этого языка требуют разветвления одного или нескольких дополнительных процессов, тратя впустую время и память.
Запуск программ из оболочки, перенаправление stderr в файл журнала и тому подобное - это хорошо. Сделайте это в оболочке.
Почти все остальное можно сделать более эффективно и понятно с помощью скрипта Python.
Вам нужно и то, и другое . Однако никогда не следует писать сценарий с операторами if или циклами на традиционном языке оболочки.
источник
if
оператор оболочки часто включает запускtest
программы. Оболочка - убогий язык программирования во всех отношениях.bash
по крайней мере) имеют встроенные средства для обработки принятия решений (например,test
являютсяbash
встроенными в дополнение к более универсальным конструкциям). У него, безусловно, есть свои слабые стороны, но также и свои сильные стороны. Это также стоит изучить подробно, потому что это совсем другая парадигма, чем другие типы языков.cat "$1" | ssh "$2" "cat - >\"$1\""
родилсяscp
. Они знали, как лучше всего его спроектировать, потому что уже использовали его.Оболочка делает общие и простые действия действительно простыми за счет того, что более сложные вещи становятся намного сложнее.
Как правило, небольшой сценарий оболочки будет короче и проще, чем соответствующая программа на Python, но программа на языке Python будет склонна изящно принимать изменения, тогда как сценарий оболочки будет становиться все менее и менее обслуживаемым по мере добавления кода.
Это приводит к тому, что для оптимальной повседневной производительности вам нужны сценарии оболочки, но вы должны использовать его в основном для одноразовых сценариев и везде использовать python.
источник
Нет ничего, что можно сделать со сценариями оболочки, чего нельзя было бы сделать с python. Большим преимуществом сценариев оболочки является то, что вы используете те же команды, что и при использовании оболочки, поэтому, если вы интенсивный пользователь оболочки, сценарии оболочки в какой-то момент станут очень быстрым и простым способом автоматизировать работу оболочки. .
Мне также легче работать с конвейерами данных в сценариях оболочки, чем в python, хотя это абсолютно выполнимо с python.
И, наконец, вам не нужно запускать дополнительный интерпретатор для запуска сценариев оболочки, что дает вам очень небольшое, но иногда заметное преимущество в скорости и использовании памяти.
Но опять же, сценарии Python намного легче поддерживать, поэтому я пытаюсь перейти с больших уродливых сценариев оболочки на сценарии Python именно по этой причине. С Python также проще выполнять обработку исключений и обеспечивать контроль качества.
источник
не нужно изучать сценарии оболочки, как показывают все предыдущие ответы; но обучение никогда не бывает плохим. это действительно вопрос личных приоритетов. кому-то очень трудно сказать вам, что стоит вашего времени, а что нет.
большинство программистов обнаруживают, что изучение новых языков с каждым разом становится все легче. (то же самое можно сказать и о естественных языках), и чем раньше вы начнете, тем лучше.
плюс: изучение языка позволяет вам экстравагантно снимать его ограничения с позиции полного знания и знакомства. это, вероятно, не приведет вас к сексу, но может принести вам пиво от ваших сверстников!
источник
Я согласен с большинством предыдущих ответов. Я считаю команды оболочки наиболее подходящими для выполнения задач, ориентированных на файловую систему (копирование и перемещение файлов, grep и т. Д.). На мой взгляд, Shell лучше, если вам нужно читать и писать в файл, поскольку одно
>>file.txt
перенаправление добавляется к файлу мгновенно, вместо того, чтобы, скажем,file=open('file.txt','a'); file.write()
и т. Д.В настоящее время для личного использования я смешиваю оба, создавая скрипт python и вызывая os.system ('command') или os.popen ('command') каждый раз, когда какое-либо действие в оболочке проще, чем в python.
источник
Оболочка доступна везде. Если вы придерживаетесь относительно базового набора портативных функций, ваши сценарии могут работать на сотовых телефонах, беспроводных маршрутизаторах, DVR, нетбуках, рабочих станциях, больших железных серверах и т. Д. Python не обязательно входит в стандартную комплектацию многих систем, и в зависимости от среды его может быть сложно установить.
Изучение некоторых сценариев оболочки также может помочь вам изучить некоторые приемы командной строки, поскольку командная строка - это, в общем, оболочка. Это также хорошо для того, чтобы взять довольно длинную и сложную командную строку и преобразовать ее в более общий сценарий после того, как вы поймете, что она вам еще понадобится.
Оболочка также имеет несколько довольно мощных функций; Насколько я знаю, конвейеры - это действительно интересная управляющая конструкция, которая присуща только оболочке.
источник
Еще одна вещь, которую следует учитывать при выборе сценариев оболочки Python, - это версия Python, которая будет работать на целевых машинах. RHEL5 (чтобы назвать его) будет существовать долгое время. RHEL5 застрял с Python 2.4. Есть много хороших библиотек, которые зависят от функциональности, добавленной в Python post-2.4.
источник