Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Редактирование сценария оболочки FreeBSD для настройки ipfirewall

Сценарий оболочки является компьютерная программа предназначена для запуска на Unix оболочки , в интерпретатор командной строки . [1] Различные диалекты сценариев оболочки считаются языками сценариев . Типичные операции, выполняемые сценариями оболочки, включают манипулирование файлами, выполнение программы и печать текста. Сценарий, который устанавливает среду, запускает программу и выполняет необходимую очистку, ведение журнала и т. Д., Называется оболочкой .

Этот термин также используется в более общем смысле для обозначения автоматического режима запуска оболочки операционной системы; в определенных операционных системах они называются другими вещами, такими как командные файлы (поток MSDos-Win95, OS / 2 ), командные процедуры (VMS) и сценарии оболочки ( поток Windows NT и сторонние производные, такие как 4NT - статья находится в cmd. exe ), а операционные системы мэйнфреймов связаны с рядом терминов.

Типичная установка, совместимая с Unix / Linux / POSIX, включает KornShell ( ksh) в нескольких возможных версиях, таких как ksh88, Korn Shell '93 и другие. Самая старая оболочка, которая все еще широко используется, - это оболочка Bourne ( sh); Системы Unix также неизменно включают в себя оболочку C ( csh), Bash ( bash), удаленную оболочку ( rsh), Secure Shell ( ssh) для соединений telnet SSL и оболочку, которая является основным компонентом обычно вызываемой установки Tcl / Tk ; желаниеtclshпредставляет собой оболочку Tcl / Tk на основе графического интерфейса. Оболочки C и Tcl имеют синтаксис, очень похожий на синтаксис упомянутых языков программирования, а оболочки Korn и Bash являются развитием оболочки Bourne, которая основана на языке ALGOL с добавленными элементами ряда других. [2] С другой стороны, различные оболочки плюс такие инструменты, как awk , sed , grep , BASIC , Lisp , C и т. Д., Внесли свой вклад в язык программирования Perl . [3]

Другие оболочки, доступные на компьютере или доступные для загрузки и / или покупки, включают оболочку Almquist ( ash), PowerShell ( msh), оболочку Z ( zshособенно распространенную расширенную оболочку KornShell), оболочку Tenex C ( tcsh), оболочку, подобную Perl ( psh). Также широко доступны связанные программы, такие как оболочки на основе Python , Ruby , C , Java , Perl , Pascal , Rexx и т. Д. В различных формах. Еще одна довольно распространенная оболочка - ош, на странице руководства которого указано, что он «является улучшенным, обратно совместимым портом стандартного командного интерпретатора из шестой редакции UNIX». [4]

Программное обеспечение для взаимодействия Windows и Unix, такое как MKS Toolkit , Cygwin , UWIN , Interix и другие, делает указанные выше оболочки и программирование Unix доступными в системах Windows, обеспечивая функциональность вплоть до сигналов и другого межпроцессного взаимодействия , системных вызовов и API . Гамильтон C оболочка представляет собой оболочку Windows , который очень похож на Unix C Shell. Microsoft распространила службы Windows для UNIX, в частности, для использования со своими операционными системами на базе NT, которые имеют подсистему среды POSIX .

Возможности [ править ]

Комментарии [ редактировать ]

Комментарии игнорируются оболочкой. Обычно они начинаются с символа решетки ( # ) и продолжаются до конца строки. [5]

Настраиваемый выбор языка сценариев [ править ]

Притон , или хэш-бах, это особый вид комментария , который система использует , чтобы определить , какой интерпретатор использовать для выполнения файла. Шебанг должен быть первой строкой файла и начинаться с " #! ". [5] В Unix-подобных операционных системах символы, следующие за префиксом « #! », Интерпретируются как путь к исполняемой программе, которая будет интерпретировать сценарий. [6]

Ярлыки [ править ]

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

Одним из примеров может быть создание версии ls , команды для вывода списка файлов с более коротким именем команды l , которое обычно сохраняется в каталоге bin пользователя как / home / username / bin / l , и набор по умолчанию предустановленных параметров команды.

#! / bin / sh LC_COLLATE = C ls -FCas " $ @ "

Здесь первая строка использует shebang, чтобы указать, какой интерпретатор должен выполнять остальную часть сценария, а вторая строка составляет список с параметрами для индикаторов формата файлов, столбцов, всех файлов (ни один из них не пропущен) и размера в блоках. LC_COLLATE = С устанавливает порядок сортировки по умолчанию , чтобы не сложить верхний и нижний регистр вместе, а не INTERMIX точечных файлов с нормальными именами файлов , как побочный эффект , игнорируя знаки препинания в именах (обычно точечных файлов отображается только в случае , если параметр , как -a используется), а "$ @" заставляет любые параметры, заданные l, проходить через ls как параметры, так что все обычные параметры и другой синтаксис, известные ls, могут по-прежнему использоваться.

Затем пользователь может просто использовать l для наиболее часто используемого краткого списка.

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

#! / bin / shЧистоls -al

В этом случае сценарий оболочки будет начинаться с обычной начальной строки #! / Bin / sh . После этого сценарий выполняет команду clear, которая очищает терминал от всего текста перед переходом к следующей строке. В следующей строке представлена ​​основная функция скрипта. Команда ls -al выводит список файлов и каталогов, находящихся в каталоге, из которого запускается сценарий. В Ls команда атрибуты могут быть изменены с учетом потребностей пользователя.

Примечание. Если в реализации отсутствует команда clear , попробуйте вместо нее использовать команду clr .

Пакетные задания [ править ]

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

#! / bin / sh printf  'компиляция ... \ n'cc -c foo.ccc -c bar.ccc -c qux.ccc -o myprog foo.o bar.o qux.oprintf  'готово. \ n'

Сценарий позволит пользователю сохранить редактируемый файл, приостановить работу редактора, а затем просто запустить ./build, чтобы создать обновленную программу, протестировать ее и затем вернуться в редактор. Однако примерно с 1980-х годов скрипты этого типа были заменены такими утилитами, как make, которые специализируются на сборке программ.

Обобщение [ править ]

Простые пакетные задания не являются чем-то необычным для изолированных задач, но использование циклов оболочки, тестов и переменных обеспечивает гораздо большую гибкость для пользователей. Сценарий POSIX sh для преобразования изображений JPEG в изображения PNG, где имена изображений указываются в командной строке - возможно, с помощью подстановочных знаков - вместо того, чтобы каждое из перечисленных в сценарии, может быть создано с этим файлом, обычно сохраняемым в таком файле, как / главная / имя пользователя / bin / jpg2png

#! / bin / sh для jpg ;  do  # используйте $ jpg вместо каждого указанного имени файла, в свою очередь  png = $ { jpg % .jpg } .png # создайте версию имени файла в формате PNG, заменив .jpg на .png  printf  'преобразовав "% s" ... \ n '  " $ jpg "  # выводить информацию о статусе пользователю, запускающему скрипт,  если преобразовать " $ jpg " jpg.to.png ;  затем  # используйте convert (предоставленный ImageMagick) для создания PNG во временном файле mv jpg.to.png " $ png " # если это сработало, переименуйте временное изображение PNG на правильное имя  else  # ... в противном случае пожаловаться и выйти из сценария  printf > & 2  'jpg2png: error: неудачный вывод сохранен в "jpg.to.png". \ n'  exit  1  fi  # конец тестовой конструкции "if" выполнен  # конец цикла "for" printf  'все преобразования успешны \ n'  # сообщаем пользователю хорошие новости

Затем команду jpg2png можно запустить для всего каталога, полного изображений JPEG, используя только / home / username / bin / jpg2png * .jpg.

Правдоподобие [ править ]

Ключевой особенностью сценариев оболочки является то, что вызов их интерпретаторов обрабатывается как основная функция операционной системы. Таким образом, вместо того, чтобы пользовательская оболочка могла выполнять сценарии только на этом языке оболочки, или сценарий, у которого директива интерпретатора обрабатывалась правильно, если он был запущен из оболочки (оба из которых были ограничениями в обработке сценариев ранней оболочки Bourne), Сценарии оболочки настраиваются и выполняются самой ОС. Современный сценарий оболочки - это не только то же самое, что и системные команды, но и многие системные команды на самом деле являются сценариями оболочки (или, в более общем смысле, сценариями, поскольку некоторые из них интерпретируются не оболочкой, а вместо этого Perl , Python, или другой язык). Это распространяется на возвращение кодов выхода, как и другие системные утилиты, для индикации успеха или неудачи и позволяет их вызывать как компоненты более крупных программ независимо от того, как эти более крупные инструменты реализованы. [7] [8]

Как стандартные команды системы, сценарии оболочек классически опускают любые расширения имени файла , если не предназначено для чтения в запущенной командную оболочку с помощью специального механизма для этой цели (например, ш «ы„ . “, или CSH «s источник ). [9] [10]

Программирование [ править ]

Многие современные оболочки также предоставляют различные функции, которые обычно встречаются только в более сложных языках программирования общего назначения , такие как конструкции потока управления, переменные, комментарии , массивы, подпрограммы и т. Д. Имея такие возможности, можно писать достаточно сложные приложения в виде сценариев оболочки. Однако они по-прежнему ограничены тем фактом, что большинство языков оболочки практически не поддерживают системы типизации данных, классы, многопоточность, сложную математику и другие общие полноязыковые функции, а также обычно намного медленнее, чем скомпилированный код или написанные интерпретируемые языки. со скоростью как целью производительности.

Стандартные инструменты Unix sed и awk предоставляют дополнительные возможности для программирования оболочки; Perl также может быть встроен в сценарии оболочки, как и другие языки сценариев, такие как Tcl . Perl и Tcl также поставляются с наборами графических инструментов.

Другие языки сценариев [ править ]

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

Жизненный цикл [ править ]

Сценарии оболочки часто служат в качестве начального этапа в разработке программного обеспечения, и часто подвергается преобразованию позже в другую основную реализацию, наиболее часто будучи преобразованы в Perl , Python или C . Директива Интерпретатора позволяет деталь реализации , чтобы быть полностью скрыта внутри сценария, а не подвергаясь как расширение имени файла, и обеспечивает бесшовные переопределённый на разных языках, без воздействия на конечных пользователях.

Хотя файлы с расширением ".sh" обычно представляют собой своего рода сценарий оболочки, у большинства сценариев оболочки нет расширения имени файла. [11] [12]

Преимущества и недостатки [ править ]

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

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

С другой стороны, сценарии оболочки подвержены дорогостоящим ошибкам. Случайные опечатки, такие как rm -rf * / (вместо предполагаемого rm -rf * / ), являются фольклором в сообществе Unix; одно дополнительное пространство преобразует команду из той, которая удаляет все подкаталоги, содержащиеся в текущем каталоге, в команду, которая удаляет все из корневого каталога файловой системы . Подобные проблемы могут превратить cp и mv в опасное оружие, а неправильное использование > перенаправления может привести к удалению содержимого файла. Это усугубляется тем фактом, что многие команды UNIX отличаются по названию только одной буквой: cp , cd , dd., df и т. д.

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

Также существуют проблемы совместимости между разными платформами. Ларри Уолл , создатель Perl , как известно, написал, что «оболочку легче перенести, чем сценарий оболочки». [ Эта цитата требует цитирования ]

Точно так же более сложные сценарии могут столкнуться с ограничениями самого языка сценариев оболочки; ограничения затрудняют написание качественного кода, а расширения с помощью различных оболочек для устранения проблем с исходным языком оболочки могут усугубить проблемы. [13]

Многие недостатки использования некоторых языков сценариев вызваны недостатками конструкции в синтаксисе или реализации языка и не обязательно связаны с использованием текстовой командной строки; существует ряд оболочек, которые используют другие языки программирования оболочки или даже полноценные языки, такие как Scsh (который использует Scheme ).

Создание сценариев оболочки в других операционных системах [ править ]

Программное обеспечение для взаимодействия, такое как Cygwin , MKS Toolkit , Interix (которое доступно в службах Microsoft Windows для UNIX), оболочка Hamilton C , UWIN (AT&T Unix для Windows) и другие, позволяют запускать программы оболочки Unix на машинах под управлением Windows NT и его преемники, с некоторой потерей функциональности в MS-DOS - ветка Windows 95 , а также более ранние версии MKS Toolkit для OS / 2. По крайней мере, три реализации DCL для операционных систем типа Windows - в дополнение к XLNT , многоразовому языку сценариев, который используется с командной оболочкой, Windows Script Host и CGI.программирование - также доступны для этих систем. Mac OS X и последующие также похожи на Unix. [14]

В дополнение к вышеупомянутым инструментам некоторые функции POSIX и OS / 2 также могут использоваться с соответствующими подсистемами среды от операционных систем Windows NT до Windows 2000. Третья, 16-разрядная подсистема, часто называемая подсистемой MS-DOS, использует Command.com, поставляемый с этими операционными системами, для запуска вышеупомянутых командных файлов MS-DOS. [15]

Консоль альтернатива 4DOS , 4OS2 , FreeDOS , Питер Нортон «s NDOS и 4NT / Take Command , которые добавляют функциональность к cmd.exe Windows NT стиль, MS-DOS / Windows 95 пакетных файлов (запуск по Command.com), OS / 2 cmd.exe и 4NT соответственно похожи на оболочки, которые они улучшают, и более интегрированы с Windows Script Host, который поставляется с тремя предустановленными механизмами, VBScript, JScript и VBA, и с которыми могут работать многочисленные сторонние механизмы. быть добавленным с Rexx, Perl, Python, Ruby и Tcl, имеющими предопределенные функции в 4NT и связанных программах. PC DOS очень похож на MS-DOS, в то время какDR DOS больше другой. Более ранние версии Windows NT могут запускать современные версии 4OS2 с помощью подсистемы OS / 2.

Языки сценариев по определению могут быть расширены; например, системы типа MS-DOS / Windows 95/98 и Windows NT позволяют программам оболочки / пакетной обработки вызывать такие инструменты, как KixTart , QBasic , различные реализации BASIC , Rexx , Perl и Python , Windows Script Host и его установленные механизмы . В Unix и других системах, совместимых с POSIX , awk и sed используются для расширения возможностей обработки строк и чисел в сценариях оболочки. Tcl, Perl, Rexx и Python имеют наборы графических инструментов и могут использоваться для кодирования функций и процедур для сценариев оболочки, которые создают узкое место в скорости (C, Fortran, язык ассемблера и т. Д. Намного быстрее) и для добавления функций, недоступных в языке оболочки. такие как сокеты и другие функции подключения, усиленная обработка текста, работа с числами, если вызывающий скрипт не имеет этих возможностей, самописный и самомодифицирующийся код, такие методы, как рекурсия , прямой доступ к памяти, различные типы сортировки и многое другое. , которые затруднены или невозможны в основном сценарии, и так далее. Visual Basic для приложений и VBScriptможет использоваться для управления такими вещами, как электронные таблицы, базы данных, скриптовые программы всех типов, телекоммуникационное программное обеспечение, инструменты разработки, графические инструменты и другое программное обеспечение, к которому можно получить доступ через компонентную объектную модель .

См. Также [ править ]

  • Клей код
  • Директива переводчика
  • Символ Шебанга (#!)
  • Оболочки Unix
  • PowerShell
  • Хост сценариев Windows

Ссылки [ править ]

  1. ^ Керниган, Брайан В .; Пайк, Роб (1984), «3. Использование оболочки», Среда программирования UNIX , Prentice Hall, Inc., стр. 94, ISBN 0-13-937699-2, Оболочка на самом деле является языком программирования: в ней есть переменные, циклы, процесс принятия решений и так далее.
  2. ^ Примеры оболочек Unix, стр. 7-10,
  3. ^ Программирование Perl, 5-е издание, предисловие
  4. ^ "osh - manned.org" . manned.org . Проверено 16 января 2019 .
  5. ^ a b Джонсон, Крис (2009). [1] Pro Bash Programming: Scripting the Linux Shell , Apress, последнее посещение - 27 сентября 2019 г. ISBN 9781430219989 
  6. ^ "exec (3p) - Руководство программиста POSIX" . Проверено 24 июля 2020 .
  7. ^ Роббинс, Арнольд; Биби, Нельсон Х.Ф. (16 мая 2005 г.). Классический сценарий оболочки: скрытые команды, раскрывающие всю мощь Unix . O'Reilly Media, Inc. стр. 10. ISBN 9780596555269. Проверено 7 мая 2017 года . Когда первые два символа файла -! #, Ядро сканирует оставшуюся часть строки на предмет полного пути к интерпретатору, который будет использоваться для запуска программы.
  8. ^ Карлинг, М .; Деглер, Стивен; Деннис, Джеймс (2000). Системное администрирование Linux . Самс Паблишинг. п. 275. ISBN 9781562059347. Проверено 7 мая 2017 года . Когда типичный сценарий оболочки или функция завершается, он может возвращать целое число от 0 до 255, чтобы его родитель знал, было ли оно успешным (или, в некоторых случаях, какое действие он выполнил).
  9. ^ Кумари, Sinny (23 ноября 2015). Основы создания сценариев оболочки Linux . Packt Publishing Ltd. ISBN 9781783552375. Проверено 7 мая 2017 года . Вместо того, чтобы использовать расширение файла для сценариев оболочки, лучше оставить имя файла без расширения и позволить интерпретатору определять тип, просматривая shebang (#!).
  10. ^ Тейлор, Дэйв; Перри, Брэндон (16 декабря 2016 г.). Сценарии Wicked Cool Shell, 2-е издание: 101 сценарий для систем Linux, OS X и UNIX . Пресс без крахмала. ISBN 9781593276027. Проверено 7 мая 2017 года . Для сценариев оболочки не требуется специальное расширение файла, поэтому оставьте это расширение пустым (или вы можете добавить расширение .sh, если хотите, но это не обязательно.
  11. ^ Роббинс, Арнольд; Ханна, Эльберт; Лэмб, Линда (2008). Изучение редакторов vi и Vim . п. 205. ISBN 9781449313258.
  12. ^ Исттом, Чак (2012). Основы администрирования Linux :: Подробное руководство для начинающих . п. 228. ISBN 978-1435459571.
  13. ^ «Программирование на Csh считается вредным» .
  14. ^ MSDN [ недостаточно конкретно для проверки ]
  15. ^ Пакет ресурсов для рабочих станций Windows NT 4

Внешние ссылки [ править ]

  • Введение в программирование оболочки от Грега Гебеля
  • Руководство по написанию сценариев оболочки UNIX / Linux от Стива Паркера
  • Shell Scripting Primer (Apple)
  • На что следует обращать внимание при написании переносимых сценариев оболочки Питера Сибаха
  • Бесплатные книги по сценариям Unix Shell
  • Начинающие / BashScripting , Ubuntu Linux