Правильная постановка задачи при работе с linux решает 50% задачи.
Вот например, недавно к сообществу по linux обратился новичек с заданием "для первого курса":
Дали задание, с первого взгляда подумал простое, а оказалось что непонятно как подступиться:
Написать надо shell-скрипт с использованием стандартных средств системы:
Написать программу формирования из строк текста столбцов, расположенных рядом на одной странице. Параметры: ширина столбцов в словах, расстояние между первыми символами соседних столбцов в символах.
И вот что ответил один из "сторожилов" форума:
непонятно, как подступиться, имхо, прежде всего из-за не совсем ясной формулировки условий. если начать разбирать по деталям, то станет понятнее, что именно делать - и какими инструментами
сохраняются ли пробелы при разбиении текста на столбцы, или слова пишутся в столбцах слитно? разрываются ли слова, не влезающие в столбец, или переносятся в следующий? как обрабатываются слова, которые длиннее заданной длины столбца? и так далее...
когда станут ясны ответы на эти вопросы, можно уже писать скрипт. это можно делать по кусочкам. например, сначала скрипт, который убивает все пробелы в строке. затем скрипт, который режет текст на столбцы заданной ширины и печатает их. потом натравливаем второй скрипт на результат первого. это то, что надо? если нет, то исправляем в нужную сторону.
в любом случае, главное - более чётко представлять, что должна делать программа. текущая формулировка не позволяет этого сделать!
хороший приём - создать ДО написания программы набор тестов для проверки её правильности. под тестом понимается пара "заданный входной текст и параметры - ожидаемый результат". надо попросить таких тестов или сделать их самому, согласовав с преподом. на тестах очень полезно будет разобрать различные нестандартные ситуации: очень длинные слова, очень короткие слова, много пробелов, некорректные величины передаваемых программе параметров и т.д. а потом написать прогу, которая эти тесты успешно проходит. сначала самые простые, а потом всё более заковыристые.