Настройка и работа в Linux
adb5321d

Почему так легко написать неправильную программу


Как известно, язык shell (впрочем, как многие другие языки, скажем, тот же C) достаточно своенравен и требует от программиста понимания его "духа". Несколько лет назад автору довелось провести занятие по программированию на shell. Слушатели были настроены крайне самоуверенно и категорически отказывались выполнять упражнения, утверждая, что упражнения эти абсолютно банальны. Однако после того, им было предложено описать результат выполнения следующих примеров:

if 0 then echo aaaa fi if 1 then echo bbbb fi if [0] then echo cccc fi if [1] then echo dddd fi

выяснилось, что даже на таком простом уровне shell владели совсем немногие (а можете ли описать результат вы?).

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

  • Как удалить все файлы в текущем каталоге?
  • Учли ли вы, что в этом каталоге могут быть "чужие"... файлы?
  • Да, да, я догадываюсь, что у вас есть права суперпользователя. Вам их достаточно?
  • Вы написали "rm *"? Вспомните, что в каталоге могут содержаться подкаталоги.
  • Вы исправили команду на "rm -r *"? Но в каталоге могут быть файлы, имя которых начинается с точки.
  • Вы остановились на "rm -r *.*"? Думаю, вас в полной мере позабавила диагностика о попытке удалить вышележащий каталог. Не был ли это корневой каталог? Сердце екнуло? Да целы ваши данные ... скорее всего.
  • Вы уже вспомнили о том, что в каталоге могут быть файлы с именем "-r" или "-f"?
  • Допускаете ли вы, что в текущем каталоге может быть несколько тысяч файлов?
  • Вы уже учли, что имя файла может содержать самые разнообразные символы, в частности, переход на следующую строку?
  • Сколько уровней вложенности каталогов "по зубам" вашему решению – 400-500 каталогов не слабо?
  • Подумайте и скажите, какую еще свинью (список выше не полон) может подложить вам автор?
  • Согласны ли вы, что правильной программы не существует?
  • С удовольствием познакомлюсь со всевозможными решениями данной задачи.



    Содержание раздела