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

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


igor:practicum_po_napisaniju_shell_scripts

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версияСледующая версия справа и слева
igor:practicum_po_napisaniju_shell_scripts [2017/09/13 01:24] – [Эксперимент N2: условный оператор] igorigor:practicum_po_napisaniju_shell_scripts [2017/09/13 01:30] – [Эксперимент N4: переменные окружения.] igor
Строка 122: Строка 122:
 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: Строка 165:
 Окружение, или среда (англ. 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.txt · Последнее изменение: 2019/08/11 20:16 — igor