Подтвердить что ты не робот

Почему я должен изучать программирование оболочки?

Почему я должен изучать Shell Programming вообще? Что можно сделать с ним в реальном мире? Не могли бы вы показать мне некоторые мощные вещи, которые можно сделать с ним или какие-то специальные функции, чтобы убедить меня, что я должен начать изучать программирование оболочки прямо сейчас?

4b9b3361

Ответ 1

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

Вот пример того, кому нужно было переименовать ~ 750 файлов на основе другого файла в том же каталоге. Это было выполнено с помощью 3 строк сценариев оболочки. Чтобы получить еще много примеров, просто найдите вопросы с тегами [bash], [sed] или [awk].

Когда кто-то просит меня показать им классный пример "программирования оболочки", я всегда показываю им этот awk-1-liner (возможно, даже 1-worder?). Он будет фильтровать список, чтобы показывать только уникальные значения без изменения исходного порядка. Это важно, потому что большинство других решений требуют, чтобы вы сначала отсортировали список, который разрушает исходный порядок.

$ echo -e "apple\npear\napple\nbanana\nmango\npear\nbanana" | awk '!a[$0]++'
apple
pear
banana
mango

Объяснение команды awk

Невозможно сортировать уникальную магию с помощью !a[$0]++. Поскольку awk поддерживает ассоциативные массивы, он использует текущую запись (aka line) $0 как ключ к массиву a[]. Если этот ключ ранее не был замечен, a[$0] оценивает значение 0 (ноль), которое является значением awk по умолчанию для неустановленных индексов. Затем мы отрицаем это значение, чтобы вернуть TRUE в первое вхождение этого ключа. a[$0] затем увеличивается, так что последующие удары по этому ключу возвращаются FALSE, и поэтому значения повторения никогда не печатаются. Мы также используем тот факт, что awk будет по умолчанию print $0 (распечатать текущую запись/строку), если выражение возвращает TRUE и не указано { commands }.

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

Ответ 2

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

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

Другая полезная вещь заключается в том, что она научит вас правильно использовать вашу командную строку. Вы не можете делать все с помощью инструментов (например, cp -r foo bar) или простого подталкивания (например, rm *.o); даже что-то простое, как массовое переименование, потребует цикл. И оболочка - это самый простой и удобный инструмент для такого рода работ.

Ответ 3

Мне нужен будильник на днях.

sleep 20m && madplay song.mp3

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

Ответ 4

Первое, что большинство людей будет использовать для сценариев оболочки, - это автоматизация простой задачи, например резервных копий. Мой первый script просто играл с Rsync. Затем называется script с cron.

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

Ответ 5

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

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

Ответ 6

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

Прагматический программист Хант и Томас подробно обсуждают это.