Kph (Korn shell)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:09, 1 июня 2016.
Korn Shell
Парадигма императивный, скриптовый
Спроектировано Девид Корн
Первый   появившийся 1983
Лицензия Common Public License (AT&T ksh), mostly public domain with some GPL (pdksh), proprietary (dtksh), MirOS Licence (mksh)
Портал: http://www.kornshell.com/
Под влиянием
Bourne Shell, C Shell

Korn Shell (ksh) — командная оболочка UNIX, разработанная Девидом Корном в 1983 году. Korn Shell имеет полную обратную совместимость с Bourne Shell и содержит множество функций оболочки C Shell. Главным преимуществом Korn Shell является возможность использования данной оболочки в качестве языка программирования.

Особенности

  • Интерактивный командный язык для программирования высокого уровня
  • Платформо-независимый
  • Соответствует стандарту POSIX
  • Может использовать скрипты

Использование

В качестве оболочки, загружающейся при входе пользователя в систему (login shell)

  • AIX - проприетарная UNIX-подобная операционная система, разработанная компанией IBM
  • HP_UX - проприетарная UNIX-подобная операционная система, разработанная компанией Hewlett-Packard

В качестве скриптовой оболочки

  • Open Solaris - ОС с открытым исходным кодом, созданная на базе ОС Solaris компанией Sun Microsystems

Так же Korn Shell используется в QNX — коммерческой микроядерной операционной системе реального времени, предназначенной для встроенных систем.

Как утвержает сайт KornShell 80% клиентов AT&T Bell Laboratories использут Korn Shell.

История

Командная оболочка ksh была разработана в 1983 году Девидом Корном, работающим в AT&T Bell Labs. Так же в разработке участвовали другие сотрудники Bell Labs. До 2000 года командная оболочка Korn Shell была проприетарным программным обеспечением. Ksh88 — исходная версия Korn Shell. Ksh93 — расширенная версия оболочки Korn, до сих поддерживается авторами.

Новая функциональность ksh93

  • Дополнительные арифметические операции
  • Составные переменные (аналог структур) и дисциплинарная функции (аналог методов)
  • Ассоциативные массивы
  • Ссылки на переменные
  • Развёртывание параметров
  • Функции с собственной областью видимости
  • Зарезервированные переменные .sh и встроенные команды
  • История команд
  • Убрана возможность экспортирования функций и псевдонимов с помощью встроенных команд

Следующие версии ksh93

  1. Ksh93t
  2. Ksh93t+
  3. Ksh93u — последняя версия, выпущена 8 февраля 2011 года.
  4. Ksh93v — бета-версия.

Функциональность ksh93t+

Интерактивные возможности

  • Возможность использования скриптов
  • Возможность перенаправления потоков на произвольные файловые дескрипторы.
  • Поддержка Unicode
  • Автозавершение строки
  • Есть функция сохранения истории команд и автодополнение по данным из истории команд
  • Расширенный интерфейс командной строки: использование переменных $PS1
  • Возможность переопределения команд для их сокращения и подстановка параметров в * сокращенные псевдонимы команд с помощью команды alias.
  • Управление процессами
  • Развитая система горячих клавиш.

Программные возможности

  • Возможность использования функций (подпрограмм)
  • Обработка исключений
  • Поиск и замена по переменным
  • Ссылки на переменные
  • Функции с переменным числом параметров
  • Возможность устанавливать аргументы по умолчанию в функциях
  • Возможность определить пользовательские типы
  • Функция eval, позволяющая выполнить что-либо
  • Генератор псведослучайных чисел
  • Ассоциативные массивы
  • Встроенная поддержка арифметических операций над числами с плавающей точкой
  • Зарезервированные переменные .sh, встроенные команды и их динамическое расширение
  • Возможность использования компилятора shrcomp для байт-кода
  • Встроенный поиск с помощью регулярных выражений и паттернов
  • Составные переменные (аналог структур) и дисциплинарные функции (аналог методов)
  • Функции с собственной областью видимости

Межпроцессорное взаимодействие

  • Передача байтов по каналам, в том числе сериализованные объекты
  • Возможность подстановки команд (выходные данные одной команды могут быть использованы как аргументы другой)
  • Возможность подстановки процессов если система поддерживает /dev/fd/<n>
  • Поддержка TCP, UDP соединения в виде потоков, а так же клиента SCTP соединения.

Примеры

Пример использования составных переменных

Инициализация переменной

now = "May 20 2001 19:44:57"
now.hour = 19
now.minute = 44

Использование переменной

$ print ${now.hour}
19
$ print $now.hour
May 20 2001 19:44:57.hour

Пример использования зарезервированной переменной .sh и составных переменных

$ print ${.sh.version}
Version M 1993-12-28 m

Пример использования ссылок на переменные

Инициализация переменной и создание ссылки на неё

$ name = "bill"                      
$ nameref firstname = name

Использование ссылки

$ print $firstname                
bill

Изменение значения по ссылке

$ firstname = "arnold"                
$ print $name                       
arnold

Пример скрипта, создающего и использующего объект

#! /usr/bin/ksh93typeset -T Point_t = (
     integer -h 'x coordinate' x = 0
     integer -h 'y coordinate' y = 0
     typeset -h 'point color'  color = "red"     function getcolor {
          print -r ${_.color}
     }     function setcolor {
          _.color=$1
     }     setxy() {
          _.x=$1; _.y=$2
     }     getxy() {
          print -r "(${_.x},${_.y})"
     }
)Point_t point

echo "Initial coordinates are (${point.x},${point.y}). Color is ${point.color}"point.setxy 5 6
point.setcolor blueecho "New coordinates are ${point.getxy}. Color is ${point.getcolor}"exit 0

Результат работы скрипта

$ ./example1
Initial coordinates are (0,0). Color is red
New coordinates are (5,6). Color is blue
$

Влияние других командных оболочек

Bourne Shell и CShell отказали большое влияние на Korn Shell.

Bourne Shell

Сначала ksh была модификацией командной оболочки Bourne shell. И до сих пор ksh сохраняет полную обратную совместимость с Bourne shell, то есть все программы, написанные для оболочки Bourne, могут работать ksh.

Bourne Shell была разработана в 1977 году Стивеном Борном, так же работавшим на AT&T Bell Labs. Это скриптовый язык, базирующийся на командах языка алгол 68. Bourne Shell распространялась с 7-й версией UNIX, и до сих пор используется во многих дистрибутивах как оболочка по умолчанию и оболочка для суперпользователя root.

Отличия Korn Shell от Bourne Shell

  • Платформонезависимость
  • Автозавершение строки
  • Функция сохранения истории команд
  • Встроенная возможность переопределения команд
  • Значительно расширена область программных возможностей
  • Возможность подстановки процессов
  • Поддержка TCP, UDP соединения в виде потоков

C shell

C shell - командная оболочка со встроенным скриптовым языком. Была разработана в 1979 году Биллом Джоем, когда он учился в Калифорнийском Университете. Билл Джой участвовал в разработке BSD UNIX, стал одним из основателей компании Sun Microsystems и создал текстовый редактор vi.

Сsh основана на стандарте POSIX и на языке Си. Является базовой частью freeBsd и OpenBSD. Главная особенность csh — возможность использования в качестве языка программирования.

Отличия Korn Shell от C Shell

  • Поддержка функций (подпрограмм)
  • Обработка исключений и другие возможности, связанные с использованием функций.
  • Встроенный поиск с помощью регулярных выражений
  • Возможность подстановки процессов
  • Поддержка TCP, UDP соединения в виде потоков
  • Не поддерживает неявную смену директории (если команда — имя директории, то происходит переход в эту директорию) Implicit Directory Change If command is dir name changes to it

Лицензия

До 2000 года командная оболочка Korn Shell была проприетарным ПО компании AT&T. В 2000 году Korn Shell стала открытым программным обеспечением. В 2005 году получила лицензию Eclipse Public Liscence (EPL). Это свободная лицензия открытого ПО, базирующаяся на Common Public License, но использующая более гибкие правила отказа от авторских прав.

Другие версии ksh

До открытия исходного кода Korn Shell был создан ряд альтернативных оболочек с отрытым исходным кодом:

  • pdksh
  • mksh — ответвление от pdksh.
  • GNU bash
  • zsh

Другие командные оболочки, относящиеся к Korn Shell

  • dtksh — Desktop Korn Shell — ответвление от ksh93, разрабатывалась как часть среды рабочего стола CDE.
  • tksh — ответвление от ksh93, предоставляет доступ к библиотеке базовых элементов графического интерфейса Tk
  • MKS Korn Shell — проприетарная версия Microsoft. Входит в состав Microsoft Windows Services for UNIX — программный пакет, обеспечивающий часть среды UNIX на Windows.

Список литературы

  1. Learning the Korn Shell, 2nd Edition
  2. IBM Knowledge Center, Оболочка Korn

Ссылки

  1. KornShell
  2. Using Types To Create Object Orientated Korn Shell
  3. Comparison of command shells