Text
                    Учебный модуль
Современное программирование
для школьников
Книга 1
"ОС Linux - командная строка,
утилиты, сценарии"
Саров, 2010-2011
Профессиональный
сертификат в ИТ
НОУДОД
"Школа
информатики "ВЕКТОР++"


№ 1 2 3 4 5 6 7 8 Тема ВАЖНОСТЬ КУРСА, ТВОЯ ЦЕЛЬ, ТВОЕ БУДУЩЕЕ Роль компьютеров в повседневной жизни, их влияние в государственных, корпоративных и индивидуальных приложениях, различные комьюнити, университетские компьютерные специальности, авторитет программистов в обществе, , ВХОДНОЕ ТЕСТИРОВАНИЕ НАСТРОЙКА РАБОЧИХ СТОЛОВ И ТЕРМИНАЛЬНОГО РЕЖИМА 1) настройка рабочего стола GNOME 2) знакомство с содержанием «справки и поддержки»; 3) безмышинная работа руками, команды с использованием горячих клавиш; 4) первые упражнения в командной строке 4) знакомство с редактором текстов (vi); 5) закрепление команд редактора через тренинг. УСТАНОВКА СИСТЕМЫ (каждый получает DVD дистрибутив Ubuntu) 1) установка ОС Linux. ПРОГРАММИРОВАНИЕМ 1) Двойственная природа shell - как оболочка и как язык программирования, команды Linux в оболочке и в скриптах, первые упражнения; 2) программирование ввода-вывода, присваивания, имена и значения переменных, выражения, типы, программирование команд системы; 3) программирования логических операций, упражнения, задачи, вложенный if 4) первые утилиты (утилиты-1) с основными ключами: Is, cd, cp, mv, mkdir, rmdir, chmod, cat, less, date, echo, программирование кавычек, вызов утилит в командной строке и программирование в скриптах. Предварительный ЗАЧЕТ-1 (на командую строку, редактор, первые shell -команды, shell-скрипты, первые утилиты, 15-20 вопросов, микро-упражнений с обязательной проверкой на компьютере, пользоваться любыми источниками, оценки от "А" до "F") АРХИТЕКТУРА Программного Обеспечения (ПО-1) 1) конструкция файловой системы, команды (утилиты) работы с ней, «слои» программного обеспечения (kernel, API, GUI (CLI - как слой внутри GUI)), программирование каталогов и файлов (shell команды-2) 3) программирование циклов, вложенных циклов, позиционных переменных, задачи на НОД, числа Фибоначчи и д.р. 4) утилиты-2, редактирование командной строки, пайпы (cut, paste, head, split, join, tail, sort). АРХИТЕКТУРА Программного Обеспечения (ПО-2) 1) процессы, потоки ввода вывода, перенаправления вода, вывода, ошибок, фоновое исполнение, 4 способа создания файла(top, pstree, ps, », « &,); 2) (УтилитыЗ) процессные, регулярные выражения, grep, find с ключами; 3) задача подсчета файлов разных типов в указанном каталоге с использованием regexp (в том числе в редакторе vi). ПРОГРАММИРОВАНИЕ-2 1) программирование сценариев повышенной сложности (shift - ы, оператор case и проч); 2) подготовка к зачету ЗАЧЕТ-2 (много вопросов и микро-упражнений с самостоятельной проверкой их на компьютере, показывая также умение пользоваться информационными источниками системы) ИТОГО 40 часов Час 1,5 1,5 1,5 14 1,5 9 6 3,5 1,5
Школа информатики "ВЕКТОР+ + " (Уч модуль " ОС Linux - командная строка, утилиты, сценарии") занятие 2-3 уметь учиться, хотеть учиться, любить учиться 1 Первые шаги при работе в системе, настройка Linux 2 I. Введение. Справочные сведение о Linux — Ubuntu 3 Дистрибутив операционной системы (ОС) Linux Ubuntu (в наст. время версия 10.04), поставляется на CD или DVD дис4 ках и без проблем устанавливается самим пользователем. Всего в дистрибутив включено более 30 тыс. пакетов программ раз5 ного 5 назначения. На вышеуказанных носителях имеется от 1200 до примерно 3000 пакетов. Дополнительные пакеты доуста6 навливаются из репозитариев (хранилищ) при подключении к соответствующим Интернет серверам. ("Ubuntu" древнее афри7 канское слово, означающее "человечность, миролюбие ко всем"). (См энциклопедию www.ru.wikipedia.org). 8 Дистрибутив Ubuntu (читать убУнту), обновляется 2 раза в год (в апреле и в октябре) (догадайтесь почему такая 9 нумерация версии дистрибутива и какой номер будет у следующей версии ). Все поставляемое программное обеспе10 чение имеет лицензию СПО - свободного программного обеспечения GPL, бесплатно распространяется спонсором - компанией 11 Canonical Ltd., Англия. Над дистрибутивом постоянно работают несколько тысяч специалистов (программисты, тестировщики, 12 переводчики, художники и др.) по всему миру, основные специалисты располагаются в штаб-квартире в Англии. Основатель 13 компании - известный предприниматель Марк Шаттлворт (Mark Shuttleworth) -Linux-фанат, космический турист №2 на стан14 ции МИР) Ubuntu - один из самых распространенных десктоповых (настольных) дистрибутивов операционной системы Linux. 15 Численность коммьюнити (сообщество пользователей) этого дистрибутива более 10 миллионов человек по всему Миру. Доку16 ментация по нему имеется на нескольких десятков языков. 17 II. Вход в систему и настройка графического интерфейса рабочих столов 18 При входе в систему в компьютерном классе набирать имя, указанное на экране, потом такой же пароль. Впоследствии 19 вы самостоятельно заведете свое имя в системе и тогда поставите себе пароль какой хотите, но не трогать имеющийся. 20 Помнить: прописные и строчные буквы - это разные самостоятельные и независимые значки и 21 такими они воспринимаются системой. 22 (GUI — Graphic User Interface - графический интерфейс пользователя). В отличии от операционных систем известной 23 программистской фирмы ядро ОС Linux не включает в себя графическую среду. Она (среда) выступает как "обычное" прило24 жение. В таком случае понятно, что, у системы Linux может быть несколько графических сред, с которыми связан тот или 25 иной дистрибутив и пользователь выбирает тот вариант дистрибутива, который его больше устраивает по каким-либо причи26 нам. Мы будем работать в графической среде Gnome (Гном). Среда Gnome включает в себя, кроме многого прочего, несколь27 ких рабочих столов (квадратики справа снизу) и по ним можно перемещаться. Такие виртуальные рабочие столы помогают 28 при работе, особенно, когда user запускает несколько программ. 29 Если смотреть на экран, то перед вами вверху и внизу имеются верхняя и соответственно нижняя горизонтальные пане- 30 ли. На верхней расположены три основные меню «Приложеиия», «Переход» и «Система», и также установленные заранее 31 аплеты, отражающие настройки работы рабочих столов и обеспечивающие удобство пользователя (например, аплет переклю32 чения раскладки клавиатуры). Внизу панель, в которую складываются «динамические» аплеты — следы тех программ, кото33 рые вызывает user во время своей работы. 34 Вопросы: 35 1) посмотрите и ознакомьтесь с основными меню на верхней панели, чтобы знать где искать ту или 36 иную функцию в системе. Потренируйтесь, изменяя внешний вид или фон рабочего стола или другие 37 настройки. 38 III Клавишные операции на рабочем столе 39 При входе в систему вы получаете несколько рабочих столов, которые легко переключать и, таким образом, можно 40 легко организовать работу сразу на нескольких столах. Программисты - профи пользуются несколькими рабочими столами, 41 чтобы одни программы запускать на одном столе, другие на другом. При этом, конечно, надо помнить, где с чем работаешь. 42 Проверьте переход по рабочим столам - (клавиши Ctrl+Alt+вправо/влево). 43 Вопросы: 44 1) перейдите с помощью клавиш на самый правый рабочий стол и в верхнем меню в закладке "система" 45 прочитайте описание "О среде Gnome" 46 2) с помощью того же меню запустите справку "о системе ubuntu" и прочитайте её, особенно в чем 47 отличие этой системы от других Linux систем (прочитать дома и рассказать) 48 Внимание - (стараться меньше трогать мышь, все делать руками, запоминать сочетание клавиш) 49 Через клавиши Alt+F1 войти в верхнюю панель, перейти правой левой стрелками на меню Система-> параметры -> мо50 ниторы и настроить разрешение дисплея на 1024*768 или 1280*1024 или 1440*990 (смотря какой перед вами монитор) По51 том через ту же верхнюю панель добавить на панель «Индикатор Раскладок Клавиатуры». Будет отображаться Рус/США, 52 а переход на другую раскладку по умолчанию с помощью клавиш Alt+Shift. Комбинацию перехода раскладок клавиатуры 53 можно менять через Система-->параметры->клавиатура. 54 IV Создание и настройка терминального окна и закладок в нем 55 Терминал создается через клавиши Ctrl+Alt+T. Далее клавишами ALT+F10 выйти на полноэкранный режим, по56 том просто F10 и далее по меню Правка->Текущий Профиль и можно подобрать себе цвет фона, цвет и размер шрифта (моно57 ширинного). Закладка в терминале создается клавишами Ctrl+Shift+T и навигация по этим закладкам с помощью клавиш 58 ALT+1, ALT+2 и т.д. 59 ВНИМАНИЕ: (в обозначениях ниже, вместо клавиш Ctrl+какя-то может стоять просто большая С-какая-то, а вместо 60 клавиш Alt+какая-то может стоять большая М-какая-то ,т.к. клавиши ALT еще называют Метаклавишей) 61 Вопросы: 62 1)создайте несколько закладок в терминале и походите по ним, с помощью пальцев рук, а не мышки; 63 2)в одном окне запустите команду ls -las (вывести все файлы текущего каталога), а в другом pwd 64 (распечатать имя текущего каталога). 65 Как читать документацию, сидя за рабочем столом и пользуясь общим справочником
Школа информатики uBEKTOP++" (Уч модуль " ОС Linux - командная строка, утилиты, сценарии") занятие 2-3 уметь учиться, хотеть учиться, любить у 66 Главная клавиша по запуску описания системы - это клавиша F1. Она равносильна последовательности из 67 «Система»-> «справка и поддержка» 68 Для команд по «горячим клавишам читать из меню Система читать "справка и поддержка", следующие разделы; 69 ∞ темы повышенной сложности 70 ∞ использование командной строки 71 VI Как читать документацию через man и help? 72 В терминале перейти с помощью (М+№закладки) на приготовленную Вами закладку и читать документацию командой 73 man имя_команды 74 (man от слова manual - руководство, справочник). Команда 75 man man 76 показывает формат выводимой документации по любой команде. Главное в таком формате - то, что аргументы кома 77 указанные в квадратных скобках, не являются обязательными, и команда, в таком случае, обеспечивает минимальные 78 возможности; однако, чаще всего, для получения необходимого результата, требуется задавать какие-то определенные ключи 79 их надо запомнить. Ключи задаются через знак минус перед аргументом или перед несколькими. 80 man ls 81 вывод списка файлов в текущем (или специально указанном) каталоге основные ключи -1, -a, -s, -R (можно задать ls -las) 82 man cat 83 от слова катенация (склеивание, сцепление), вывод указанного файла/ов на экран 84 cat --help 85 less --help 86 при запуске команды с ключом хелп на экран выводится объяснение работы команды на русском языке. 87 Вопросы: 88 потренируйтесь в терминальном режиме запускать справочную документацию по командам Linux 89 VII Как подключиться к Интернету 90 В Linux отсутствуют вирусы, которые в большинстве случаев "приходят" из Интернета. Один из способов подключения 91 Интернету из ОС Linux такой: 92 Перейти в терминальный режим, и в режиме суперпользователя запустить 93 laptop:~$ sudo pppoeconf 94 После нескольких вопросов и ответов, при которых надо ввести номер договора с провайдером и пароль на вход на с 95 провайдера и соответственно в Интернет. 96 VIII Как доустановить в систему пакеты из дистрибутива (расширение редактора, С-библиотеки и др.) 97 Вы работаете под своим непривилегированным именем и только временно, (когда надо) переходите в режим суперюзера 98 (команда sudo имя команды), и поработав, выходите в "родной" режим. 99 Чтобы добавить нужные пакеты необходимо: 100 1) подключившись к Интернету, запустить менеджер пакетов Синаптик (Система-> 101 Администрирование->менеджер_Synaptic). 102 2) Запустить в левом верхнем углу "Обновление". Признаком прохождения обновления будет новое 4ucj 103 пакетов программ в доступном хранилище (репозитории). Всего, более 30 тысяч пакетов. 104 3) В Synaptic -e (вход по паролю) идете в раздел редакторы (левый столбец), а справа отмечаете (2 раза 105 нажав на пустой квадратик) все команды где есть имя vi (или vim и прочие, похожие). Далее нажать 106 «Применить» и доустановить таким образом отмеченные пакеты. 107 4) Так же можно доустановить другие пакеты, например библиотеки для компилятора языка Си 108 (метить пакеты g++ и g++4.3) из раздела «Средства разработки». 109 IX Команды Linux (утилиты) - полезные программы 110 Так как мы, прежде всего, учимся работать не в графическом интерфейсе, а в интерфейсе командной строки (CLI - 111 command line interface), то надо знать хотя бы основные полезные команды системы Linux (или еще говорят утилиты системы 112 Linux). Всего мы изучаем порядка 30 или чуть более команд, а проверку Ваших знаний по ним будет на зачете. 113 Эти команды предназначены для всевозможных операций : 114 с файлами; 115 с папками - каталогами; 116 с устройствами; 117 когда команда вызывает другую команду; 118 когда команды входят как операторы языка программирования в программу - сценарий . 119 При работе с командами просмотра файлов (например, less имя_просматриваемого_файла) и редактирования файлов 120 выполняются одинаковые во всех случаях внутренние соглашения, их следует запомнить: q (quit) - выход, d - (down) 121 показать пол-экрана вниз, u - (up) пол-экрана вверх, G - (go) переход в конец просматриваемого документа, 1G - 122 начало документа, b (back), f (forward) - экран назад, вперед, (C-g) и др. Для получения «микро»-справки по любой 123 Linux - команде можно смотреть help по ней. Он (help) открывается, когда вы нажимаете: 124 команда -help, т.е. команда и после пробела минус минус хелп. 125 X Домашнее задание 126 Запустить Linux на домашнем компьютере в режиме "живого сиди" (live CD), не устанавливая на жесткий диск. Настроит 127 графическую настольную среду Gnome, terminal, режим командной строки (шрифты, размер экрана, цвета фора/бэк граундов 128 - схемы). Потренироваться на чтение документации, выход на которую через меню "Система". Подключиться к Интернету 129 посмотреть на сайте ru.wikipedia.org определение понятий: - программирование, компьютер, Интернет, операционная система
Школа информатики "ВЕКТОР++" (Уч модуль " ОС Linux - командная строка, утилиты, сценарии") занятие 2-3 уметь учиться, хотеть учиться, любить учиться 1 Установка Linux 2 I Два способа работы с ОС Linux 3 Внимание: 4 устройство CDROM должно быть отмечено в BIOS как первое при за- 5 грузке системы при включении машины 6 1) Вы можете работать в режиме «live CD» (живой диск). В этом случае, система Linux не 7 устанавливается на жесткий диск. Кладёте полученную в классе болванку с системой в 8 сиди-драйв и при появлении первого меню выбираете «Без установки на жесткий 9 диск». 10 Хотя работа компьютера в этом режиме немного замедлится, но, все равно вы получаете 11 полноправный графический режим с возможностью проводить все необходимые настройки 12 и работу. Также вы можете использовать терминальный режим и программировать в нём, 13 но результат записывать на флэшку, а не оставлять в файле на диске. 14 2) Второй способ - установка системы Linux как полноправной системы на жесткий диск в 15 свой раздел. Установка проходит согласно указанным шагам. Всего 7 шагов (см. таблицу). 16 Самым ответственным здесь является не сколько сама установка ОС Linux , сколько подго17 товка места на диске для этой операционной системы. На вашем диске в разделах системы 18 виндовз должно быть достаточного свободного места, чтобы создать два новых раздела. 19 Один - размером 8-10 Гб. под систему, второй - 0,5 -1 Гб. для раздела подкачки (swap). На 20 третьем шаге, обязательно указать «УСТАНОВКА РУЧНАЯ» далее см таблицу. № 1 2 3 4 5 6 7 Шаги установки Выбор языка, клавиатуры Выбор раскладки клавиатуры и про- верка часового пояса„ по умолчанию — "Русская" и "Москва". Выбор (подготовка) раздела (лов) диска для системы и его разметка Установка имени пользователя и его ; пароля Вопрос наследованию имен Установка пакетов Запрос про перезагрузку установленной системы Действия при выборе Стрелками в меню языков установить «русский», продолжить, нажав "Установить Ubuntu на жесткий диск". Оставить по умолчанию, нажать «Forward» Обязательно выбрать установку через "ручную разметку" диска и редактировать строчку с, например, разделом D: (помечен как ntfs файловая система). При этом, поставив курсор на этот раздел, уменьшить его размер (resize), освободив место для новых двух дисков. Далее на пустом месте создать один «маленький» раздел размером до 0,5-1 Гб, под раздел подкачки (swap) и один «большой» размером 8 - 10 Гб под раздел для операционной системы. Пометить его форматирование (пометить квадратик) и поставить тип файловой системы (ext4), нажав галочку и выбрав из меню справа внизу указать точку монтирования — прямой слэш (/) Пользователь имеет имя studentN. Вместо N — ставить номер машины — он напечатан на борту системного блока и монитора. Все машины в компьютерном классе пронумерованы от 0 до 9. И пользователи будут наименоваться соответственно student0, student1 и т.д. до student9. Пароль пользователя также studentN (N, повторяю, у каждого свой) Ничего не вводить, нажать «Forward» СТОП, далее, чтобы не испортить компьютеры в классе НИЧЕГО НЕ ДЕЛАТЬ._ Ждать (основное время установки пакетов системы — минут на 40) Вытащить DVD диск и нажать «Enter» для перезапуска (далее войти как studentN и произвести настройки)
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 3-4 1 Основные команды редактора vi 2 1. Понять, запомнить, научиться применять: 3 Главной программой для программиста кроме компилятора/интерпретатора являет4 ся программа - редактор, в которой программист набирает текст программы на языке про5 граммирования. В системе Linux имеются 2 мощных, и самых популярных редактора - vi 6 (ви) и emacs (имакс). В данном варианте курса мы будем изучать редактор vi. 7 Чтобы написать программу, ее надо набрать в редакторе, потом запустить на выполнение. 8 Если появятся ошибки, снова запустить в редакторе и исправить там ошибки и опять запу9 стать на выполнение, и т.д. Для нас лучше всего иметь несколько терминальных закла10 док. В одной из них запускать готовую программу и смотреть на ошибки, в другой закладке 11 иметь открытый в редакторе файл с текстом программы, и, при исправлении записывать 12 в него изменения, но из редактора не выходить (команда «:w»), чтобы опять исправлять, 13 если и при следующем запуске программы будут опять ошибки. 14 В редакторе vi имеются три режима: 1-й - режим вставки когда набираешь сам 15 текст, 2-й - режим команд - когда специальными буквами-командами изменяешь текст, 16 например, запоминаешь или выводишь из буфера, чтобы скопировать кусок текста из бу17 фера в нужное место, вставляешь пустую строчку, меняешь регистр и пр. 3-й - режим 18 «:»(вертик. двоеточие), явного ввода команд через команду «:», при этом внизу (переход 19 автоматически) на нижней строчке набираешь команды, например - :q! (выход из редак20 тора без записи), :wq (выход из редактора с записью изменений, или поиск в тексте 21 какого-то шаблона, например, чтобы найти место где первый раз встречается слово 22 Microsoft, надо задать /Microsoft и курсор сразу перейдет туда и остановится под буков- 23 кой М. Переход между режимами - клавиша Esc. 24 2. Список основных команд редактора: 25 (внимание, строчные и прописные буквы - это разные команды): 26 (СМ. команду vimtutor). 27 vi имя_файла запуск редактора на редактирование (создание) файла с именем 28 «имя_файла» 29 КОМАНДЫ ВСТАВКИ (ЗАПОМИНАНИЯ, СЛИЯНИЯ) i вставка текста перед текущим местом курсора (переход в режим вставки) I вставка текста с начала текущей строки (на которой стоит курсор) А вставки текста в конце текущей строки О добавление новой пустой строки сверху от текущей и переход в режим «вставка» о добавление новой пустой строки внизу от текущей и переход в режим «вставка» Nyy запомнить в буфер N строк от текущего места; уу -запомнить текущую строку р вывод из буфера сохраненной информации ниже текущей строки (режим команд) P # вывод из буфера сохраненной информации выше текущей строки (режим команд) J # склеивание строк (прицепление к текущей той, что расположена ниже под ней)(режим команд) 30 КОМАНДЫ ПЕРЕХОДА ^ переход на начало текущей строки $ переход в конец строки NG переход на строку с номером N; G (просто, без номера) - переход в конец файла; 31 КОМАНДЫ ЗАМЕНЫ и команда отмены действия предыдущей команды и возвращения к »старому» состоянию перевод символа из строчной в прописную или наоборот(режим команд) R замена одного символа (на него указывает курсор) на один другой (режим команд) повтор предыдущей команды (режим команд) 32 КОМАНДЫ СТИРАНИЯ х стереть символ над курсором (режим команд) хр смена мест двух рядом стоящих символов, курсор стоит под левым (режим команд) dd (delete)CTepeTb текущую строку (строку, на которой стоит курсор) Ndd стереть N строк с текущего места
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 3 D (delete)cTepeTb часть строки от текущего места до конца строки u (undo) отмена действия предыдущей команды 33 КОМАНДЫ ВЫХОДА из РЕДАКТОРА (и режима) Esc выход (переход)из режима вставки в режим команд :wq выход из редактор с сохранением результата :q! выход из редактор (quit) без сохранения результата (без изменения) :w записать (write) измененный файл и не выходить из редактора :w новое_имя# записать изменения в новый фал (или скопировать текущий) 34 КОМАНДЫ ПОИСКА ПО ШАБЛОНУ И ЗАМЕНЫ ПО ШАБЛОНУ 35 /шаблон поиск по всему файлу того, что надо найти (шаблон задавать из 2-4 символов) 36 :s/старое/новое/gp # в текущей строке (где курсор) заменить старое на новое (s от слова 37 substitute) 38 :.,$s/старое/новое/gp от текущего места до конца файла заменить старое на новое (от точки 39 доллара, значит от текущей строки до последней строки - это похоже на регулярные выражения 40 будем проходить позднее), gp - global print печатает сколько произведено замен. 41 :s/^qq/ww/ заменить символы qq в самом начале строки на символы ww («^» указывает на начало 42 строки) 43 :s/$AA/BB/ заменить символы AA в самом конце строки на символы BB («$» указывает на конец странич44 ки) 45 3. Выполнить упр 1. (набить файл в редакторе за минимум нажатий клавиш; совет - 46 больше использовать режим команд, а не режим вставки) 47 Создать файл, например, abc в редакторе vi. Набить 10 строк с максимальным использо48 ванием команд редактора (копирование в буфер, повтор, замена и др.) 00 01 02 03 04 05 06 07 08 09 #сначала через i набить первую строку, потом Esc, курсор тут же 10 11 12 13 14 15 16 17 18 19 #скопировав первую строку в буфер, 9 раз ее выводим (через p) 20 21 22 23 24 25 26 27 28 29 # идем по строке слева и меняем первый символ «R» (0 на 1) 30 31 32 33 34 35 36 37 38 39 # далее направо до нового места и давать предыдущую команд) «.» 40 41 42 43 44 45 46 47 48 49 # при смене строки сначала идет команда «R», потом команда « 50 51 52 53 54 55 56 57 58 59 # так до конца файла 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 49 4. Выполнить упр. 2 50 В редакторе vi сохранить этот файл в другой, например abc2, и отредактировать новый 51 файл так, чтобы поменялись местами строки с 0-й по 9-ю и стали в обратном порядке 52 (вверху должна быть строка с №9, а внизу строка с №0. 53 5. Выполнить упр. 3 54 В редакторе vi заменить строки файла abc так, чтобы правый нижний угол имел значение 55 00, а левый нижний соответственно 09. Соответственно строки должны возрастать снег 56 вверх. В финале самая верхняя строка должна состоять из 99 98 97 и т.д. До 00. Вставлять 57 напрямую символу нельзя, работать в режиме команд по-максимуму. 58 6 Домашнее задание (Повтор команд редактора vi) 59 На домашнем компьютере: 60 1) - повторить п 1-5 (набить файл). 61 2) - вспомнить, назвать записать (ниже, прямо сюда) - какие режимы работы существуют 62 редакторе vi и что делают в каждом из них?
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 5-6 уметь учиться, хотеть учиться, любить учиться 1 Продолжение настроек. Системы счисления, файловая система, командная строка, типы 2 файлов, права доступа 3 I Повтор команд редактора vi 4 Выполнить 1 : Вспомнить, назвать записать - какие режимы работы существуют в редакторе vi и что делают 5 в каждом из них? 6 Команды ввода/добавления (вставки) символов /строк - — 7 Команды копирования в/из буфера символов/ строк - - — 8 Команды перехода по номерам строк/ к нужному месту через шаблон 9 Выполнить 2 (две операции редактором vi): 10 а) Исправить файл .bashrc в домашней директории, 11 Следующей операцией в vi будет добавление новой строки в самом конце файла: 12 PATH=~/bin:$PATH 13 Это делается для того, чтобы ваш домашний каталог «bin» попал в системный путь PATH, чтобы оттуда 14 могли запускаться исполняемые файлы). 15 16 II Системы счисления (из 10-чной в другие системы и обратно) (см калькулятор в «научном» 17 режиме) 18 Знать наизусть как таблицу умножения таблицу степеней числа 2-й от 0 до 10, т.е., например 2**9 = 512 19 Знать почти наизусть двоичное представление десятичных чисел от 0 до 16. го 21 Перевести число 47 из 10-ичной системы в 2-ичную, в 16-ричную и в 8-ричную системы 22 Делим нацело в столбик (углом) число 47, а остатки аккуратно записываем справа от столбика, а потом 23 читаем в обратном порядке. 24 25 26 27 28 29 30 31 Основание Ответ = 2 47 | 1 23 | 1 11 | 1 5 | 1 2 | 0 1 | 1 101111 = 8 47 | 7 5 | 5 * 57 = 16 47 | 15 2 | 2 2F 32 33 III Второй способ перевода 10-ых чисел в 2-чные (47 из 10-ичной в двоичное) 34 смотрим какое максимальное число степени двойки будет близким к 47, но не превосходить его. Это 32 (2 в 35 степени 5). Формируем ответ, записывая тут самую левую единицу ответа. Сразу соображаем, что в ответе у 36 нас будет шестизначное число соответствующим степеням двойки от 5 до 0. Потом в уме вычитаем 32 из 47, 37 получаем 15 и смотрим сначала «умещается» ли в 15 следующая «наша» степень, т. е. 4. Ответ - нет не 38 умещается, т.к 2**4 = 16, а у нас 15. тогда мы в ответ на следующим после первой 1 месте ставим 0. т. е. 39 получились первые 10. Потом опять смотрим какое макс. число степени двойки близкое к 15. это 8 (2 в 3 40 степени). Тогда на третьем месте в ответе ставим 1. В остатке от этого вычитания остается 7. И опять видим, 41 что следующая вторая степень 2 -и подходит 2**2 меньше 7. Опять в ответ ставим 1. Потом в очередной раз 42 вычитая из 7 4 смотрим подходит ли ответ три под 2 в первой степени - подходит. И опять ставим следующую 43 единицу уже на пятое место в ответе. Оставшаяся единица от вычитания 3—2 (2 - это 2**1) как раз для 44 нас , т. к. 2**0 даёт 1. И мы в на последнее шестое место ответа её и ставим. Здесь еще правило всякое 45 нечетное десятичное число при переводе в 2-чное имеет в конце 1, а всякое четное 10-чное имеет в конце 0. 46 Обратно из 2-чной, или из 8-чной или из 16-чной в 10-чную проще - надо построить числовую сумму. 47 Сначала нумеруем цифры в исходном числе справа налево, начиная с нуля (0, 1, 2, 3, ...). Потом суммируем 48 каждую цифру, умноженную на основание системы счисления, возведенное в степень, которую мы только что 49 пронумеровали. ПРИМЕРЫ: 50 101111 = 1*2**0 + 1*2**1 + 1*2**2 + 1*2**3 + 0*2**4 + 1*2**5 = 47 51 57 = 7*8**0 + 5*8**1 = 47 Я 5Е1 = 1*16**0 + 14*16**1 + 5*16**2 = 1 + 224 + 5*256 = 1505 53 54 Из 2-чной в 8-и или в 16-ичную за счет разбивания цепочки двоичных цифр по тройкам (для 8-ичной) или 55 четверкам (для 16-ичной системы). Бъём справа налево и добавляем слева если надо незначащие нули. 56 1) для 16-ичного 100111101 = 0001 0011 1101 = 1 3 D = 13D 57 2) для 8-ичного 100111101 = 100 111 101 = 4 7 5 = 475 58 Из 8-ичной в 16-ичную и обратно через перевод в двоичную (через представление цифр в тройку или 59 четверку двоичных) 60 3) 764 = 111 110 100 = 0001 1111 0100 = 1F4 (16) 61 4) 22DA1 = 0010 0010 1101 1010 0001 = 0 010 110 110 100 001 = 2 6 6 4 1 = 26641 (8)
62 IV Таблица символов и их кодировки (кротко про позиционные системы счисления) 63 Выполнить 3: 64 Найти в кодировки UTF-8 код и расстояния по коду в таблице Latin буквы А(лат) 0x41 и Z(лат) 0x5A и 65 посчитать сколько закодированных больших букв английского алфавита и переведите это число - 66 «расстояние» из 16-ичного в десятичное (см. Приложение ->Стандартные ->Таблица символов ). 67 для английских и русских (кириллических) букв: 68 0х5А - 0x41 = 0x19 => 1 * 16**1 + 9 * 16**0 = 16 + 9 = 2510 + 1 69 Получилось 26 букв - как и должно быть. Коды символов идут по возрастанию. 70 Для русских букв. См в таблице Cyrillic буквы А(рус) 0xD0 0x90 и а (рус) 0хB0 и посчитать сколько 71 закодированных больших букв русского алфавита. 72 0хВ0 - 0x90 = 0x20 => 2 * 16**1 +0* 16**0 = 3210 # так и есть в русском алфавите 32 буквы( 73 ё) 74 Вопрос 75 1) какая русская буква соответствует 2-х байтовому коду 0xD0 0x99? 76 2) после какой буквы в первом байте идет переход на 0xD1?: 77 V Команды просмотра - вывода на экран (cat и less) (cm help по каждой) 78 cat имя файла # выводит на экран содержимое указанного файла 79 less имя файла #-------»-------«--------«------« только постранично и там свои команды (см ра 80 VI Создание файла (3 способа, а надо знать на зачет 4) (через vi, cat, touch) 81 cat > имя1 # катенация-связка, сочленение, сцепление, соединение (cat —help) 82 C-d # напоминаю, это символ изображает нажатие 2-х клавиш CTRL+D 83 ls -l # удостовериться получился ли файл и какой длины 84 touch имя файла # трогать, притронуться - здесь создать файл или последнее обращение к 85 нему 86 VII Юзеры и Файловые системы, устройства, каталоги, файлы и команды работы с ними 87 Вы работаете под своим непривилегированным именем и только временно, редко (когда надо) переходит 88 режим суперюзера (через команду sudo имя команды с ключами и параметрами) 89 Типы файловых систем (нас интересует ext2, ext3, msdos, vfat, ntfs, смотри man fs); 90 Конструкция Файловой Системы. Ее иерархия. Корневой каталог, каталоги с исполняемыми файлами, 91 домашние каталоги пользователей; 92 Корневой каталог и каталоги корневого уровня(/, /bin, /boot, /cdrom, /etc, /dev, /home, /home/userXX...) 93 Полное имя файла /home/userXX/abc - читать - слэш хоум слэш юзер слэш abc 94 Завести в домашнем каталоге каталог bin (с помощью mkdir). 95 Два слова про настроечные файлы домашнего каталога (начинаются с «.») 96 Соглашение по именам файлов и типам: обычные, ссылочные, каналы, каталоги, устройства (блочные, 97 символьные). Смотри их цвета. Что обозначают в именах каталогов "." и ".."; 98 Команды :pwd, cd, cd ~, ls, cat имя_файла, ср. Узнать, что они делают. Формат задания команды с ключом 99 (см. имя_команды -- help) 100 С помощью команды ср перекопировать вновь созданные файлы в созданную директорию bin. 101 Посмотреть пути (полные имена каталогов исполняемых в системе файлов) и добавить этот список, включив 102 туда новый каталог bin (отредактировать файл ~/.bashrc и ~/.bash_profile). 103 VIII Командная строка. (CLI - Comand Line Interface интерфейс командной строки) 104 Команды редактирования командной строки (С - клавиша CTRL, M - мета клавиша - клавиша ALT -) (подробно 105 см man sh , место - «Command for moving") 106 Общие: повторить команду сделать еще один терминал (закладку) и как туда переходить, как закрыть, и как 107 переходить на новые рабочие столы. 108 Перемещение по строке, словам, символам: 109 С-а - курсор в начало строки, С-е - курсор в конец строки, С-прав - курсор на слово вперед, С-лев - 110 курсор на слово назад, C-f - курсор на символ вперед, С-b - курсор на символ назад; 111 Стирание строки (части строки) слов, символов: 112 C-k - стирать от курсора до конца строки,C-u - стирать до курсора от начала строки, M-d - стирать слово 113 вперед, М-стир - стирать слово назад, С-b - стирать символ налево; 114 Преобразование слов, символов: 115 менять местами соседние слова-???, C-t - поменять местами соседние символы, М-u - все слово в заглавные 116 буквы, М-I - все слово в прописные буквы, М-с - первый символ в слове заглавный, С-I очистить экран и 117 данную строку наверх; 118 Отмена операции: C-y - отменить предыдущую операцию. 119 X Задание на дом 120 1. Дома за компьютером повторить (сделать) пункты: Выполнить 2, III, V, VI, VII. 121 2 Изменить в редакторе (раскомментировать) алиасные описания (alias способ задания сокращенного 122 написания команды с ключами с помощью короткого псевдонима). Файл .bashrc в домашней директории для 123 команды Is (см. man Is) 124 3 . Посмотреть хелпы у всех упомянутых команд (уже штук 15). Вопросы по ним будут на зачете. 125 4. Понимать что в Linux есть файл и какие бывают типы файлов, как менять права на доступ к файлу? „.._ —*~~™^ ,ч*т»шт\\щ\та\ш1е щлпшкотлшмое* (&еот^ базовый модуль на основе ОС Linux)заняти уметь учиться, хотеть учиться, любить у
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux)занятие 5-7 1 Программирование. Первые шаги. (с учетом bash и dash) 2 I Настройка файла .bashrc 3 Проверить результат командой 4 echo $PATH 5 Выйдет длинная строка, где через разделители (какие?) будут выведены системные папки (система только в них 6 ищет исполняемые файлы). 7 II Как работать в файловом менеджере с закладками, перемещаясь по разным папкам 8 (не пугать с закладками терминала) 9 При входе в систему (или на соседний рабочий стол) нажать клавиши: 10 M-Home (Alt+Home) открыть домашний каталог (папку) 11 M-стрелка вверх (Alt+вверх) если нужно, то перейти на уровень выше по всему дереву каталогов 12 (папок) на вам нужные папки. СтОит отметить, что все соседние разделы диска, в т.ч. и с виндоуз системой 13 имеются у вас в доступе и лежат в папке /media/sdaX Х- номер раздела. Однако это необходимо делать только 14 один раз, если создавать и запоминать закладки в своей рабочей папке. По клавишам C-b выйти в меню закладок. 15 По клавишам C-d добавить текущую закладку в меню закладок. 16 /// Место операционной системы (ОС) и разных оболочек на общекомпьютерной схеме 17 (ОС — это программа управления ресурсами компьютера: аппаратными - процессор, ОЗУ, диски, 18 УВВ, и др. и программными: - файлами, процессами). 19 Где применяется ОС, какими они могут бьпъ(кратко). (Рисовать "луковицу в виде концентрических кругов. 20 Внутри над "железом" круг с ОС, потом круг с прикладными программами с их межпрограммным интерфейсом 21 API (Application Programming Interface), самый внешний круг — это оболочки графического интерфейса -GUI, в 22 них есть текстовые, такие как shell). 23 IV Файлы и права доступа к ним (Понять, запомнить, применить) 24 Типы файлов (обычный, каталог, символическая ссылка, сокет, специальный блочный/символьный); 25 Владелец файла и доступ к нему через rwx rwx rwx (команда ls -l) Смена доступа к файлу через символьный режим доступа 26 (chown, chmod, chgrp, u, g, о, а); Чмод от чэндж моуд — сменить режим (пользования) 27 chmod u+x имя # для владельца добавить право «исполнять» файл 28 chmod a+w имя # для всех остальных дать право «писать» в файл 29 chown -help # как менять правовладение файла (через суперюзерный режим) 30 31 V Простые удобные способы работы в командной строке (автодополнение) 32 Чтобы набрать Linux команду (утилиту) с указанием в качестве аргумента-ключа в виде имени файла, не 33 обязательно набивать всё имя, а оно, может быть очень длинное. Оболочка shell достаточно «умная», она сама 34 находит имя по первым двум-трём Вами набранным символам. Надо только нажать клавишу TAB (табуляция) 35 после этих 2-3 первых символов (она сама ищет и подставляет имена по неполному имени). 36 VI Первые программы на языке Shell (один файл без переменных, другой - с переменными) 37 Выполнить (набить файлы с именами ff1 (4 строки) 38 #!/bin/bash 39 echo "Умом Россию не понять!" # что делает программа? 40 echo "Простым аршином не измерить" 41 echo -e "\t У ней особенная стать \n\t В Россию можно только верить!!" 42 43 Выполнить (набить файл с именем ff2 (3 строки) ) 44 #!/bin/bash 45 STR="Hello World!" # объявили строковую переменную 5TR и присвоили ей значение 46 echo $STR # вывели на стандартный вывод(экран) значение переменной (имя с $) 47 Оператор вывода: - echo [ аргументы ] «выражение» 48 выводит выражение на экран (или поток вывода — будем проходить позже) 49 2 аргумента «n» и «e» (через общий минус) показывают, 1)что при отрабатывании этого оператора не 50 будет перехода на новую строку и, 2)что будет обработан метасимвол (табуляция -клавиша Tab) для 51 отступа на сколько-то знакомест на экране для последующего ввода с этого места 52 Оператор присваивания (знак = ) - сначала вычисляется (выполняется) правая часть от знака (может быть сколь 53 угодно сложным выражением), потом ее вычисленное значение присваивается левой части. С обеих сторон 54 символа "=" пробелы ставить нельзя.
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 5-7 55 VII Запуск программы: 56 bash имя_файла # можно запустить просто по имени, но тогда надо этот файл сделать исполнимым 57 58 Выполнить (Программа - подсчет площади круга - 5 строк) 59 #!/bin/bash 60 echo -ne "Vvedite radius \t" 61 read г #оператор чтения (ввода) значения радиуса в переменную «г» 62 pi=3 #присваиваем переменной «пи» целое значение, т.к. дробные в языке shell не обр 63 echo -e "Ploschad kruga ravna \n\t 5= pi * r**2 =3 * г ** 2 = \t" $((pi*r**2)) 64 65 запускать программу двумя способами, через: 66 bash имя_файла 67 или просто по имени, переделав файл командой chmod 68 chmod u+x имя_файла #файл становится исполняемым (аргумент +х), при 69 # строке стоят xwx-rx-rx- 70 имя_файла 71 Выполнить : - скрипт shell (команда read читает строку из стандартного ввода, создать редактором файл 72 со скриптом-сценарием) 73 vi aa2 74 #!/bin/bash 75 echo -ne "твоё имя \t" 76 read name1 77 echo -ne "твоя фамилия \t" 78 read name2 79 echo "Здравствуй " $name1 $name2 80 echo "By-by" # прекратить ввод программы, нажав C-d (CTRL-d) 81 VIII «Программа = алгоритм + структура данных» (ключевое понятие) 82 Понять, выучить запомнить 83 В любом языке существуют основные операторы: присваивание, ветвление (условие), цикла (2-3 вида), 84 нескольких), обработка исключений (ошибок), которые по своим функциональным возможностям очень похожи 85 друг на друга, хотя по своему синтаксису могут отличаться. Тем не менее, выучив как они работаю 86 языке легко потом освоить их и в других языках программирования. 87 Что такое алгоритм?, структура данных? 88 Алгоритм - способ решения задачи (еще называют метод, рецепт, последовательность действий). 89 Структура данных - это описание переменных в программе, с помощью которых мы решаем задачу. 90 Вспомним какие бывают переменные, где встречались раньше, какие они имеют значения, типы и прочие 91 переменные оттуда) 92 Что есть выражение, как его вычислять 2 способа на примере суммирования двух значений): 93 1) expr 10 + 10 # (пробелы вокруг «+» обязательны) 94 2) $((a + b)) # может быть сколь угодно сложным, обязательно двойные скобки вокруг и зна 95 ними (выражением). Будем пользоваться вторым способом. 96 Примеры с оператором присваивания: 97 a=4;b=6;c=12; 98 a=$((b+c)); echo $a; echo $((b+c)) #через «;» пишем несколько операторов в одной строке 99 IX Классический вопрос: (Как поменять местами 2 переменные?) 100 Дайте два способа? НАДО ЗНАТЬ НАИЗУСТЬ!! 101 Пусть переменной a присваивается значение 5, а переменной b — 2. В конце их значения должны поменяться 102 должна иметь значение 2 , a b иметь значение 5. 103 X Выполнить 5 программ (1)подсчет объема цилиндра V=Pi*r**2*h, (2)перевод температуры и: 104 Цельсия в Фаренгейт (З)стереть файл по запросу, (4)навигация по создаваемому каталогу-1, 105 (5)навигация по создаваемому каталогу-2 106 1. Вычислить объем цилиндра, запросив его высоту 107 2. Вычислить по формуле F = С * 2 + 30 перевод градусов из шкалы Цельсия в шкалу Фаренгейта и вы 108 результатов на экран в районе температуры 35, 36, 37, 38, 39 гр по Цельсию
Курс ''Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux)занятие 5-7 109 3. Программа стирает указанный файл. Программа запрашивает какой файл и, получив ответ, стирает его. 110 4. Программа 111 #!/bin/bash 112 echo "Я в каталоге" 113 pwd 114 echo -en "Введите имя нового тестового каталога " 115 read testdir 116 mkdir $testdir 117 cd$testdir 118 echo " А теперь я в каталоге" 119 pwd #распечатает уже новый каталог 120 Если надо, чтобы по выходе из программы вы оказались в новом каталоге, то нужно добавить строчку файл, 121 содержащую 1 команду sh 122 5. Программа по запросу создает каталог, переходит в него и оттуда печатает «привет из (ставит имя текущего 123 каталога)», далее там же создает файл с заданным именем, делает его исполняемым, но в домашнем каталоге, 124 потом возвращается обратно откуда была запущена и в самом конце печатает «Я вернулся в (имя текущего 125 каталога)». Показать как и что делает эта программа. См. man mkdir, man cd, man rm, man chmod 126 XI Делать - арифметические операции в выражениях +, -, *, **, /, % 127 Проверить примеры на арифметические операции и выяснить, какая арифметическая операция что 128 делает. (всего их 6) 129 IX Повторение пройденных и знакомство с новыми полезными командами ОС Linux 130 cal - Выводит на экран отформатированный календарь текущего месяца, или любого указанного месяца/года. 131 Например, набрав "cal 9 1752", вы увидите календарь на сентябрь 1752 года. Этот месяц и год интересны тем, что 132 именно тогда из календаря было удалено несколько дней, чтобы (догадайтесь сами!!!!!). 133 Команды cat, less, cd, date, id, whereis, who, df и основные аргументы (ключи) к ним; Конец текстового файла 134 символ C-d, (CTRL+D) прерывание при выводе на терминал - символ C-c. Еще один способ образовать (создать) 135 файл (пусть нулевой длины;. 136 Псевдонимы (aliases - алиасы) для команд и как они заводятся в системе. 137 Вы всегда для облегчения своей работы можете завести новые имена каким-то часто употребляемым командам с 138 длинными и сложными ключами. Типичный и уже известный нам пример, он вставлен в настроечный файл 139 .bashrc в домашнем каталоге. 140 alias ll="ls -las" # здесь новое имя 11 заменяет команду ls с ключем -las 141 X Домашнее задание 142 Просмотреть дома весь сценарий занятия повторить наиболее непонятные места; 143 - что не успели в классе доделать; 144 - повторить на домашнем компьютере про переменные (смену местами их значений); 145 - ответить на вопрос «что такое алиас (alias)? И как ими (алиасами) пользоваться»?; 146 - на домашнем компьютере сделать, чтобы по умолчанию грузилась операционная система MS Windows, а не 147 Linux
Курс Современное программирование для школьников (Вводный базовый модуль на основе ОС Linux) занятие 10-11 уметь учиться, хотеть учиться, любить учиться 1 Условия, условные выражения, оператор условия 2 I Про разные кавычки ( для предотвращения интерпретации специальных символов ) 3 ( " -ничего не меняется; ' - почти ничего не меняется; ` - подстановка команды) 4 <\> (обратный слэш) - знак комментирования специального символа 5 echo `date` 6 Срд Окт 29 ... . # исполняет команду date и ее результат "эхирует" на экран 7 echo " Сегодня на дворе `date` " # также можно представить в виде 8 # echo `ls -la имя-каталога |grep шаблон | wc -l ` 9 echo * # выводит листинг файлов в текущем каталоге 10 echo \* # выводит * 11 echo $$ # выводит текущий PID (Process identificator - номер процесса) 12 echo \$$ 13 echo $? # проверка кода завершения, 0 - TRUE, любое не ноль - FALSE 14 15 II Понять, выучить запомнить (проверка условий) 16 test условие # проверяет права доступа (типы) к файлам - смотри man test или test --help 17 [ условие ] # обязательно пробелы после и перед скобками [ и ] 18 [[ условие ]] # более точная проверка 19 -d # каталог 20 -f # обычный файл 21 -L # символическая ссылка 22 -г # файл для чтения 23 -w # файл для записи 24 -s # файл имеет ненулевой размер - не пуст 25 -x # исполняемый файл 26 -z # string - True если длина строки равна нулю (см далее) 27 -n # string True если длина строки не равна нулю (см далее) 28 29 Примеры : [ -w файл ] # то же самое, что test -w файл 30 echo $? # если возвращает 0, то нет ошибок, если не 0, то ошибка 31 [ -d bin ] # проверка, существует ли в текущем каталоге подкаталог bin 32 echo $? 33 III Понять, выучить запомнить (Логические операторы при проверках) 34 -а логическое AND (И) возвращает истину, если обе части оператора истинны 35 -o логическое OR (ИЛИ) возвращает истину, если какая-либо из частей может иметь истинное 36 значение 37 ! логическое NOT (НЕ) возвращает истину, если условие ложно 38 Примеры [ -w файл1 -a -w файл2 ] 39 echo $? 40 0 # ответ утвердительный, если оба файла имеют доступ на запись 41 [ -d bin -о -d bin2 ] 42 echo $? # если 0 (истина) то имеется хотя бы один каталог из приведенных 43 [ -d bin -a -d ~/.qt3 ] 44 echo $? # если 0 (истина) то имеется оба указанных каталога 45 IV Проверка строк (один из 5 форматов) 46 test "строка" ; test оператор_строки "строка"; test "строка" оператор_строки "строка" 47 [оператор_строки строка ] #оператор_строки это: == (строки равны) != не равны 48 [ строка оператор_строки строка ] #-z эта строка нулевая (-n строка не нулевая) 49 [ -z $PATH ] # что это значит? 50 echo $? 51 V Проверка чисел (формат: [ "число!" числовой оператор "число2" ] ) -eq (==) два числа равны -It ( < ) первое число меньше второго x=7 y=2 #вокруг оператора "=" пробелы не ставить ПРИМЕЧАНИЕ лучше буквами, т.к. знаки «>, <, = » используются самим интерпретатором shell для своих операций и в этом случае условные операции должны комментироваться -ne (! = ) -gt ( > ) два числа не равны 1-е число > 2-о -lе (<= ) -ge (>= ) первое число меньше или равно второму первое число больше или равно второму а=$[$х + $у]; echo $a или другим способом: а=`ехрг $x + $y` ; echo $a e=`expr $x % $y` ; echo $e 52 Выполнить 1 (примеры в интерактивном режиме) 53 NUMBER=130 54 [ $NUMBER == 130 ] 55 echo $? 56 0 # если выйдет 0, то ответ положительный 57 [ 12 -ne 12 -а 40 -gt 60 ] # какое сообщение вернет
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе занятие 10-11 уметь учиться, хотеть учиться, любить 58 VI Оператор if ( if условие1 ;then команды1; elif условие2; then команды2; else команды2) 59 if условие then команды fi 60 if условие then команда1 else команда2 fi 61 if условие1 then команды1 elif условие2 then команды2 else командыЗ fi 62 if [ 10 -lt 12 ] # можно делать прямо набивая на консоли или, как обычно, в шельной 63 then 64 # Yes 10<12 65 echo "OK Its true" 66 fi 67 Выполнить 2: (пример алгоритмов с прошлого занятия: про знак операции и про 68 високосный год) 69 ввести 1-ое число (допустим, а) 70 ввести второе (допустим, b) 71 ввести один знак операции из следующих (+, -,/,%, *) 72 вывести результат арифметического выражения этих чисел с этим знаком операции 73 #!/bin/bash 74 echo -ne "Vvedite chislo a \t" 75 read a 76 echo -ne "Vvedite chislo b \t" 77 read b 78 echo -ne "Vvedite operaciyu znak \t" 79 read znak 80 echo "znak = $znak" 81 if [ [ $znak == "+" ]]; then 82 echo " a+b= " $((a + b)) 83 elif [[ $znak == "-" ]]; then 84 echo " a-b= " $((a - b)) 85 elif [[ $znak == "%" ]]; then 86 echo " a%b= " $((a % b)) 87 elif [[ $znak == "/" ]]; then 88 echo " a/b= " $((a / b)) 89 elif [[ $znak == "*" ]]; then 90 echo "a*b = " $((a *b )) 91 fi 92 Можно сделать в два раза короче и с учетом ** 93 94 Выполнить 3 (сначала прочитать и объяснить) 95 1. смотри содержимое в башеловских настроечных файлах в своей домашней директории, например 96 ~/.bash_profile Посмотреть их можно командой постраничного вывода на экран less имя-файла 97 98 less ~/.bashrc profile # в Вашем конкретном дистрибутиве этот файл может имет имя 99 100 # ~/.bash_profile: executed by bash(l) for login shells. 101 # see /usr/share/doc/bash/examples/startup-files for examples. 102 # the files are located in the bash-doc package. 103 # the default umask is set in /etc/login.defs 104 #umask 022 105 # include .bashrc if it exists 106 if [ -f ~/.bashrc ]; then 107 . ~/.bashrc 108 fi 109 110 # set PATH so it includes user's private bin if it exists 111 if [ -d ~/bin ] ; then 112 PATH=~/bin:"${PATH}" 113 fi 114 115 2. Написать сценарий проверки вводимого числа - делятся ли оно на 4 (нацело) или нет. Запускать по 116 файла. 117 118 VII Задание (Написать программу определения високосного года) 119 Делится на 400 - да; делится на 100 - нет; делится на 4 - да 120 Внимание: при проверке условия через if и, когда в условии стоит не одиночная переменная, а какое-то 121 выражение, то это выражение должно обрамляться своими либо одиночными квадратными, либо двойными 122 круглыми скобками. Пример: if [ $((a+b)) != 100 ] и далее или if [ $[a+b] != 100 ] и далее ...
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 13-14 уметь учиться, хотеть учиться, любить учиться 1 IF - continue. Регулярные выражения 2 (средство текстового поиска, применяются в поисковых Интернет системах, в 3 табличных программах, в программировании поисковых систем) 4 I Повторить из предыдущего занятия 5 Выполнить 1 (Алгоритм определения високосного года и его реализация двумя способами) 6 #!/bin/bash 7 echo -ne " Введите год \t " 8 read yn 9 if [ $[$yn%400] == 0 ] # или if [ $((yn%400)) == 0 ] 10 then 11 echo «God $yn visokosny» 12 elif [ $[$yn%100] == 0 ] # или if [ $((yn%100)) == 0 ] 13 then 14 echo «Net god $yn nevisokosny» 15 elif [ $[$yn%4] == 0 ] 16 then 17 echo «DA $yn Visokos» 18 else 19 echo «Net $yn NEVISOKOSNY» 20 fi 21 Выполнить 2:(программа по имени pass считывает имя и пароль, сравнивает, и выдает правильно 22 введено или нет) 23 #!/bin/bash 24 # установка переменных в "ложь" 25 INVALID_USER=yes 26 INVALID_PASSWD=yes 27 # сохранение текущих установок команды stty 28 SAVEDSTTY=`stty -g` 29 echo "You are logging into sensitive area" 30 echo -n "Entry your ID name :" 31 read NAME 32 # скрыть вводимые символы 33 stty -echo 34 echo "Enter your password :" 35 read PASSWORD 36 # попробуем снова 37 stty $SAVEDSTTY 38 if [ "$NAME" = "userN" ]; then 39 INVALID_USER=no 40 fi 41 if [ "$PASSWORD" = "userN" ]; then 42 INVALID PASSWD=no 43 fi 44 if [ n$INVALID_USER" = "yes" -o "$INVALID_PASSWD" = "yes" ]; then 45 echo "`basename $0 :` Sorry wrong password or userid" 46 exit 1 47 fi 48 # если вы здесь, ваш ID и пароль в порядке 49 echo 50 echo "OK", correct user id and password given" # см man stty или stty --help 51 И Регулярные выражения (средство текстового поиска, применяются в поисковых Интернет системах, в 52 табличных программах, в программировании поисковых систем). 53 Понять, запомнить, применять (в т.ч. для инфопоиска дополнительных материалов): 54 Для обозначения (фиксации) общих признаков (мест, символов) в тексте существуют специальные «регулярные 55 выражения». Такое выражение есть шаблон, в котором с помощью специальных знаков (метасимволов) 56 описывают целый набор различных строк, подстрок, строковых мест, комбинаций символов и т. п. 57 58 59 GO 61 62 63 64 65 66 Метасимволы базовых регулярных выражений . ^ $ [...] [^...] Что они обозначают (чему соответствуют) любой отдельный символ начало строки конец строки любой символ из числа заключенных в скобки (может быть диапазон не [123], а, например, [1-3]) любой символ, кроме тех, что указаны в скобках
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 13-14 уметь учиться, хотеть учиться, любить учиться 67 \ отмена специального значения метасимвола, идущего за 68 * повторение фрагмента ноль или более раз 69 70 Выполнить 3: 71 grep шаблон имя-файла-где-искать # grep - поиск по шаблону (проходили) 72 73 ls -l | grep «..x» # объяснить что будет 74 Is -l | grep «.wx» | wc # объяснить что будет 75 Is -l | grep «^d» 76 Is -l | grep ^l |wc -I # объяснить 77 Is -l | grep «^$» # объяснить 78 Is -l | grep «$c» # объяснить 79 Is -l | grep [123] # объяснить 80 Is -l | grep [^a-zA-Z] # объяснить 81 Is -l | grep «\^q» # объяснить 82 Is -l | grep ^d |wc # объяснить 83 Is -l | grep «..x» # объяснить 84 Is -l | grep 1$ I wc 85 86 Выполнить 4: 87 Написать программу , которая запрашивает имя каталога, затем вводит это имя, 88 затем выводит сначала 2 числа: число простых файлов и число файлов-устройств символы 89 из указанного каталога, а потом одно число - их сумму (общее количество файлов этих типов 90 III Выполнить (на дом) 91 1.Подсчитать число файлов разных типов (до 5).: 92 А) сначала в текущем каталоге; 93 Б) потом в каталоге, задаваемом как аргумент в программу (через чтение с клавиатуры); 94 95 Алгоритм: 96 Дается полное имя каталога, каталоги просматриваются на всю возможную глубину - рекурсивно, 97 большое для команды Is и ее вызов будет Is --laR) если для какого-то каталога не разрешен доступ 98 permission denied), то сообщения об этом должно выдаваться не на экран, а перенаправляются 99 дыру». Читать внимательно man ls). Для проверки рекурсивного просмотра задать команду Is -R (см 100 Понять такую «рекурсивность». 101 Ответ должен быть в виде пяти чисел (сколько известных вам типов файлов у вас на компьютере)
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 13-14 уметь учиться, хотеть учиться, любить учиться 1 Процессы, каналы, новые команды системы Linux, 2 «рождение», «жизнь», «смерть» процессов 31 Понять, выучить запомнить 4 Процесс - есть исполняемая команда (программа) в системе Linux. Это единица работы системы. Процесс 5 имеет свой уникальный номер - PID (Process Identificator). 6 Когда запускается любая программа, то процесс «рождается», он какое-то время «живет» (пока работает 7 программа), потом «умирает» (его либо «убивают», либо он сам заканчивается). Некоторые процессы «живут» 8 от самого запуска системы и «умирают» только с выключением машины. user всегда может посмотреть, какие 9 процессы сейчас есть в системе. Команды ps, или ps -elx, или pstree. «Убить» процесс можно несколькими 10 способами: C-c, или C-d, или через другой терминал (закладку), узнав номер процесса и, запустив kill PID 11 или kill -9 PID. 12 Выполнить 1: 13 top # вот она - жизнь процессов на твоем компьютере 14 ps 15 ps -elx 16 pstree 17 cat > qqqq # просто открыли файл qqqq , туда что-то писать 18 # перейти в другую закладку, узнать PID процесса и «убить» его 19 ps -elx 20 kill -9 PID # само собой не три буквы PID надо набирать, а номер процесса 21 II Понять, выучить запомнить (новые команды) 22 Команды cat, less, id, whereis, who, df и основные аргументы (ключи) к ним; Конец текстового файла символ 23 C-d, (CTRL+D) прерывание при выводе на терминал - символ С-с. 24 echo `команда` - здесь команда не просто эхируется, а выполняется (далее на примере date). Кавычки. 25 date - выводит текущую дату и время. 26 du <каталог> - Сокращение от disk usage. Показывает, сколько занимает указанный каталог и его 27 подкаталоги. 28 df - Сокращение от disk free. Показывает, сколько свободного места осталось на всех разделах. 29 echo - Печатает в терминале сообщение. Например: echo "Hello World", или echo $[10*3+2]. echo -e позволяет 30 интерпретацию мета выражений через обратный slash, (см man echo), echo с параметром -n не переводит 31 курсор на следующую строку после того, как сообщение напечатается. 32 expr - Производит расчет математических выражений. Например, expr $[2 + 2 '*' 2] выведет число 6. 33 file <имя файла> - Определяет тип данных, хранящихся в файле. Тип файла определяется на основе 34 анализа содержимого этого файла, а не из его расширения. Например, file back.jpg скажет вам, что back.jpg - 35 это изображение в формате jpeg. 36 wc [-с] [-w] [-l] <имя файла> - Считает количество символов/байт, слов или строк в текстовом файле. 37 grep шаблон имя_файла - поиск по шаблону в тексте файла 38 find откуда что_искать выводить пример - find / -name passwd -print 39 Выполнить -2 40 Делать примеры с этими командами (например, найти файл passwd в /etc ) 41 42 III Понять, выучить запомнить (программные каналы - pipes) 43 Канал (pipe) очень важное и удобное средство работы в командной строке 44 Результат одной программы передается на вход другой, например: 45 Выполнить 3 (примеры) 46 Is -lasR / | less # постраничный вывод списков файлов из всех директорий, начиная с 47 # корня и далее рекурсивно во всех (команде less на вход предается 48 # вывод результата команды Is)... 49 Is -las /etc | grep lilo # в ubuntu дистрибутиве ничего не выведет - почему? 50 cat /etc/passwd | grep user # ищет шаблон user в файле passwd 51 IV Подстановка в именах файлов(через метасимволы) 52 * - соответствует любой комбинации 53 ? - соответствует любому одному символу 54 [...] - соответствует любому символу из числа заключенных в скобки 55 [!...] - соответствует любому символу за исключением тех, которые указаны в скобках 56 [буква1-буква2] - любое сочетание по таком соотношении между буквами 57 примеры: - Is a*; Is .a; ls a[1-9]*; Is ??a1; ls ?x*; Is a[!0-9]]; Is [a-z]* 58 V Понять, выучить запомнить (типы файлов) 59 Файл - просто программа или текст 60 файл - директория 61 файл - прилинкованный (как ссылка или ярлык файла в WinXX) 62 файл - устройство (блочные и символьные - см. Is -I /dev | less ) 63 VI Задание на дом 64 1.Подсчитать число файлов разных типов (до 5 - b, с, l, d, и просто файл).: 65 µ А) - сначала в текущем каталоге; 66 µ Б) потом в каталоге, задаваемом как аргумент в программу (через чтение с клавиатуры); 67 µ В) то же, что в «Б)», но с перенаправлением потока ошибок не на экран , а в «черную дыру» (/dev/null).
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux)занятие 15-16 уметь учиться, хотеть учиться, любить учиться 1 Стандартные потоки ввода, вывода и ошибок, переадресация, перенаправление, 2 потоков, фоновый режим исполнения, фильтрация текста, оператор цикла «for» 3 Вспомнить , что было на прошлых занятиях про перенаправление, например cat > имя 4 I (Стандартные потоки. Перенаправления потоков) 5 С каждым процессом в интерпретаторе shell связан ряд открытых файлов, из которых процесс читает 6 данные, пишет, помещает появившиеся ошибки. Каждый из файлов характеризуется дескриптором, три 7 первых из которых стандартные: 8 Файл Дескриптор 9 стандартный поток ввода (stdin) О 10 стандартный поток вывода (stdout) 1 11 стандартный поток ошибок (stderr) 2 12 Выполнить -1 (управление стандартными потоками): 13 cat /etc/passwd > имя-файла #поток вывода идет в файл. Если файл уже есть? Проверить,что 14 будет? 15 grep qqq missil 2> /dev/null # переадресация стандартного потока ошибок в спец устройство 16 cat /etc/passwd > aa 2>&1 & # по номеру процесса можно послать сигнал на 17 # уничтожение, а можно перевести в режим 18 #фореграунд (команда fg) 19 find /etc -name alias.sh -print > find.data 2>&1 & 20 [1] 3460 # № процесса в данном случае 3400; на экране появится 21 [1] + Exit 1 # предыдущая командная строка 22 23 cat /etc/passwd ; cat ~/.bashrc # последовательное выполнение команд друг за другом 24 cat /etc/passwd & # команда выполняется «в фоне», сразу выплывает новое 25 приглашение 26 II Понять, запомнить, объяснить как поняли (Основные операторы переадресации) 27 команда > файл #направляет стандартный поток вывода в новый файл 28 команда 1> файл #направляет стандартный поток вывода в указанный файл 29 команда » файл #направляет стандартный поток вывода в указанный файл (режим 30 присоединения) 31 команда > файл 2>&1 #направляет стандартный поток вывода и ошибок в указанный файл 32 команда 2> файл #направляет стандартный поток ошибок в указанный файл 33 команда 2 » файл #направляет стандартный поток ошибок в указанный файл (режим 34 присоединения) 35 команда » файл 2>&1 #направляет стандартный поток вывода и ошибок в указанный файл (режим 36 #присоединения) 37 команда < файл1 > файл2#получает входные данные из первого файла и направляет выходные данные во 38 второй 39 команда < файл #файл является стандартным входным потоком 40 команда « разделитель #получает данные из стандартного ввода пока не встретит разделитель 41 Выполнить -2: (Программы определения и подсчета файлов разного типа в задаваемых 42 каталогах) 43 #!/bin/bash 44 echo -ne "Введите каталог \t" 45 read namedir 46 echo "Вы ввели каталог с именем \" $namedir \" " 47 echo -e "\t Всего файлов в указанном каталоге: " 48 echo -e " Обычных \t Директорий \t Линкованных \t Символьных устройств \t Блочных устройств " 49 echo -ne `ls -laR $namedir 2> /dev/null |grep ^- |wc -l ` #черная дыра это «нулевое» 50 # устройство /dev/null 51 echo -ne "\t" `ls -laR $namedir 2>/dev/null |grep ^d |wc -l ` 52 echo -ne "\t\t" `ls -laR $namedir 2>/dev/null |grep ^l |wc -l ` 53 echo -ne "\t\t" `ls -laR $namedir 2>/dev/null |grep ^c |wc -l ` 54 echo -ne "\t\t\t\t" `ls -laR $namedir 2>/dev/null |grep ^b |wc -l ` 55 echo -e "\n" 56 III Понять, запомнить, применить 57 Новые полезные команды (утилиты) Linux (cut, paste, join, split, head, tail) (см. команда --help) 58 cut -c2-4 a1 #вырезает и выводит символы с 2-о по 4-й из файла a1 (вертикальное 59 #расщепление файла) 60 paste a11 a2 #построчное присоединение одного файла к другому 61 split -l2 имя_файла #расщепление (продольное - горизонтальное) файла на новые, в которых по 2 62 строки (1 от line) из указанного (образуются файлы с именами xaa xab xae и т.д.) 63 join a1 a2 #соединяет построчно 2 файла, но они должны иметь одинаковые поля, 64 #например, номера строк, выставленные в начале каждой строки в обоих 65 #файлах, или д. б. указано местоположение их одинаковых полей (join 66 #-1 1 -2 2 a1 a2) - в первом поле у файла a1 и у второго поля 67 #файла а2 значения совпадают, поэтому их строки сливаются) 68 head -n2 a1 #выводит первые 2 строки от файла (по умолчанию 10 строк) 69 tail -nЗ а2 #оставляет последние 3 строки от указанного файла (по умолчанию 10 строк) 70 IV Выполнить -3 (обсудить и выполнить, а если не успеют, то на дом) 71 1. Есть матрица в текстовом файле t1 (набор чисел - элементов, расположенных в соответствующих
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) за уметь учиться, хотеть учиться, любить 72 столбцах и строках квадрата-прямоугольника). К каждому элементу можно можно однозначно 73 обратиться, например а00 (а с индексом 00) находится на самой верхней строке на нулевом 74 самом левом столбце на нулевом (верхнем) месте. Аналогично а55 или а99 (соответственно 75 матрицы и в самом правом углу) 76 77 00 01 02 03 04 05 06 07 08 09 78 10 11 12 13 14 15 16 17 18 19 79 20 21 22 23 24 25 26 27 28 29 80 30 31 32 33 34 35 36 37 38 39 81 40 41 42 43 44 45 46 47 48 49 82 50 51 52 53 54 55 56 57 58 59 83 60 61 62 63 64 65 66 67 68 69 84 70 71 72 73 74 75 76 77 78 79 85 80 81 82 83 84 85 86 87 88 89 86 90 91 92 93 94 95 96 97 98 99 87 Вычленить (вырезать) из неё подматрицу, используя только вышеприведенные утилиты (не р 88 31 32 33 34 35 89 41 42 43 44 45 90 51 52 53 54 55 91 61 62 63 64 65 92 71 72 73 74 75 93 Выполнить -4 (с помощью вышеприведенных утилит) 94 Сделать следующие задачи, взяв исходный файл с матрицей: 95 1) разбить его на несколько по одной строке в каждом новом файле; 96 2) соединить получившиеся новые файлы в одно строчный один файл с длинной-длинной с 97 3) поменять местами порядок следования строк в исходном файле (10-я строка становится 98 файле первой и т. д.; 99 4) поменять местами порядок следования столбцов в исходном файле (10-й столбец станов 100 новом файле первым и т. д.; 101 V Прочитать вслух и проинтерпретировать (объяснить своими словами) 102 Цикл for (процесс повторного выполнения наборов команд см man sh) 103 for loop in список # последовательная обработка значений переменной loop до тех пор, пока 104 «пробегая» по значениям элементов списка, не встретит окончание списка. loop - переменная, 105 параметром цикла - (надо обязательно запомнить), служит признаком окончания действия 106 for имя_переменной in list #цикл обрабатывает команды между do и done для каждого элем< 107 списка 108 do 109 каманда1 ПО команды... 111 done 112----------------------------------- 113 #!/bin/bash 114 for loop in 1 2 3 4 5 б 115 do 116 echo $loop 117 done 118---------------------------------- 119 что будет при выполнении следующей строки 120 for i in a b c d e f g h j i ;do echo -en "$i\t"; done;echo 121 # напомнить про «\t» и «;» 122----------------------------------- 123#!/bin/bash 124 for i in `ls`; do # опять применяем Г) для создания (генерации) списка с помощью 125 echo строка: $i 126 done 127 VI Вложенные циклы for 128 for имя-переменной in list 129 do 130 for имя-переменной2 in Iist2 131 do 132 команда 1 133 done 134 done 135 VII На дом: 136 1.сделать, чтобы выводилась 20 строк со словами "I never saw a wild thing sorry for itse 137 номером по возрастанию перед каждым предложением , подсказка - через арифметически 138 наращиваемый счетчик; 139 2. придумать пример на вложенный for 140 3. (высший пилотаж) Написать программу, которая делает вышеприведенную матрицу 141 «разреженной», т. е. Эту матрицу преобразовывает в другую и на выходе должна быть 142 матрица, но с пустыми строками и столбцами внутри, т. е. с чередованием пустых и непустых 143 строк и столбцов. Пользоваться вышеприведенными командами Linux.
Курс "Современное программирование для школьников" (Вводный модуль «ОС Linux-командная строка, утилиты, сценарии») занятие 18-19 1 For - продолжение. Локальные и позиционные переменные shell-a. 2 I Выполнить 1. Еще про for (процесс повторного выполнения наборов команд см man sh) 3 #!/bin/bash 4 for i in `seq 1 10`; 5 do 6 echo $i 7 done 8 Выполнить самостоятельно см seq -- help и сделать программу (в одну строку) печати чисел от 2 до 200 с 9 шагом 4 10 Написать программу, которая вводит первое число, последнее, шаг и распечатывает через for и seq 11 II Выполнить 2. Переменные shell-a (локальные, среды - через export, позиционные - для 12 чтения) 13 Отличие локальных переменных от переменных среды: 14 15 D0LLAR=99; echo $D0LLAR; env #локальная переменная DOLLAR действует только во время своего 16 сценария 17 D0LLAR=88; export DOLLAR # переменная среды DOLLAR может экспортироваться в другие 18 сценарии 19 env # видна через вызов env (от environment - среда, окружение) 20 III Выполнить 3. Экспорт переменных в дочерние процессы (сценарии) 21 Пример из 2-х сценариев father и child 22 #!/bin/bash 23 # сценарий father 24 echo "this is the father" 25 FILM="A Few Good Men" 26 echo "I like the film :$FILM" 27 # вызов сценария child 28 # сначала экспортируем переменную 29 export FILM 30 child 31 echo "back to father" 32 echo "and the film is :$FILM" 33 #!/bin/sh 34#сценарий child 35 echo "called from father... i am the child" 36 echo "film name is :$FILM" 37 FILM="Die Hard" 38 echo "changing film to :$FILM" 39 IV Выполнить 4. Позиционные параметры командной строки 40 #!/bin/sh 41 echo "это нулевой параметр - имя скрипта : $6" 42 echo "это первый параметр: $1" 43 echo "это второй параметр: $2" 44 echo "это третий параметр: $3" 45 echo "это четвертый параметр: $4" 46 echo "это пятый параметр: $5" 47 echo "это шестой параметр: $6" 48 echo "это седьмой параметр: $7" 49 echo "это восьмой параметр: $8" #Проверить скрипт, запустив его с разным числом параметров, 50 например, 51 echo "это девятый параметр: $9" # имя_скрипта did you see the film "My fair lady" 52 echo -e "а всего аргументов будет \t $# " # через echo $# узнаём сколько мы вколотили аргументов 53 V Выполнить 5. Создание резервных копий файлов в цикле for 54#!/bin/bash 55 BAK=".bak" 56 for loop in `ls` 57 do 58 echo " копирование $lоор в $loop$BAK" 59 cp $loop $loop$BAK 60 done 61 VI Выполнить б. (сделать дома): 62 1. обратное упражнение (из имен файлов *.bak восстановить исходные имена) 63 2. с помощью for подсчитать сколько вложенных каталогов в задаваемом каталоге (вспомнить 64 программу подсчета файлов разных типов) 65 3* перевернуть текстовую строку (первый байт становится последним, второй предпоследним и т.д.) 66 4* "злобный юзер" завел много-много пустых вложенных каталогов. Написать скрипт, проверяющий 67 на пустоту вложенные каталоги и оставляющий только те, что идут с глубиной вложенности 2 и не 68 больше.
Курс "Современное программирование для школьников' (Вводный модуль «ОС Linux - командная строка, утилиты, сценарии») занятие 20-21 уметь учиться, хотеть учиться, любить учиться 1 Архивирование. Циклы while и until. Оператор case-esac. ПРИМЕРЫ. Алгоритм НОД 2 I Выполнить 1 (Программа архивирования tar (см man tar)) 3 4 tar ключи имя_арх_файла [имя_источников_для_архивирования] # см tar --help 5 опция с #создать новый архив 6 опция x #извлечь файлы из архива 7 опция t #перечислить содержимое архива 8 опция r #дописать файлы в конец архива 9 опция и #заменить файлы в архиве более новыми 10 опция v #вербоус (подробный вывод) 11 опция z #фильтровать через gzip, gunzip 12 опция f #сразу после этого ключа должен стоять файл архива, для создания/извлечения 13 14 Проверить (tar и date с опциями): # использовать команду file для проверки типов создаваемых файлов 15 tar cf archiv-all-home-files ~/bin/* 16 tar cvf archiv-all-home-files.tar ~/bin/* 17 tar tvf archiv-all-home-files.tar 18 tar czf archiv-all-home-files.tar ~/Tar2 19 tar xvf archiv-all-home-files.tar # создается каталог Tar2 и все файлы в нем 20 II Прокомментируй нижеприведенный скрипт перед его проверкой. 21 Вспомним пройденный материал про позиционные переменные 22 Выполнить 2 23 #!/bin/bash 24 if [ -z "$1" ]; then # завести каталог, Например, ~/QQ и скопировать туда файлы ~/bin/b* 25 echo используйте $0 каталог 26 exit 27 fi 28SRCD=$1 #SRCD - SouRCe Directory - исходный каталог 29 TGTD="/home/juniorN/Test/" #TGTD - TarGeT Directory - конечный каталог 30 OF=home-`date +%Y%m%d` .tgz #OF - Output File - выходной файл 31 tar -czf $TGTD$OF $SRCD # можно просто tar -czf arch$OF b* или tar -cf ar.tar b* 32 III Циклы while и until 33 Цикл while выполняет кусок кода, если тестируемым выражением является истина; и останавливается при 34 условии если им является ложь (или внутри исполняемого кода встречается явно заданное прерывание цикла). 35 Цикл until практически идентичен циклу while. Отличие заключается только в том, что код выполняется при 36 условии если проверяемым выражением является ложь. 37 Выполнить 3 38 Пример цикла while 39#!/bin/bash 40 COUNTER=0 41 while [[ $COUNTER -It 10 ]] 42 do 43 echo The counter is $C0UNTER 44 COUNTER=$((COUNTER +1)) 45 done 46 Пример цикла until: 47 #!/bin/bash 48 COUNTER=20 49 until [[ $COUNTER -It 10 ]] 50 do 51 echo COUNTER $C0UNTER 52 COUNTER=$((COUNTER - 1)) 53 done 54 IV Оператор case -esac (многовариантный оператор, ищутся нужные значения с помощью 55 заданного шаблона) 56 57 case значение in 58 шаблон1) 59 команды ;; 60 шаблон2) 61 команды ;; 62 63 esac 64 65 66 Выполнить 4 67 #!/bin/bash 68 echo -n "введите число от 1 до 5 :"
Курс "Современное программирование для школьников" (Вводный модуль «ОС Linux - командная строка, утилиты, сценарии») за уметь учиться, хотеть учиться, люб 69 read ANS 70 case $ANS in 71 1) echo "your choice is 1" 72 ;; 73 2) echo "your choice is 2" 74 ;; 75 3) echo "your choice is 3" 76 ;; 77 4) echo "your choice is 4" 78 ;; 79 5) echo "your choice is 5" 80 ;; 81*) echo " `basen ` : This is not between 1 and 5" >&2 82 exit 1 83;; 84 esac 85 Выполнить 5 86#!/bin/bnsh 87 echo "введите и , - за < пробел что с ним делать 88 1- 89 2- кра 90 з - 91 echo -n "which \.t 92 read x у 93 case $y in 94 1) sort < 95 2) cat < $ 96 3) wc < $x 97 *) еcho "Ч * 'i ;; 98 esac 99 100 III Поиск ^ и еля no алгоритму Эвклида (НОД) (знать алгоритм наизусть 101 102 #!/bin/bash 103 # nod.sh: >.ic- ителя по алгоритму Эвклида 104 # Под " (од) двух целых чисел 105 #+ поним. l .• и i которое делятся эти 2 числа (делимые) без остатка. 106 107 # Проверка о; 108 ARGS=2 109 E_BAD=65 110 111 if [ $# -п.- "$ 112 then 113 echo "i1, ' > $0` первое-число второе-число" 114 exit $ 115 fi 116 117 delimoe=$ . не имеет значения 118 delitel=$- *. больше почему? 119 ostatok=i i ные не инициализировать, то работа сценария будет прервана 120 первом же цикле. 121 122 until [ " >t. 123 do 124 ostat 125 delim J. с новыми исходными данными 126 delit js 127 done \a 128 129 # последнее :d* 130 131 echo; echo ое" 132 133 На дом - проверить его на домашнем компьютере. 134
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие23 уметь учиться, хотеть учиться, любить учиться 1 Примеры, связанные с shift, со строковым редактором sed 2 (большой пример на переименовывание файла) 3 I Команда shift (позиционные аргументы при этой команде смещаются влево на один аргумент) 4 #!/bin/bash # вызывать скрипт opt с/без аргументов 5 loop=0 6 while [ $# -ne 0 ] #цикл выполняется до тех пор, пока остаются аргументы ($# - колич-во аргументов) 7 do 8 echo $1 9 shift 10 done 11 II Редактор sed (текстовый редактор потокового типа, не является интерактивной программой, см man 12 sed или sed --help) 13 Использование: 14 sed -e команды_редактора имя файла # и на экран (стандартный вывод) выводится результат 15-е # следующей командой будет команда редактирования 16 -n # запрет вывода на экран, иначе все (и что не надо) будет выводиться на 17 экран, применяется с командой «p» 13 sed -ne ' 1p' файл # вывод на экран первой строки файла 19 sed -ne '2,4p' файл # вывод на экран со 2-й по 4-ю строки файла 20 sed -ne ' 1,$p' файл # вывод на экран с 1-й по последнюю 21 sed -ne '/шаблон/р' файл # печатает строки где встретился шаблон 22 sed -ne 's/шаблон1/шаблон2/gp' файл # глобальная (по всему файлу - команда "g") замена ш1 на ш2 23 sed -e '2,4d' файл # стирает со 2-й по 4ю строки файла, результат выводит на экран 24 sed -e '2,$d' файл > файл2 #то же самое, но результат выводит в файл2 25 III Большой пример (программа renna - переименовать файлы по специальным правилам) 26 #!/bin/bash 27 #Прежде всего, посмотрите на различные "режимы", которые имеются у этой программы. 28#Если первый аргумент ($1) является подходящим, мы выполняем эту часть 29 #программы и выходим. 30 # Проверка на возможность добавления префикса. 31 if [ "$1" = "p" ]; then 32#Теперь переходим от переменной режима ($1) и префикса ($2) 33 prefix=$2 ; shift ; shift 34 # Необходимо проверить, задан ли, по крайней мере, хотя бы один файл. 35 # В противном случае, лучше ничего не предпринимать, чем переименовывать несуществующие 36 # файлы!! 37 if [ "$1" = "" ]; then 38 echo "не задано ни одного файла - это проверка второго if" 39 exit 0 40 fi 41 # Этот цикл for обрабатывает все файлы, которые мы задали 42 # программе. 43 # Он осуществляет одно переименование на файл. 44 for file in $* 45 do 46 mv ${file} $prefix$file # через фиг скобки "{}" команда выполняется в текущем shell, а через 47 "()" в порождаемом 48 done 49 #После этого выполняется выход из программы. 50 exit 0 51 fi 52 # Проверка на условие добавления суффикса. 53 # В остальном, данная часть фактически идентична предыдущему разделу; 54 # пожалуйста, смотрите комментарии, содержащиеся в нем. 55 if [ "$1" = "s" ] ; then 56 suffix=$2 ; shift ; shift 57 # echo " after shift what and s " 58 if [ "$1" = "" ] ; then 59 echo "не задано ни одного файла, это при параметре s " 60 exit 0 61 fi 62 for file in $* 63 do 64 mv ${file} $file$suffix 65 done
Курс "Современное программирование для школьников" (Вводный базовый модуль на основе ОС Linux) занятие 23 уметь учиться, хотеть учиться, любить учиться 66 exit 9 67 fi 68 # Проверка на условие переименования с заменой. 69 if [ "$1" = "r" ]; then 70 shift 71 # Из соображений безопасности автор включил эту часть, чтобы не повредить ни один файл, если пользователь 72 # не определил, что следует выполнить: 73 if [ $# -lt 3 ] ; then 74 echo "Ошибка; правильный ввод: ren r [выражение] [замена] файлы... " 75 exit 0 76 fi 77 # Рассмотрим другую информацию 78 OLD=$1 ; NEW=$2 ; shift ; shift 79 # Данный цикл for последовательно проходит через все файлы, которые мы 80 # задали программе. 81 # Он совершает одно переименование на файл, используя программу 'sed'. 82 # Это простая программа с командной строки, которая анализирует стандартный 83 # ввод и заменяет регулярное выражение на заданную строку. 84 # Здесь мы задаём для sed имя файла (в качестве стандартного ввода) и заменяем 85 # необходимый текст. 86 for file in $* # значки $* - показать все аргументы, а $# - показать кол-во 87 аргументов 88 do 89 new =`echo ${file} | sed s/${OLD}/${NEW}/g` 90 mv ${file} $new 91 done 92 exit 0 93 fi 94 # Если мы достигли этой строки, это означает, что программе были заданы 95 # неправильные параметры. В связи с этим, следует объяснить пользователю, как её 96 # использовать 97 echo "используйте:" 98 echo " renna p [префикс] файлы.." 99 echo " renna s [суффикс] файлы.." 100 echo " renna r [выражение] [замена] файлы.." 101 exit 0