В самых первых моделях автосигнализаций передача данных от брелка к сигнализации осуществлялась наиболее простым способом — фиксированными командами. Это значит, что для каждой команды существовал определенный код, который раз за разом передавался от брелка сигнализации и обратно. Этот способ передачи информации отличался простотой и удобством, однако, безопасности ему недоставало. Для угона автомобиля, оснащенного подобной сигнализацией, использовался так называемый «кодграббер«.
Кодграббер — это специальное устройство, способное перехватывать радиоволны и воспроизводить их. Таким образом, когда водитель ставит автомобиль в режим охраны, угонщики записывают эту команду. Чуть позже, когда водитель уже потерял из виду свой автомобиль, угонщики воспроизводят команду постановки в охрану. Сигнализация воспринимает сигнал от кодграббера как сигнал от брелка и снимает автомобиль с охраны, злоумышленники успешно угоняют автомобиль. Эта проблема была решена введением динамического кода.
Так как использовать статический код уже было небезопасно, разработчики программного обеспечения сигнализаций решили ввести код, который будет меняться после каждой команды. Это решение оказалось действенным, однако, ненадолго. Так как изменение кода происходило по определенным алгоритмам, люди научились их разгадывать. Кроме того, некоторые производители автомобилей использовали одинаковый алгоритм шифрования для широкого спектра автомобилей, что позволяло создать «мануфактурные кодграбберы». Таким образом, динамический код так же показал свою ненадежность, для решения этой проблемы и был придуман диалоговый код.
Диалоговый код — это алгоритм, обеспечивающий надежную защиту от всех известных кодграбберов. Если не вдаваться в подробности, то и брелок и сигнализация оснащаются специальными алгоритмами шифрования. Вместо того, чтобы следовать обычной цепочке (отправка команды -> выполнение команды), сигнализация, использующая диалоговый код с индивидуальными ключами шифрования, следует по более надежной схеме (отправка команды -> проверка отправителя -> подтверждение отправителя -> выполнение команды). А теперь более подробно:
Важно отметить, что, хотя это все может выглядеть, как долгий и сложный алгоритм, в реальности он выполняется за доли секунды. Таким образом, надежность сигнализации непомерно выросла, не жертвуя при этом быстродействием и удобством. Диалоговый код сегодня применяется на всех выпускаемых сигнализациях StarLine. Это обеспечивает высшую степень сохранности Вашего автомобиля.
Приглашаем Вас на консультацию.
или позвоните нам
(812) 425-37-55
для бесплатной консультации
по выбору охранной системы с функцией автозапуска
Мы часто слышим, что команду, которую посылает радиобрелок, можно перехватить специальным прибором — так называемым код-граббером или сканером.
Наглядным примером нам послужит автомобильная сигнализация.
Радиоканал, по которому передаются данные между сигнализацией и брелоком обладает одним большим недостатком — радиоволны распространяются не направленно и обмен можно прослушать, находясь далеко от владельца автомобиля. Такие каналы связи называют незащищенными и данные, которые по ним передаются, шифруют.
Данные по радиоканалу передают в виде небольших последовательностей — пакетов. Каждый пакет можно представить как команду например, «Открой замок», ответ на команду например, «Замок открыт».
Самые первые сигнализации с радиоканалом имели статический код — каждой команде соответствовал свой командный пакет. Формат пакета выбирал сам пользователь (или установщик), переключая движки внутри брелока, или запаивая перемычки.
Так как вариантов кода было немного, то иногда своим брелоком можно было открыть чужую машину с такой же сигнализацией — форматы пакетов совпадали. Конечно, такое кодирование никакой защиты не обеспечивало — достаточно было один раз прослушать пакет, соответствующий команде «Снять с охраны», чтобы потом, просто повторив его, получить доступ к автомобилю.
Наверное, именно тогда появились первые кодграбберы — технические устройства, предназначенные для перехвата, декодирования и повтора кода. Конечной целью злоумышленника, который пользуется кодграббером, является снятие с охраны «приглянувшегося» автомобиля, а затем кража из салона или угон.
Даже для самых первых кодграбберов статический код не представлял никакой проблемы, поэтому вскоре все производители сигнализаций перешли на динамическое кодирование.
Динамический код отличается от статического тем, что при каждом нажатии на кнопку формат пакета меняется.
Пакет меняется по определенному закону, который известен только сигнализации и запрограммированному в нее брелоку. Это означает, что просто повторить записанный пакет нельзя — старые пакеты сигнализация отбрасывает.
Рисунок 1. Динамический код
На первых порах казалось, что этого будет достаточно, и что проблема кодгабберов решена — но не тут то было! Динамическое кодирование тоже не устояло перед новыми кодграбберами.
Самым известным алгоритмом динамического кодирования является Keeloq.
В Интернете давно гуляют слухи в взломе Keeloq, однако это не соответствует действительности. Аналитически алгоритм Keeloq до сих пор не взломан — взломаны его неудачные реализации. Например, многие производители автомобилей «грешат» тем, что используют один и тот же ключ для всех систем, что позволяет создать так называемые «мануфактурные» кодграбберы.
Взламывают динамическое кодирование несколькими способами.
Первый способ: аналитический. В основе этого способа лежат «дыры», которые случайно или сознательно оставили в алгоритме разработчики системы. Пример приведен выше — одинаковые ключи у штатных охранных систем некоторых автомобилей.
Второй способ: замена кода, метод, который в свое время наделал много шума и заставил производителей сигнализаций разнести команды постановки и снятия с охраны на разные кнопки брелока. При использовании этого способа кодграббер записывает несколько посылок брелока пользователя, а потом использует одну из них для снятия автомобиля с охраны.
Многие производители автомобильных систем охраны разрабатывали свои собственные динамические коды, внося различные улучшения. Некоторые из них так до сих пор и не вскрыты, и вроде бы могут использоваться в охранных системах. Однако необходимо понимать, что ни один динамический код не гарантирует защиту от взлома.
Самым криптостойким и надежным считается диалоговое кодирование, которое требует двустороннего канала связи, то есть наличия приемника и передатчика, как в основном модуле, так и в брелоке.
Алгоритм работы диалогового кодирования удобно объяснять, используя семью: мужа и жену.
Представьте, что «муж» находится в доме и кроме «жены» никого пускать не хочет. В двери нет глазка, а в доме нет окон. После того как «муж» услышал стук в дверь, ему нужно определить, действительно ли за дверью стоит «свой», т.е. «жена». Самый лучший способ — это задать вопрос, правильный ответ на который может дать только «жена». Если человек за дверью ответит верно — смело открывать дверь это «свой».
Точно так же работает и сигнализация с диалоговым кодом:
1. При нажатии на кнопку брелок посылает пакет с запросом на авторизацию («стучит в дверь»).
2. Основной модуль, приняв этот пакет, придумывает «загадку», ответ на которую может быть только один. «Загадка» передается брелоку по радиоканалу.
3. Брелок, разгадав «загадку», отвечает пакетом подтверждения.
4. Основной модуль проверяет ответ и, если он верен, выполняет команду брелока («открывает дверь»).
Рисунок 2. Структура диалогового кода
Теперь давайте добавим в нашу историю еще одного персонажа «чужой», который очень хочет попасть в дом к нашей семье. При определенных условиях «чужой» может подслушать разговор между мужем и женой, и узнать ответ на загадку «мужа». Поэтому загадки каждый раз должны быть разные.
В диалоговом кодировании роль загадки играет случайное число, которое сгенерировано по специальному алгоритму. «Случайность» этого числа очень высока. При этом ответ на загадку болжен поступить за строго отведенный интервал времени — за доли секунд.
Представим, что вопросы, которые задает «муж» — даты исторических событий. Что будет делать «чужой», если узнает об этом? Подготовит ответ и сможет пробраться в дом?
В диалоговом кодировании процесс разгадывания «загадки» уникальный для каждой системы «сигнализация» — «брелок». Это реализовано — уникальным ключом шифрования, который создается при привязке брелока к системе.
Система, приняв динамически кодированную команду («пароль»), не выполняет ее сразу, а посылает запрос на подтверждение – некое случайное число, также динамически кодированное. Брелок его принимает и при помощи секретного ключа и сложного алгоритма формирует «отзыв», снова динамически перекодирует и шлет системе. Если отзыв верен, то система выполняет команду, причём процесс занимает доли секунды. В отличие от брелка кодграббер в руках даже самого матерого угонщика не знает алгоритма изменения кода, ключа шифрования и не способен сформировать отзыв за отведенное на это время.
Рисунок 3. Обобщенный вид диалогового кода
В итоге, на сегодняшний день (и надолго вперед) полноценную защиту от электронного взлома обеспечивает только диалоговый код с индивидуальными ключами шифрования.
А знаете, как устроены системы опознавания в военной авиации? Там стоит система запроса «Свой — чужой», т.е. диалоговое кодирование. Если на запрос с земли самолет правильно не отвечает, его сбивают!
В электронных замках «АРБат» мы используем диалоговое кодирование — систему опознавания, как в самолете.
Трейси Браун 17 октября 2017 г. USSD Азия
USSD-коды Dialog Шри-Ланка для Шри-Ланки добавлены ниже. См. код проверки баланса Dialog ниже, а также код пополнения счета Dialog. См. также, как проверить номер диалога. Обратите внимание, что настройки APN для Dialog также были добавлены на этот веб-сайт, поэтому найдите ссылку на боковой панели или просто воспользуйтесь кнопкой поиска. Приведенные ниже USSD-коды сделают для вас несколько вещей, однако вам необходимо сначала настроить параметры SMS для Dialog, чтобы сначала войти в сеть. Это последние настройки USSD для сети.
Table of Contents
Dialog Sri Lanka USSD CodesService | USSD Code | SMS / Call | ||
Owner Identity | #132# | |||
Остаток (по предоплате) | *#456# | 456 | ||
Остаток (постоплата) | *#456# | 456 | 00021*#123#cardNumber# | |
Служба поддержки клиентов | Позвоните по номеру 678 или 0777678678 |
Вы увидите код обслуживания клиентов, для которого требуется пополнение карты, а также диалоговое окно. Также есть код проверки баланса Dialog. Это относится как к постоплатным телефонам по контракту, так и к картам предоплаты. Вы также можете проверить свою личность телефона, как показано выше. Как проверить номер диалога, см. ниже и выше. Вы можете увидеть, как проверить номер диалога в сети.
Код проверки баланса Dialog
Если вы хотите проверить баланс в сети Dialog. Тогда вы можете найти код проверки баланса здесь. Все это является частью USSD-кодов Dialog Шри-Ланка, но это можно сделать с помощью USSD-кода или SMS-кода, чтобы проверить свой баланс в Dialog. См. приведенные ниже коды, чтобы узнать, как это сделать.
Код проверки баланса (предоплата) USSD *#456# / SMS 456
Код проверки баланса (постоплата) USSD *#456# / SMS 456
Диалоговое окно пополнения счета *#123#номеркарты#
Диалоговый код пополнения счетаВам нужно будет добавить карту в следующий раз, когда вы перезарядите свой мобильный телефон. Это *#123#YourCardNumber#. Вы можете видеть, что он начинается с * и заканчивается # . Это выглядит следующим образом:
Пополнить карту/Пополнить: *#123#cardNumber#
Как проверить номер диалога
Если вы хотите проверить свой номер телефона. Это можно сделать при использовании следующего USSD-кода. Итак, теперь вы знаете, как проверить свой номер Dialog. Это код проверки номера диалога, поэтому протестируйте его сегодня и посмотрите, какой у вас номер телефона. Да, номер проверки баланса Dialog теперь объяснен.
Код проверки номера диалога: (код USSD) #132#
Dialog APN settings for InternetName | Dialog |
APN | DialogBB |
Check Data Balance | Type MYUSE и SMS до 678 |
Купить пакет данных (предоплата) | # 678 # |
Вы должны установить номер центра сообщений до того, как отправите короткое сообщение. Вы должны предварительно установить номер центра сообщений (+9477000003). Этот процесс настройки является разовым усилием. Как правило, шаги следующие; при необходимости используйте их вместе с руководством по телефону:
Вы должны следовать этому процессу, поэтому, если вы следовали описанному выше процессу, чтобы изменить настройки SMS, это хорошо. Настройки APN уже были перечислены в другом месте на этом сайте. Поговорите с ними, если вы не получите результат от настроек, которые вы ищете. Выполните поиск на этом веб-сайте для получения дополнительной информации. Обратите внимание, что они время от времени меняются, однако это самая последняя информация о сети мобильной связи Hutch в Шри-Ланке.
Код данных Dialog
Dialog теперь предлагает бесплатные данные, кредит и SMS клиентам с низким балансом. Это не нужно возвращать, и это временное предложение. Вам нужно будет активировать бесплатные данные от Dialog следующим образом.
D2D Voice – 250 минут
D2D SMS – 250 SMS
Данные в любое время – 1 ГБ
Срок действия – 7 дней 7-дневный период после активации. Когда срок действия бесплатных данных истек, вы можете повторно активировать их, набрав #006# 9.0006
Это будет предложено до дальнейшего уведомления.
(Updated October 2020)
Теги Диалог Шри-Ланка SMS и USSD USSD Азия
Я разрабатываю веб-сайты и контент для веб-сайтов, связанных с посольствами со всего мира. Смотрите больше страниц и контента о тайских посольствах со всего мира. Здесь перечислены все тайские посольства от Канады до Непала. См. другие веб-сайты, перечисленные на боковой панели для посольств США, Канады и Великобритании.
Предыдущий диалог Шри-Ланка Настройки APN
Код балансировки Next Hutch
Главная |
Предыдущий | Содержание | Далее
Если мы посмотрим на современное программное обеспечение, мы можем быть удивлены, узнав, что большая часть кода в большинстве современных программ имеет очень мало общего с реальной работой, для которой программа была предназначена. Скорее, большая часть кода используется для создания пользовательского интерфейса. Современные графические программы требуют большого количества процессорного времени и памяти для своих сложных глазных конфет. Это помогает объяснить, почему программы командной строки обычно используют так мало памяти и ЦП по сравнению с их аналогами с графическим интерфейсом.
Тем не менее, интерфейс командной строки часто неудобен. Если бы только был какой-то способ эмулировать общие функции графического интерфейса пользователя на текстовом дисплее.
В этом приключении мы рассмотрим диалог
, программу, которая делает именно это. Он отображает различные виды диалоговых окон, которые мы можем включить в наши сценарии оболочки, чтобы придать им более дружественный вид. dialog
появился несколько лет назад и теперь является лишь одним из членов семейства программ, которые пытаются решить проблему пользовательского интерфейса для пользователей командной строки. Приключение «Больше перенаправлений» является рекомендуемым предварительным условием для этого приключения.
диалоговое окно
мы можем генерировать следующие типы диалоговых окон (показана версия 1.2):Список сборок | --список сборки | Отображает два списка рядом. Список слева содержит невыбранные элементы, список справа — выбранные элементы. Пользователь может перемещать элементы из одного списка в другой. |
Календарь | --календарь | Отображает календарь и позволяет пользователю выбрать дату. |
Контрольный список | --контрольный список | Представляет список вариантов и позволяет пользователю выбрать один или несколько элементов. |
Выбор каталога | --dselect | Отображает диалоговое окно выбора каталога. |
Поле редактирования | --editbox | Отображает простейший редактор текстовых файлов. |
Форма | --форма | Позволяет пользователю вводить текст в несколько полей. |
Выбор файла | --fselect | Диалог выбора файла. |
Манометр | --манометр | Отображает индикатор выполнения, показывающий процент выполнения. |
Информационный ящик | --Информационный ящик | Отображает сообщение (с необязательной временной паузой) и завершает работу. |
Поле ввода | --ящик ввода | Предлагает пользователю ввести/редактировать текстовое поле. |
Блок меню | --менюбокс | Отображает список вариантов. |
Окно сообщений | --msgbox | Отображает текстовое сообщение и ожидает ответа пользователя. |
Ящик пароля | --пароль | Аналогичен полю ввода, но скрывает ввод пользователя. |
Пауза | --пауза | Отображает текстовое сообщение и таймер обратного отсчета. Диалоговое окно закрывается, когда истекает время таймера или когда пользователь нажимает кнопку «ОК» или «Отмена». |
Блок программ | --programbox | Отображает вывод переданной команды. Когда команда завершается, диалоговое окно ожидает, пока пользователь не нажмет кнопку OK. |
Блок прогресса | --прогрессбокс | Аналогичен окну программы, за исключением того, что диалоговое окно закрывается после завершения переданной команды, а не ждет, пока пользователь нажмет OK. |
Список радиостанций | --радиолог | Отображает список вариантов и позволяет пользователю выбрать один элемент. Любой ранее выбранный элемент становится невыбранным. |
Коробка диапазона | --диапазон | Позволяет пользователю выбирать числовое значение из указанного диапазона с помощью ползунка на клавиатуре. |
Хвостовая коробка | --задняя коробка | Отображает текстовый файл с обновлениями в реальном времени. Работает как команда хвост -f . |
Текстовое поле | --текстовое поле | Простой просмотрщик текстовых файлов. Поддерживает многие из тех же клавиатурных команд, что и , но меньше . |
Таймбокс | --таймбокс | Диалоговое окно для ввода времени суток. |
Дерево | --treeview | Отображает список элементов в древовидной иерархии. |
Да/Нет Поле | --да нет | Отображает текстовое сообщение и дает пользователю возможность ответить «Да» или «Нет». |
Вот несколько примеров:
Снимок экрана диалогового окна yesnoСнимок экрана диалогового окна radiolistСнимок экрана диалогового окна fselectдиалоговое окно доступно в большинстве репозиториев дистрибутивов как пакет «dialog». Помимо самой программы, пакет диалогов включает в себя довольно полную справочную страницу и большой набор примеров программ, демонстрирующих различные диалоговые окна, которые он может отображать. После установки в системе на основе Debian эти примеры программ можно найти в папке 9.0298 /usr/share/doc/dialog/examples каталог. Другие дистрибутивы аналогичны.
Между прочим, использование Midnight Commander для просмотра каталога примеров — отличный способ запустить примеры программ и изучить сами сценарии: кажется прямолинейным. Мы запускаем диалоговое окно, за которым следуют один или несколько общих параметров (параметры, которые применяются независимо от желаемого диалогового окна), а затем параметр поля и связанные с ним параметры. Сложная часть использования
диалог
получает из него данные.
Данные, которые принимает диалоговое окно
(например, строка, введенная в поле ввода), обычно возвращаются при стандартной ошибке. Это связано с тем, что диалоговое окно
использует стандартный вывод для отображения текста на терминале, когда он рисует само диалоговое окно. Есть несколько методов, которые мы можем использовать для обработки возвращаемых данных. Давайте посмотрим на них.
диалог
приведите несколько примеров (для ясности этот скрипт был изменен по сравнению с оригиналом):#!/bin/bash # inputbox - продемонстрировать диалоговое окно ввода с временным файлом # Определяем коды состояния выхода из диалога : ${DIALOG_OK=0} : ${DIALOG_CANCEL=1} : ${DIALOG_HELP=2} : ${DIALOG_EXTRA=3} : ${DIALOG_ITEM_HELP=4} : ${DIALOG_ESC=255} # Создайте временный файл и убедитесь, что он исчезнет, когда мы закончим tmp_file=$(tempfile 2>/dev/null) || tmp_file=/tmp/test$$ ловушка "rm -f $tmp_file" 0 1 2 5 15 # Генерируем диалоговое окно диалог --title "ПОЛЯ ВВОДА" \ --прозрачный \ --поле ввода \ "Привет, это диалоговое окно ввода. Вы можете использовать \n это, чтобы задать вопросы, которые требуют от пользователя \n чтобы ввести строку в качестве ответа. Вы можете\n вводные строки длины больше, чем \n ширина поля ввода, в этом случае \n поле ввода будет автоматически прокручиваться. \n Вы можете использовать BACKSPACE для исправления ошибок. \n\n Попробуйте ввести свое имя ниже: "\ 16 51 2> $tmp_file # Получить статус выхода возвращаемое_значение=$? # Действуй по этому поводу case $return_value в $DIALOG_OK) echo "Результат: `cat $tmp_file`";; $DIALOG_CANCEL) echo "Отмена нажата.";; $DIALOG_HELP) echo "Справка нажата.";; $DIALOG_EXTRA) echo "Нажата дополнительная кнопка.";; $DIALOG_ITEM_HELP) echo "Кнопка справки по элементу нажата.";; $DIALOG_ESC) если тест -s $tmp_file ; затем кот $tmp_file еще эхо "ESC нажата." фи ;; эсак
Первая часть скрипта определяет некоторые константы, которые используются для представления шести возможных значений состояния выхода, поддерживаемых
. Они используются, чтобы сообщить вызывающему сценарию, какая кнопка в диалоговом окне (или, альтернативно, клавиша Esc) была использована для завершения диалога. Конструкция, используемая для этого, несколько интересна. Во-первых, каждая строка начинается с нулевой команды «:», которая ничего не делает. Да, действительно. Он намеренно ничего не делает, потому что иногда нам нужна команда (по причинам синтаксиса), но на самом деле мы ничего не хотим делать. За нулевой командой следует расширение параметра. Расширение похоже по форме на то, что мы рассмотрели в главе 34 TLCL:
${
параметр :=
значение }
Устанавливает значение по умолчанию для параметра (переменной), который либо не установлен (его вообще не существует), либо установлен, но пустой. Автор примера кода здесь очень осторожен и удалил двоеточие из расширения. Это изменяет значение расширения, означая, что значение по умолчанию устанавливается только в том случае, если параметр не установлен, а не не установлен или пуст.
В следующей части примера создается временный файл с именем tmp_file
с помощью команды tempfile
, которая представляет собой программу, используемую для безопасного создания временного файла. Далее мы устанавливаем ловушку, чтобы гарантировать, что временный файл будет удален, если программа каким-либо образом завершится. Аккуратность имеет значение!
Наконец-то мы добрались до самой команды диалога
. Мы начинаем с установки заголовка для поля ввода и указываем параметр --clear
, чтобы сообщить диалогу
, что мы хотим стереть любое предыдущее диалоговое окно с экрана. Затем мы указываем тип диалогового окна, которое мы хотим, и его необходимые аргументы. К ним относятся текст, который будет отображаться над полем ввода, а также желаемая высота и ширина поля. Хотя в примере указаны точные размеры коробки, мы также можем указать ноль для обоих значений и 9.Диалоговое окно 0298
Поскольку диалог
обычно выводит свои результаты в стандартную ошибку, мы перенаправляем его файловый дескриптор в наш временный файл для хранения.
Последнее, что нам нужно сделать, это собрать статус выхода команды в переменной ( return_value
), чтобы мы могли выяснить, какую кнопку нажал пользователь, чтобы закрыть диалоговое окно. В конце скрипта мы смотрим на это значение и действуем соответственно.
Второй метод получения данных из диалога
предполагает перенаправление. В следующем сценарии мы передаем результаты диалога
в переменную, а не в файл. Для этого нам нужно сначала выполнить некоторое перенаправление.
#!/бин/баш # inputbox - продемонстрировать диалоговое окно ввода с перенаправлением # Определяем коды состояния выхода из диалога : ${DIALOG_OK=0} : ${DIALOG_CANCEL=1} : ${DIALOG_HELP=2} : ${DIALOG_EXTRA=3} : ${DIALOG_ITEM_HELP=4} : ${DIALOG_ESC=255} # Дублировать (сделать резервную копию) файлового дескриптора 1 # на дескрипторе 3 выполнить 3>&1 # Создать диалоговое окно при запуске диалога в подоболочке результат=$(диалог \ --title "ПОЛЯ ВВОДА" \ --прозрачный \ --поле ввода \ "Привет, это диалоговое окно ввода. Вы можете использовать \n это, чтобы задать вопросы, которые требуют от пользователя \n чтобы ввести строку в качестве ответа. Вы можете\n вводные строки длины больше, чем \n ширина поля ввода, в этом случае \n поле ввода будет автоматически прокручиваться. \n Вы можете использовать BACKSPACE для исправления ошибок. \n\n Попробуйте ввести свое имя ниже: "\ 16 51 2>&1 1>&3) # Получить статус закрытия диалога возвращаемое_значение=$? # Закрыть файловый дескриптор 3 выполнить 3>&- # Действуем по статусу выхода case $return_value в $DIALOG_OK) echo "Результат: $результат";; $DIALOG_CANCEL) echo "Отмена нажата.";; $DIALOG_HELP) echo "Справка нажата.";; $DIALOG_EXTRA) echo "Нажата дополнительная кнопка.";; $DIALOG_ITEM_HELP) echo "Кнопка справки по элементу нажата.";; $DIALOG_ESC) если тест -n "$ результат" ; затем эхо "$результат" еще эхо "ESC нажата." фи ;; эсак
На первый взгляд перенаправление может показаться бессмысленным. Во-первых, мы дублируем файловый дескриптор 1 (stdout) в дескриптор 3, используя exec
(это было рассмотрено в разделе «Дополнительные перенаправления»), чтобы создать резервную копию дескриптора 1.
Следующим шагом является выполнение подстановки команд и назначение вывода диалоговая команда для переменной результат
. Команда включает перенаправление дескриптора 2 (stderr), чтобы он был дубликатом дескриптора 1, и, наконец, дескриптор 1 восстанавливается до исходного значения путем дублирования дескриптора 3, содержащего резервную копию. Что может быть не сразу очевидно, так это то, почему необходимо последнее перенаправление. Внутри подоболочки стандартный вывод (дескриптор 1) не указывает на управляющий терминал. Скорее, он указывает на канал, который будет доставлять свое содержимое в переменную 9.0298 результат . Поскольку диалогу требуется стандартный вывод, чтобы указать на терминал, чтобы он мог отображать поле ввода, мы должны перенаправить стандартную ошибку на стандартный вывод (чтобы вывод из диалогового окна
заканчивался в переменной результата
), а затем перенаправить стандартный вывод обратно на управляющий терминал. [0-3]$ ]]; затем
случай $REPLY в
1)
эхо «Имя хоста: $HOSTNAME»
время безотказной работы
спать $DELAY
продолжать
;;
2)
дф-ч
спать $DELAY
продолжать
;;
3)
если [[ $(id -u) -eq 0 ]]; затем
echo «Использование домашнего пространства (все пользователи)»
du -sh /home/* 2> /dev/null
еще
echo «Использование домашнего пространства ($USER)»
du -sh $HOME 2> /dev/null
фи
спать $DELAY
продолжать
;;
0)
перерыв
;;
эсак
еще
эхо «Неверная запись.»
спать $DELAY
фи
сделанный
echo «Программа завершена.» Скрипт, отображающий текстовое меню
Сценарий, отображающий простое меню выбора. После того, как пользователь вводит выбор, выбор проверяется, чтобы убедиться, что это один из разрешенных вариантов (цифры 0-3), и в случае успешной проверки используется оператор case
для выполнения выбранного действия. Результаты отображаются в течение количества секунд, определяемого константой DELAY
, после чего весь процесс повторяется до тех пор, пока пользователь не выберет пункт меню для выхода из программы.
Вот скрипт, модифицированный для использования диалога
для обеспечения нового пользовательского интерфейса:
#!/bin/bash # while-menu-dialog: программа системной информации, управляемая меню DIALOG_CANCEL=1 DIALOG_ESC=255 ВЫСОТА=0 ШИРИНА=0 display_result () { диалог --title "$1" \ --нет-свернуть \ --msgbox "$результат" 0 0 } пока верно; делать выполнить 3>&1 выбор=$(диалог \ --backtitle "Информация о системе" \ --title "Меню" \ --прозрачный \ --cancel-метка "Выход" \ --menu "Выберите:" $HEIGHT $WIDTH 4 \ "1" "Отобразить системную информацию" \ "2" "Отобразить место на диске" \ "3" "Отображение использования домашнего пространства" \ 2>&1 1>&3) выход_статус=$? выполнить 3>&- случай $exit_status в $DIALOG_CANCEL) прозрачный echo "Программа завершена. " Выход ;; $DIALOG_ESC) прозрачный эхо "Программа прервана." >&2 выход 1 ;; эсак случай $выбор в 1 ) результат=$(эхо "Имя хоста: $HOSTNAME"; время безотказной работы) display_result "Информация о системе" ;; 2 ) результат=$(дф-ч) display_result "Дисковое пространство" ;; 3 ) если [[ $(id -u) -eq 0 ]]; затем результат=$(du -sh /home/* 2> /dev/null) display_result «Использование домашнего пространства (все пользователи)» еще результат=$(du -sh $HOME 2> /dev/null) display_result "Использование домашнего пространства ($USER)" фи ;; эсак сделаноСкрипт для отображения диалогового менюОтображение результатов с помощью msgbox
Как мы видим, скрипт имеет структурные изменения. Во-первых, нам больше не нужно подтверждать выбор пользователя. Окно меню позволяет только действительный выбор. Во-вторых, в самом начале определена функция для отображения результатов каждого выбора.
Мы также заметили, что некоторые из общих параметров диалога
были использованы:
--no-collapse
предотвращает диалог
от переформатирования текста сообщения. Используйте это, когда требуется точное представление текста.
--backtitle
устанавливает заголовок фона под диалоговым окном.
--clear
очищает фон любого предыдущего диалогового окна.
--cancel-label
устанавливает строку, отображаемую на кнопке «Отмена». В этом сценарии для него установлено значение «Выход», так как это лучшее описание действия, выполняемого при его выборе.
Несмотря на то, что диалог
может создавать диалоговые окна многих типов, необходимо помнить, что диалог
имеет существенные ограничения. Некоторые диалоговые окна ведут себя довольно странно по сравнению с их традиционными аналогами с графическим интерфейсом.