Как сделать свой shell

Добавил пользователь Алексей Ф.
Обновлено: 05.10.2024

Чтобы создать приложение оболочки Xamarin.Forms, сделайте следующее:

  1. Создайте приложение Xamarin.Forms или загрузите существующее приложение, которое вы можете преобразовать в приложение оболочки.
  2. В проект с общим кодом добавьте XAML-файл, в котором создается производный класс Shell . Дополнительные сведения см. в разделе Создание производного класса оболочки.
  3. Задайте свойство MainPage классу App приложения для подкласса объекта Shell . Дополнительные сведения см. в разделе Начальная загрузка приложения оболочки.
  4. Опишите визуальную иерархию приложения в подклассе Shell . Дополнительные сведения см. в разделе Описание визуальной иерархии приложения.

Пошаговое руководство по созданию приложения оболочки см. в разделе Create a Xamarin.Forms application quickstart .

Создание производного класса оболочки

Чтобы создать приложение оболочки Xamarin.Forms, нужно сначала добавить XAML-файл в проект с общим кодом, который создает производный класс Shell . Файл можно назвать произвольно, но рекомендуется использовать имя AppShell. В следующем примере кода показан только что созданный файл AppShell.xaml:

В следующем примере показан файл кода программной части AppShell.xaml.cs:

Начальная загрузка приложения оболочки

После создания XAML-файла, в котором создается подкласс объекта Shell , необходимо задать свойство MainPage класса App для подкласса объекта Shell :

В этом примере класс AppShell — это XAML-файл, который является производным от класса Shell .

Будет создано пустое приложение оболочки. Попытка запустить его приведет к созданию исключения InvalidOperationException .

Описания визуальной иерархии приложения

Последним шагом при создании приложения оболочки Xamarin.Forms является описание визуальной иерархии приложения в подклассе Shell . Производный класс Shell состоит из трех основных объектов иерархии:

    или TabBar . Объект FlyoutItem представляет один или несколько элементов всплывающего меню. Он требуется, если шаблон навигации требует использования всплывающего меню. Объект TabBar представляет нижнюю панель вкладок. Он требуется, если навигация в приложении начинается с нижней панели вкладок (когда всплывающее меню не требуется). Каждый объект FlyoutItem или TabBar является дочерним для объекта Shell . представляет сгруппированное содержимое с навигацией по нижним вкладкам. Каждый объект Tab является дочерним для объекта FlyoutItem или TabBar .
  1. Объект ShellContent , представляющий объекты ContentPage для каждой вкладки. Каждый объект ShellContent является дочерним для объекта Tab . Если Tab содержит более одного объекта ShellContent , перемещение по ним осуществляется с помощью верхней панели вкладок.

Эти объекты не представляют собой какие-либо элементы пользовательского интерфейса, они служат лишь для организации визуальной структуры приложения. На основе этих объектов оболочка создает пользовательский интерфейс навигации по содержимому.

Ниже представлен простой пример XAML для производного класса Shell :

Этот XAML при выполнении отображает CatsPage , то есть первый элемент содержимого, объявленный в производном классе Shell :

Screenshot of a Shell app, on iOS and Android

Если нажать значок из трех полосок или провести пальцем от левого края, отобразится всплывающий элемент:

Screenshot of a Shell flyout, on iOS and Android

Во всплывающем окне отображается несколько элементов, так как для свойства FlyoutDisplayOptions задано значение AsMultipleItems . Дополнительные сведения см. в разделе Параметры всплывающего меню.

В приложении оболочки страницы создаются по запросу в ответ на навигацию. Это достигается с помощью расширения разметки DataTemplate для задания свойства ContentTemplate каждого объекта ShellContent в соответствии с объектом ContentPage .

.jpg

SliTaz предоставляет некоторые средства разработки для веб-дизайна, редактирования скриптов и исходного кода. В этой статье содержится общая информация для разработчиков и желающих к ним приобщиться.

Скрипты командной строки

Написание скриптов командной строки (shell-скриптов) — самый простой способ начать программировать, т.к. они дают быстрые результаты и всё, что вам нужно уметь, перед тем как садиться писать такой скрипт — это открыть терминал и использовать текстовый редактор: Nano, Leafpad или Geany. Shell-скрипты в Linux способны на многое — загружать систему, делать резервные копии, осуществлять рутинные операции, выводить информацию о системе, создавать и изменять файлы и т.д. В таких скриптах можно использовать переменные, функции или вызовы для запуска того или иного файла. Скрипту можно давать любое удобное для вас имя, при этом широко используется расширение .sh.

Создание shell-скриптов

Перед тем как создавать shell-скрипт, необходимо выяснить, какой интерпретатор используется в системе. Большинство скриптов используют /bin/sh, поскольку он более портативен, но существуют также скрипты, опирающиеся на /bin/bash, поэтому он тоже должен быть установлен в системе. Чтобы скрипт можно было запустить, его нужно сделать исполняемым, изменив его права доступа в командной строке утилитой chmod. Чтобы создать скрипт script.sh и сделать его исполняемым, используйте команды

Получив исполняемый файл, можно приступать к его редактированию. Вы можете оставаться в терминале и использовать редактор Nano (для сохранения и выхода нажмите Ctrl+X) или Leafpad:

Ниже приведен скрипт, содержащий переменную NAME и выводящий ее значение командой echo:

После создания или редактирования скрипта его можно запустить для проверки:

Это было краткое введение в shell-скрипты. В Интернете очень много информации по этой теме, если она вас заинтересует.

Dialog

Приложение dialog может создавать консольные программы с графическим интерфейсом, как, например, инсталлятор SliTaz. Файлы настроек программы находятся в папках /etc/dialogrc и/или ~/dialogrc для каждого пользователя. Вот простой пример использования dialog через командную строку:

Geany IDE

Geany относится к интерактивным средам разработки (Interactive Development Environment, IDE). Geany — простая и быстрая программа, она имеет подсветку синтаксиса, вкладки и функцию автозавершения. Geany использовался при создании большей части документации на этом сайте (и еще немного Nano).

Для установки Geany выполните команду

При первом запуске программы вы можете изменить ее настройки в меню ПравкаНастройки. Также Geany можно запустить из терминала командой

Интересно, что при компиляции исходного кода в скрипте ./configure будет указана опция -enable-the-force… (задействовать Силу). Она понадобится вам, если вы захотите почувствовать себя Люком Скайуокером!

Perl (Microperl) — создание и использование Perl-скриптов

В SliTaz вы можете использовать мощный скриптовый язык Perl, запустив его как perl или microperl. Microperl — это модернизированная версия Perl, собранная из официальных исходников. Perl-скрипты, использующие Microperl, совместимы с полной версией Perl. Одна из сильных сторон Perl — его портативность: его можно использовать на любой системе и он является интерпретируемым языком, что означает отсутствие необходимости в компилировании кода и возможность его запуска напрямую. В SliTaz Perl и Microperl по умолчанию не входят в состав Live CD, поэтому вам понадобится либо перепаковать Live CD, либо установить Perl через менеджер пакетов. К сведению: Microperl имеет размер всего 1 Мб и не предоставляет модулей. Установку Perl (или Microperl) можно произвести командой

Первая строка скрипта определяет путь к интерпретатору Perl, обычно это /usr/bin/perl. Для вывода на экран текста используется команда print. Нужно отметить, что Perl чувствителен к регистру и что каждая строка кода должна заканчиваться точкой с запятой. Вот сам код (вы можете его скопировать и вставить в редактор):

Чтобы выполнить скрипт, в командной строке наберите

CGI-скрипты и Perl

Когда сервер настроен должным образом, можно поместить скрипты в папку $HOME/Public/cgi-bin, задав им расширение .pl или .cgi, и просматривать их на локальном или удаленном компьютере. Пример использования скрипта Perl CGI:

Python

Официальный репозиторий SliTaz под названием Mercurial базируется на веб-интерфейсе CGI/Python; такое сочетание подходит для создания надежного и мощного продукта.

Для установки Python выполните команду

Чтобы установить Ruby, наберите

Toolchain — библиотеки, компилятор С и различные утилиты

Чтобы компилировать программное обеспечение из сторонних или ваших собственных исходников, вам понадобится по крайней мере минимальный набор утилит, куда войдут Binutils, Glibc, компилятор С, заголовочные файлы ядра Linux и утилита Make. Toolchain также используется разработчиками SliTaz для сборки системы из исходников. Для установки toolchain со всеми зависимостями введите

Текущая версия toolchain может без проблем компилировать простые программы в режиме командной строки, используя Ash из состава Busybox, но некоторые программы посложнее потребуют наличия Bash для компиляции. GNU Bash доступен в качестве пакета вместе с другими средствами разработки, например, Flex, M4, Bison или Pkg-config. Если вам нужно найти pkg-config, то используйте команду

Если вы хотите компилировать программы, использующие библиотеку Ncurses, потребуется установить пакет ncurses-dev. Этот пакет также имеет в своем составе несколько маленьких программ, к примеру, tic и tac.

Здесь ничего объяснять не буду, т.к. все как всегда понятно.

6. Итог
Статейка получилось приличной по объему, поэтому многие доп. функции в статью не вошли, но могу лишь подать идейки:
[1] Сделать ajax обновление
[2] Кодирование в md5,base64,url encode/decode и т.д.
[3] Замутить mysql-менеджер, но это уже вообще отдельная статья
[4] Добавить различие в цветовой гамме папок и файлов, скрытых файлов и т.п.

Base64 encode/decode

Кодирование/Декодирование мы будем делать за счет пользовательских функций в PHP: base64_encode и base64_decode.

[​IMG]

FORM method = 'POST' >
label > b > Base64 encode / decode : b > label >
textarea name = 'base64' rows = '5' cols = '71' > textarea > br >
input type = 'submit' name = 'submit' value = 'Encode' >
input type = 'submit' name = 'submit2' value = 'Decode' >
FORM >

php
IF (isset( $_POST [ 'submit' ])) <
$base64 = $_POST [ 'base64' ];
$encode = base64_encode ( $base64 );
echo "Encode: " . $encode ;
>
IF (isset( $_POST [ 'submit2' ])) <
$base64 = $_POST [ 'base64' ];
$decode = base64_decode ( $base64 );
echo "Decode: " . $decode ;
>
?>

Форма передает все методом post, НО это не очень хорошо для шелла, т.к. всё это дело будет писаться в логи, поэтому лучше передавать все в GET+ajax.

Ты нечего не путаешь?
POST- запросы в большинстве случаев не логируються(их тело).
GET - в большинстве случаев логируються, и легко понять по URL что и куда передается.

URL encode/decode

URL кодирование и декодирование мы будем делать через встроенные или как их еще называют - пользовательские функции в PHP: urlencode и urldecode.

[​IMG]

FORM method = 'POST' >
label > b > URL encode : b > label >
input type = 'text' name = 'url' >
input type = 'submit' name = 'submit' value = 'Encode' >

label > b > URL decode : b > label >
input type = 'text' name = 'url2' >
input type = 'submit' name = 'submit2' value = 'Decode' >
FORM >

php
IF (isset( $_POST [ 'submit' ])) <
$url = $_POST [ 'url' ];
$encode = urlencode ( $url );
echo "Encode: " . $encode ;
>
IF (isset( $_POST [ 'submit2' ])) <
$url2 = $_POST [ 'url2' ];
$decode = urldecode ( $url2 );
echo "Decode: " . $decode ;
>
?>

Ты нечего не путаешь?
POST- запросы в большинстве случаев не логируються(их тело).
GET - в большинстве случаев логируються, и легко понять по URL что и куда передается.

Скрываем шелл от поисковых систем

Прячем шелл от ПС

Заменять User Agent будем через плагин для FireFox - User Agent Switcher , актуальная версия на сегодняшний день 0.7.3.

приветствую нужен простейший shell на С\С++ с минимумом возможностей(т.е. базово запуск программ и возможность их запуска в фоне). может кто знает?


ash не подойдёт? Вообще, какая настоящая задача?

В книге М. Рочкинда "APUE", afaik, в одной из глав создается простейший sh, который, imho, удовлетворяет твоему техническому заданию :).


> бсдшный sh

Кстати не такой уж он простейший, он при ближайшем рассмотрении очень многое умеет.

Да мне для курсовика. А где этот ash взять, не подскажешь? Или лучше "В книге М. Рочкинда "APUE", afaik, в одной из глав создается простейший sh" - не в курсе, есть эта книга в электронном виде?

Выпускаем серию статей о том, как писать скрипты Bash. Подойдет начинающим!

скрипты bash

Что такое Bash/Shell/Scripting

Bash - это интерпретатор командного языка. Он широко доступен в различных операционных системах и является командным интерпретатором по умолчанию в большинстве систем GNU/Linux. Название является акронимом для 'Bourne-Again SHell'.

Shell - это макропроцессор, который позволяет выполнять команды в интерактивном или неинтерактивном режиме.

Скриптинг позволяет автоматически выполнять команды, которые в противном случае выполнялись бы интерактивно одна за другой.

Основы сценариев оболочки Bash

Не отчаивайтесь, если вы не поняли ни одного из приведенных выше определений. Это совершенно нормально, ведь именно поэтому вы читаете эту статью.

Если вы не знали, Bash Scripting является обязательным навыком для любой работы в Linux системного администрирования, даже если работодатель может не требовать этого в явном виде.

Что такое Shell

Скорее всего, в данный момент вы сидите за компьютером, открыли окно терминала и задаетесь вопросом: "Что же мне делать с этой штукой?".

Так вот, в окне терминала перед вами находится shell, а shell позволяет вам с помощью команд взаимодействовать с компьютером, следовательно, получать или хранить данные, обрабатывать информацию и выполнять различные другие простые или даже очень сложные задачи.

Попробуйте это прямо сейчас! Используйте клавиатуру и введите несколько команд, таких как date, cal, pwd или ls, после чего нажмите клавишу ENTER.

Вы только что сделали то, что с помощью команд и командной оболочки взаимодействовали с компьютером, чтобы получить текущую дату и время (date), просмотреть календарь (cal), проверить расположение текущего рабочего каталога (pwd) и получить список всех файлов и каталогов, расположенных в нем (ls).

*у нас в папке пока ничего нет, поэтому команда ls не дала вывода.

Что такое скриптинг (сценарии Bash)

Теперь представьте, что выполнение всех вышеперечисленных команд является вашей ежедневной задачей. Каждый день вы должны безошибочно выполнять все вышеперечисленные команды, а также сохранять наблюдаемую информацию. Вскоре это станет чрезвычайно утомительной задачей, обреченной на провал. Поэтому очевидная идея - придумать способ выполнения всех команд вместе. Именно здесь скриптинг становится вашим спасением.

Чтобы понять, что подразумевается под сценариями, используйте shell в сочетании с вашим любимым текстовым редактором, например vi, чтобы создать новый файл task.sh, содержащий все вышеперечисленные команды, каждую в отдельной строке. После этого сделайте новый файл исполняемым с помощью команды chmod с опцией +x. И наконец, запустите новый скрипт, добавив к его имени ./.

Как видите, с помощью сценариев можно автоматизировать любое взаимодействие с оболочкой. Более того, теперь можно автоматически выполнять наш новый сценарий task.sh ежедневно в любое заданное время с помощью планировщика заданий cron и сохранять вывод сценария в файл при каждом его выполнении. Однако это уже другая история, а пока давайте сосредоточимся на предстоящей задаче.

Что такое Bash

До сих пор мы рассматривали shell и сценарии. А что насчет Bash? Где находится bash? Как уже упоминалось, bash является интерпретатором по умолчанию во многих системах GNU/Linux, поэтому мы использовали его, даже не осознавая этого. Вот почему наш предыдущий сценарий оболочки работает даже без определения bash в качестве интерпретатора. Чтобы узнать, какой у вас интерпретатор по умолчанию, выполните команду echo $SHELL:

Существуют различные другие интерпретаторы оболочки, такие как Korn shell, C shell и другие. Поэтому хорошей практикой является явное определение интерпретатора оболочки, который будет использоваться для интерпретации содержимого скрипта.

Имена файлов и разрешения

Далее давайте кратко обсудим права доступа к файлам и имена файлов. Вы, наверное, уже заметили, что для выполнения сценария shell файл должен быть сделан исполняемым с помощью команды chmod +x FILENAME. По умолчанию все вновь созданные файлы не являются исполняемыми, независимо от суффикса расширения файла.

На самом деле, расширение файла в системах GNU/Linux не имеет никакого значения, кроме того, что при выполнении команды ls для перечисления всех файлов и каталогов сразу становится ясно, что файл с расширением .sh - это, скорее всего, сценарий оболочки, а файл с .jpg - сжатое с потерями изображение.

В системах GNU/Linux команда file может быть использована для определения типа файла. Как видно из приведенного ниже примера, расширение файла не имеет никакого значения, а интерпретатор оболочки, в данном случае, имеет больший вес.

Таким образом, имя shell-сценария 0_xyz вполне допустимо, но по возможности его следует избегать.

Выполнение скриптов Bash

Далее поговорим об альтернативном способе выполнения сценариев bash. В упрощенном виде сценарий bash - это не что иное, как текстовый файл, содержащий инструкции, которые должны быть выполнены в порядке сверху вниз. То, как интерпретируются инструкции, зависит от определенного shebang или способа выполнения скрипта. Рассмотрим следующий видеопример:

Другим способом выполнения сценариев bash является явный вызов интерпретатора bash, например, $ bash date.sh , что позволяет выполнить сценарий без необходимости делать сценарий оболочки исполняемым и без объявления shebang непосредственно в сценарии оболочки. При явном вызове исполняемого двоичного файла bash содержимое нашего файла date.sh загружается и интерпретируется как сценарий оболочки Bash.

Относительный и абсолютный путь

Наконец, прежде чем мы запрограммируем наш первый официальный сценарий оболочки bash, давайте кратко обсудим навигацию оболочки и разницу между относительным и абсолютным путем к файлу.

Наверное, лучшая аналогия для объяснения относительного и абсолютного пути к файлу - это представить файловую систему GNU/Linux как многоэтажное здание. Корневой каталог (входная дверь здания), обозначенный /, обеспечивает вход во всю файловую систему (здание), а значит, дает доступ ко всем каталогам (уровням/комнатам) и файлам (людям).

Чтобы перейти в комнату 1 на уровне 3, нам сначала нужно войти в главную дверь /, затем пройти на уровень 3 level3/ и оттуда войти в комнату 1. Следовательно, абсолютный путь к этой конкретной комнате в здании - /level3/room1. Отсюда, если мы хотим посетить комнату2 на уровне 3, нам сначала нужно покинуть наше текущее местоположение - комнату1, введя ../, а затем включить название комнаты room2. Мы взяли относительный путь к room2, который в данном случае будет ../room2. Мы уже находились на уровне 3, поэтому не было необходимости покидать все здание и идти по абсолютному пути через главный вход /level3/room2.

К счастью, в GNU/Linux есть простой инструмент компас, который поможет вам ориентироваться в файловой системе в виде команды pwd. Эта команда при выполнении всегда выводит ваше текущее местоположение. В следующем примере используются команды cd и pwd для навигации по файловой системе GNU/Linux с использованием абсолютных и относительных путей.

Быстрый совет:

Выполните команду cd без аргументов, чтобы мгновенно перейти в домашний каталог пользователя из любого места. Выполните команду cd - для переключения между двумя последними посещенными местами. В каком каталоге вы оказались после выполнения команд cd ~ и cd .

Навигация по файловой системе GNU/Linux - это простая, но для многих очень запутанная тема. Ознакомьтесь с навигацией по файловой системе GNU/Linux, прежде чем переходить к следующим разделам этого учебника.

Читайте также: