Насколько полезно/сложно было бы мне изучить скрипты linux shell? Альтернативные рекомендации?

Я отчаянно нуждаюсь в советах.

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

Вся моя школьная работа научила меня многому об информатике, но немного о практической программировании. Хотя у меня много мотивации, у меня просто нет свободного времени, чтобы позволить мне забрать побочные проекты. Это меня расстраивает по двум причинам: 1) я действительно очень увлечен полем и 2) я понимаю, что многие работодатели любят видеть студентов с некоторым опытом вне школы.

Итак, у меня недавно появилась идея: что, если я должен сделать Linux своей основной ОС, но ограничить себя как можно больше терминалом, пытаясь естественным образом (с помощью google) ознакомиться с командной строкой и, надеюсь, постепенно выбирайте сценарии оболочки, используя онлайн-учебники.

Как вы думаете, насколько это выгодно для начинающего программиста? Насколько это реально? Есть ли у вас какие-либо другие предложения по небольшим проектам, которые студент с едва ли свободным временем может забрать за пределами школы?

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

Ответ 1

Звучит как прекрасный план. Некоторые предложения:

  • Научитесь автоматизировать все, что сможете. Сделайте это привычкой. Если вы делаете что-то большее, чем пару раз, поместите его в script. Это не просто чтобы не печатать, а документировать процесс. Улучшайте свои скрипты, когда заметите проблемы. Поделитесь своими скриптами, когда это необходимо.

  • Узнайте о мощности конвейерной обработки. Откройте цель команды xargs. Перезапишите стандартную утилиту командной строки, например grep или sort на выбранном вами языке. (Я частично отношусь к Perl, но это почти обманывает. -)

  • Настройте свой файл .bashrc. Знайте, какие настройки вам нравятся и какие из них не работают для вас.

  • Используйте ksh вместо bash для скриптов. Существует не так много различий, но ksh имеет несколько дополнительных функций, которые очень приятно иметь. Однако я предпочитаю bash для интерактивных оболочек.


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

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

Теперь, чтобы различать наши операции и тестирование, мы используем две разные учетные записи. Поэтому, прежде чем вводить систему в эксплуатацию, мы очищаем определенные файлы, созданные тестовой учетной записью. В основном это двухэтапный процесс:

  • Найти все файлы, созданные пользователем тестирования.

  • Удалите их.

Думаю, мне понадобится минута или две, чтобы написать код, чтобы сделать это на Perl и еще пару минут, чтобы проверить его. Это простая работа. Я даже не уверен, как это сделать на C/С++. Я думаю, вы начнете с stat корневого каталога.

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

$ find /data -user test | xargs rm -rf

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

Теперь, если вы не работаете в среде UNIXy, возможно, есть набор инструментов, предназначенный для такого рода вещей. (Я не эксперт, но в Windows я, вероятно, запустил поиск, чтобы получить все файлы в одном окне, выбрать все и удалить. Очень легко, но я не знаю, как его автоматизировать.) Но если вы планируете найти работу в мире UNIX/Linux, вы должны быть знакомы с командной строкой, чтобы вы не занимали 5 минут, чтобы выполнить 30-секундное задание.

Ответ 2

Сценарии оболочки в основном бесполезны. Я парень Linux, и я могу написать оболочку script, если это необходимо, но любая задача, которая обычно нуждается в оболочке script, может быть выполнена более похожим на программиста способом в Python. Если вам нужно много скриптов, вы можете отчислить часть своего более полезного кода на классы, которые могут быть разделены и использованы несколькими сценариями. Скрипты Python будут работать на порядки быстрее, чем чистые копии оболочки. Я считаю, что синтаксис оболочки script (Bash, например) не поддерживает приличные структуры данных. Даже Perl является улучшением по сравнению с чистыми сценариями оболочки.

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

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

Ответ 3

Сделайте то, что вас интересует, - если вы запускаете Linux и shell-скрипты - запустите с ним. Хотя в наши дни есть много способов научиться кодировать Windows или OS X или любую другую операционную систему. Вы можете скачать любое из следующих бесплатно на нескольких платформах... PHP, Ruby, SQL Server, Oracle, Java, C, С#.... и Google (и, конечно же, SO) имеют все, что вам нужно, с точки зрения документации для любой проблемы, с которой вы сталкиваетесь.

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

Ответ 4

Хорошо, с хорошим пониманием Информатики, так называемое "практическое программирование" не так сложно изучать. Это не значит, что учиться не так много; однако, овладение информатикой подразумевает, по сути, что изучение различных языков программирования не будет очень сложным. Вы уже изучили курс операционной системы? Если нет, вы должны забрать так называемую книгу динозавров и начать ее изучать. Bash программирование очень простое. Вы должны изучать языки, такие как C и так далее; программирование оболочки довольно тривиально по сравнению с ними. Хотя, важно учиться. Если вы не принимали операционные системы, то, безусловно, вы будете частью своей степени, если ваша программа стоит соли. В этом курсе вы должны пройти множество упражнений, и даже реализация вашей собственной простой оболочки - очень распространенный вводный проект.

В любом случае, обязательно начните изучать Linux. Найдите классический HowTos в Bash, программировании ядра и т.д. Насколько реалистично... Я ожидаю, что все ученики CS будут понимать все эти понятия строго. Я не позволил бы студенту получить его или ее степень без этого!

Ответ 5

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

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

HTH

Ответ 6

Почему вы хотите потратить много времени на изучение сценариев оболочки? Когда-то я был мастером этого и писал целые системы с sh скриптами, но это было до perl и других языков сценариев. sh - ужасный язык, который поощряет вредные привычки и не пользуется спросом. Изучите только минимальные основы - что вы можете получить из одного или двух прочитанных страниц sh man. Затем изучите что-то полезное - perl и python - хорошие ставки для кого-то с ограниченными ресурсами времени.

Ответ 7

Я бы определенно предложил вам узнать, по крайней мере, основы C/С++, чтобы понять, как работают компьютеры.

Вы также должны изучить основы С# или Java, чтобы узнать об управляемом мире и таких понятиях, как сбор мусора, байт-код/​​IL, компиляция jit.

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

Бросьте Rails, PHP или ASP.NET, чтобы получить представление о веб-программировании и таких понятиях, как MVC.

Читайте об модульном тестировании, разработке, основанном на тестах, введении/инверсии зависимостей управления ORM. Устройтесь в мире контроля источника и непрерывной интеграции. По крайней мере, проверяйте ключевые слова Википедии, такие как гибкий, схваченный, худой и канбан.

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

Это все очень важные аспекты современного поля программирования.

Где именно Bash вписывается во все это, я не уверен. Это может быть очень полезным инструментом и может сделать ваши повседневные задачи более легкими, но так много других инструментов. Тем не менее, я не обязательно думаю, что Bash будет полезно научить вас многому современному программированию и подготовить вас к работе в качестве инженера-программиста.

И снова я лично мало знаю о Bash, поэтому, возможно, я совершенно не прав...

Ответ 8

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

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

Скрипты

sh ужасно выглядят настолько, что вам они действительно не нужны, кроме случаев, когда вы действительно действительно нуждаетесь в них.

Ответ 9

Я очень рекомендую perl всем, кто использует Linux как инструмент для автоматизации и облегчает жизнь. С perl вы можете писать быстрые и простые программы, которые на самом деле будут выполнять реальную задачу за небольшую сумму времени. Python - хорошая альтернатива и намного лучше обрабатывает объекты, хотя он уклоняется от стиля C, и я предполагаю, что с большим количеством вашего опыта.

Ответ 10

если вы собираетесь застрять в оболочке linux весь день... определенно посвятите неделю или месяц вашей жизни bash. серьезно, это просто то, что нужно каждому жесткому физическому лицу Linux... независимо от того, что кто-то говорит.... после того, как вы вложили это время, это поможет вам понять скрипты init и многое другое, что вы сможете сделать быстро с помощью script. Его серьезный навык стоит инвестировать неделю или месяц вашего времени в... Вы никогда не пожалеете об этом.

После этого небольшого введения вы позволили себе... пойдите и изучите правильный lanaguage, такой как python или pearl..spend годы, устраивающие язык по вашему выбору... но тем временем для быстрых и противных сценариев и понимания загрузочные файлы операционной системы Linux и т.д. Ваша неделя обучения bash всегда будет с вами

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

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