Инструменты пользователя

Инструменты сайта


igor:practicum_po_napisaniju_shell_scripts

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
igor:practicum_po_napisaniju_shell_scripts [2017/09/13 01:24] – [Эксперимент N2: условный оператор] igorigor:practicum_po_napisaniju_shell_scripts [2019/08/11 20:16] (текущий) – [Для чего нужно овладевать технологией написания сценариев?] igor
Строка 19: Строка 19:
 Готовую программу, если нет исходного кода, невозможно изменить - только писать заново с чистого листа. Скрипт же представляет собой текстовый файл (по виду и по сути близкий к исходному тексту программы), который легко может быть прочитан и понят человеком. Ну а если можно прочитать, то отчего бы не попробовать написать? То есть если скрипт, написанный когда-то давно (и возможно не нами), перестает нас удовлетворять, нетрудно будет разобраться, что там к чему, и что-то переписать, и после этого он сразу готов к работе - от хлопот с компиляцией и линкованием мы свободны, и никакого специального ПО не нужно (а оболочка у нас по-любому имеется). \\ Готовую программу, если нет исходного кода, невозможно изменить - только писать заново с чистого листа. Скрипт же представляет собой текстовый файл (по виду и по сути близкий к исходному тексту программы), который легко может быть прочитан и понят человеком. Ну а если можно прочитать, то отчего бы не попробовать написать? То есть если скрипт, написанный когда-то давно (и возможно не нами), перестает нас удовлетворять, нетрудно будет разобраться, что там к чему, и что-то переписать, и после этого он сразу готов к работе - от хлопот с компиляцией и линкованием мы свободны, и никакого специального ПО не нужно (а оболочка у нас по-любому имеется). \\
 Короче, освоить технологию написания скриптов несколько проще, чем настоящее программирование. \\ Короче, освоить технологию написания скриптов несколько проще, чем настоящее программирование. \\
-А недостатки? - А наши недостатки, как известно, - продолжение наших достоинств. В наше время весь компьютерный мир наводнен тысячами полуграмотных сисадминов-эникейщиков, которые научились нажимать мышкой на кнопку "Продолжить" и теперь считают себя крутыми IT-специалистами. Доверь им написать скрипт - они вам такого понапишут - мало не покажется. А чтобы в такие ситуации не попадать, лучше освоить скриптизацию самостоятльно. Для этого и предлагаю вам мой сегодняшний опус. \\+А недостатки? - А наши недостатки, как известно, - продолжение наших достоинств. В наше время весь компьютерный мир наводнен тысячами полуграмотных сисадминов-эникейщиков, которые научились нажимать мышкой на кнопку "Продолжить" и теперь считают себя крутыми IT-специалистами. Доверь им написать скрипт - они вам такого понапишут - мало не покажется. А чтобы в такие ситуации не попадать, лучше освоить скриптизацию самостоятльно. \\
 Если вы ничего не знаете о сценариях оболочки, то для начала рекомендую заглянуть вот сюда: \\ Если вы ничего не знаете о сценариях оболочки, то для начала рекомендую заглянуть вот сюда: \\
 https://losst.ru/napisanie-skriptov-na-bash \\ https://losst.ru/napisanie-skriptov-na-bash \\
-Статья полезная, но минус в том, что не каждый читатель в состоянии понять, для чего по жизни нужны эти "Hello world". Поэтому у меня возникла идея дополнить ее, приблизить читателя "к земле". В результате получился+https://vk.com/@nuancesprog-funkcionalnye-i-gibkie-shell-skripty \\ 
 +Статьи полезные, но их минус в том, что не каждый читатель в состоянии понять, для чего по жизни нужны эти "Hello world". Поэтому у меня возникла идея дополнить ее, приблизить читателя "к земле". В результате получился
 небольшой практикум, который я и предлагаю вашему вниманию сегодня. \\ \\ небольшой практикум, который я и предлагаю вашему вниманию сегодня. \\ \\
  
Строка 122: Строка 123:
 done//** \\ \\ done//** \\ \\
 Вывше я вам рассказывал про переменные, имена которых начинаются с буквы, а предваряются знаком $. Здесь у нас знак $, за которым, вместо ожидаемого имени переменной, видим просто 1 - на имя переменной никак не похоже. И главное, мы сразу используем это имя в выражении, не присвоив переменной никакого значения - это как вообще??? Выше я говорил о существовании специфических переменных - и вот теперь мы одну из них встречаем вживую. Это, собственно, и есть параметр командной строки, а всего в этом скрипте их три. \\ \\ Вывше я вам рассказывал про переменные, имена которых начинаются с буквы, а предваряются знаком $. Здесь у нас знак $, за которым, вместо ожидаемого имени переменной, видим просто 1 - на имя переменной никак не похоже. И главное, мы сразу используем это имя в выражении, не присвоив переменной никакого значения - это как вообще??? Выше я говорил о существовании специфических переменных - и вот теперь мы одну из них встречаем вживую. Это, собственно, и есть параметр командной строки, а всего в этом скрипте их три. \\ \\
-==== Эксперимент N4: переменные окружения====+==== Эксперимент N4: переменные окружения ====
 На написание этого скрипта меня вдохновил пример MacOS. Там, если к компьютеру подключаешь фотоаппарат (или флэшку с фотографиями), фотографии с него автоматически перекачиваются в компьютер. Я не разобрался, является ли эта фича свойством MacOS или это чья-то самодельная хитрушка, но понял: я, Вань, такую же хочу, но с перламутровыми пуговицами... \\ На написание этого скрипта меня вдохновил пример MacOS. Там, если к компьютеру подключаешь фотоаппарат (или флэшку с фотографиями), фотографии с него автоматически перекачиваются в компьютер. Я не разобрался, является ли эта фича свойством MacOS или это чья-то самодельная хитрушка, но понял: я, Вань, такую же хочу, но с перламутровыми пуговицами... \\
 Я, однако, не стал слепо копировать все, что видел в MacOS. В частности, мне совсем ни к чему перекачивать в компьютер все фотки, найденные на любом носителе: мне надо это делать только, если это флэшка именно с фотоаппарата. Фотоаппарат, как мы знаем, записывает снимки в определенный каталог на карте памяти (обычно подкаталог каталога DCIM). Я хочу те снимки, которые успешно перекачаны в компьютер (в каталог /home/igor/foto-today-camera), сохранить на карте памяти, но переместить в находящийся на ней же каталог-дублер (THISYEAR, который я по окончании года переименую, например, в 2016), чтобы в следующий раз знать, какие снимки новые, а какие уже есть в компьютере. \\ Я, однако, не стал слепо копировать все, что видел в MacOS. В частности, мне совсем ни к чему перекачивать в компьютер все фотки, найденные на любом носителе: мне надо это делать только, если это флэшка именно с фотоаппарата. Фотоаппарат, как мы знаем, записывает снимки в определенный каталог на карте памяти (обычно подкаталог каталога DCIM). Я хочу те снимки, которые успешно перекачаны в компьютер (в каталог /home/igor/foto-today-camera), сохранить на карте памяти, но переместить в находящийся на ней же каталог-дублер (THISYEAR, который я по окончании года переименую, например, в 2016), чтобы в следующий раз знать, какие снимки новые, а какие уже есть в компьютере. \\
Строка 165: Строка 166:
 Окружение, или среда (англ. environment), так же как и командная строка с параметрамии, - нструмент влияния на поведение программ, имеющийся во многих ОС (в т. ч. в DOS и Windows).  Окружение, или среда (англ. environment), так же как и командная строка с параметрамии, - нструмент влияния на поведение программ, имеющийся во многих ОС (в т. ч. в DOS и Windows). 
 Каждый процесс в такой ОС "работает в своем окружении" (в своей среде). Если "родительский" процесс (в нашем случае udev) порождает "дочерний" процесс (в нашем случае shellmount), то он формирует для дочернего процесса определенное окружение. Окружение нашего скрипта содержит порядка 20 переменных, описывающих носитель данных, с которым наш скрипт должен работать. Из этого набора переменных мы используем ID_FS_LABEL ("метку тома", "метку диска"), ID_FS_UUID (уникальный идентификатор файловой системы) и DEVNAME (имя файла-устройства, под которым наш носитель зарегистрирован в каталоге /dev и которое необходимо для осуществления монтирования). \\ Каждый процесс в такой ОС "работает в своем окружении" (в своей среде). Если "родительский" процесс (в нашем случае udev) порождает "дочерний" процесс (в нашем случае shellmount), то он формирует для дочернего процесса определенное окружение. Окружение нашего скрипта содержит порядка 20 переменных, описывающих носитель данных, с которым наш скрипт должен работать. Из этого набора переменных мы используем ID_FS_LABEL ("метку тома", "метку диска"), ID_FS_UUID (уникальный идентификатор файловой системы) и DEVNAME (имя файла-устройства, под которым наш носитель зарегистрирован в каталоге /dev и которое необходимо для осуществления монтирования). \\
-=== Совет от седого компьютерного волка===+=== Совет от седого компьютерного волка ===
 Скрипт, который мы здесь рассмотрели, на самом деле представляет собой совсем несложную программу. Не сравнить с АСУ производством, которую я разрабатывал лет 15 назад. Однако на примере этого скрипта я хочу показать вам один прием программирования, который не только придает нашему творению некую простую "красоту", но и, возможно, избавит нас от определенного гемора потом, если мы захотим что-то в этом скрипте переделать. Я стараюсь все операции по присвоению значения некоторой переменной собрать "в кучку" в одном месте текста, а затем использовать эту переменную как можно скорее. Например, в первом пункте мы занимаемся только тем, что присваиваем значение переменной secretword, и это значение окончательно, а используем его во втором пункте и больше нигде.  Скрипт, который мы здесь рассмотрели, на самом деле представляет собой совсем несложную программу. Не сравнить с АСУ производством, которую я разрабатывал лет 15 назад. Однако на примере этого скрипта я хочу показать вам один прием программирования, который не только придает нашему творению некую простую "красоту", но и, возможно, избавит нас от определенного гемора потом, если мы захотим что-то в этом скрипте переделать. Я стараюсь все операции по присвоению значения некоторой переменной собрать "в кучку" в одном месте текста, а затем использовать эту переменную как можно скорее. Например, в первом пункте мы занимаемся только тем, что присваиваем значение переменной secretword, и это значение окончательно, а используем его во втором пункте и больше нигде. 
 Во втором пункте мы  присваиваем значение переменной dirname на основе secretword, и это значение опять-таки окончательно и используется в следующем пункте... Таким образом данные как бы передаются от одной переменной к другой по эстафете: \\ Во втором пункте мы  присваиваем значение переменной dirname на основе secretword, и это значение опять-таки окончательно и используется в следующем пункте... Таким образом данные как бы передаются от одной переменной к другой по эстафете: \\
igor/practicum_po_napisaniju_shell_scripts.1505255045.txt.bz2 · Последнее изменение: 2017/09/13 01:24 — igor