~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7E5B874560700E852294F7D1A8B8BE03__1695990600 ✰
Заголовок документа оригинал.:
✰ Shell script - Wikipedia ✰
Заголовок документа перевод.:
✰ Шелл-скрипт — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Shell_script ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/7e/03/7e5b874560700e852294f7d1a8b8be03.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/7e/03/7e5b874560700e852294f7d1a8b8be03__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:54:53 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 29 September 2023, at 15:30 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Шелл-скрипт — Википедия Jump to content

Сценарий оболочки

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

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

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

Оболочки, обычно присутствующие в Unix и Unix-подобных системах, включают оболочку Korn , оболочку Bourne и GNU Bash . Хотя операционная система Unix может иметь другую оболочку по умолчанию, например Zsh в macOS , эти оболочки обычно присутствуют для обратной совместимости.

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

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

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

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

Shebang или hash-bang — это особый вид комментария, который система использует, чтобы определить , какой интерпретатор использовать для выполнения файла. Шебанг должен быть первой строкой файла и начинаться с " #!". [2] В Unix-подобных операционных системах символы, следующие за " #!Префикс «интерпретируется как путь к исполняемой программе, которая будет интерпретировать сценарий. [3]

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

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

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

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

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

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

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

#!/бин/ш 

  прозрачный 
  лс   -ал 
 

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

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

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

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

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

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

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

#!/bin/sh 
 для   jpg  ;    do                                    # используйте $jpg вместо каждого заданного имени файла, в свою очередь 
     png  =  ${  jpg  %.jpg  }  .png                        # создайте PNG-версию имени файла, заменив .jpg на .png 
     printf   'converting "%s" ... \n'   "  $jpg  "      # выводить информацию о статусе пользователю, запустившему скрипт, 
     если   конвертировать   "  $jpg  "   jpg.to.png  ;    then         # используйте команду 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'          # сообщаем пользователю хорошие новости 

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

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

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

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

языки Типичные POSIX сценариев

Языки сценариев, обычно встречающиеся в установках операционных систем, совместимых с UNIX, Linux и POSIX, включают:

  • КорнШелл ( ksh) в нескольких возможных версиях, таких как ksh88, Korn Shell '93 и других.
  • Оболочка Борна ( sh), один из старейших снарядов, до сих пор широко распространенных в использовании.
  • Оболочка C ( csh)
  • GNU Баш ( bash)
  • tclsh, оболочка, которая является основным компонентом языка программирования Tcl/Tk .
  • Желанием . является оболочка Tcl/Tk на основе графического интерфейса

Оболочки C и Tcl имеют синтаксис, очень похожий на синтаксис указанных языков программирования, а оболочки Korn и Bash являются развитием оболочки Bourne, основанной на языке ALGOL с добавленными элементами ряда других. [4] С другой стороны, различные оболочки, а также такие инструменты, как awk , sed , grep и BASIC , Lisp , C и т. д., внесли свой вклад в Perl . язык программирования [5]

Другие оболочки, которые могут быть доступны на компьютере или для загрузки и/или покупки, включают:

сопутствующие программы, такие как оболочки на основе Python , Ruby , C , Java , Perl , Pascal , Rexx Также широко доступны и т. д. в различных формах. Еще одна распространенная оболочка — Oldshell ( osh), на странице руководства которого указано, что это «расширенный обратно совместимый порт стандартного интерпретатора команд из шестого издания UNIX». [6]

Так называемые удаленные оболочки, такие как

на самом деле это просто инструменты для запуска более сложной оболочки в удаленной системе и сами по себе не имеют характеристик, подобных «оболочке».

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

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

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

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

«.sh» Хотя файлы с расширением обычно представляют собой какой-либо сценарий оболочки, большинство сценариев оболочки не имеют расширения имени файла. [7] [8] [9] [10]

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

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

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

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

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

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

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

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

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

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

Одним из примеров этого является Bash, который предлагает ту же грамматику и синтаксис, что и оболочка Bourne, а также обеспечивает POSIX-совместимый режим. [13] Таким образом, большинство сценариев оболочки, написанных для оболочки Bourne, можно запускать в BASH, но обратное может быть неверным, поскольку BASH имеет расширения, которых нет в оболочке Bourne. Таким образом, эти особенности известны как башизмы . [14]

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

Программное обеспечение для обеспечения совместимости, такое как 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. [15]

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

Альтернативы консоли 4DOS , 4OS2 , FreeDOS , Питера Нортона 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 можно использовать для управления и взаимодействия с такими вещами, как электронные таблицы, базы данных, программы всех типов со сценариями, телекоммуникационное программное обеспечение, инструменты разработки, графические инструменты и другое программное обеспечение, доступ к которому можно получить через объектную модель компонентов .

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

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

  1. ^ Керниган, Брайан В .; Пайк, Роб (1984), «3. Использование оболочки», Среда программирования UNIX , Prentice Hall, Inc., стр. 94, ISBN  0-13-937699-2 , Оболочка на самом деле является языком программирования: в ней есть переменные, циклы, принятие решений и так далее.
  2. ^ Перейти обратно: а б Джонсон, Крис (2009). Программирование Pro Bash: написание сценариев для оболочки Linux . Апресс. ISBN  9781430219989 . Проверено 27 сентября 2019 г.
  3. ^ «exec(3p) — Руководство программиста POSIX» . Проверено 24 июля 2020 г.
  4. ^ Оболочки Unix на примере, стр. 7-10,
  5. ^ Программирование на Perl, 5-е издание, предисловие
  6. ^ «Ош — manned.org» . Manned.org . Проверено 16 января 2019 г.
  7. ^ Роббинс, Арнольд; Ханна, Эльберт; Лэмб, Линда (2008). Изучение редакторов vi и Vim . «О'Рейли Медиа, Инк.». п. 205. ИСБН  9781449313258 .
  8. ^ Исттом, Чак (2012). Основы администрирования Linux:: Подробное руководство для начинающих . Курсовая технология/Cengage Learning. п. 228. ИСБН  978-1435459571 .
  9. ^ Кумари, Синни (23 ноября 2015 г.). Основы создания сценариев оболочки Linux . Packt Publishing Ltd. ISBN  9781783552375 . Проверено 7 мая 2017 г. Вместо использования расширения файла для сценариев оболочки предпочтительнее оставить имя файла без расширения и позволить интерпретатору определить тип, просмотрев shebang(#!).
  10. ^ Тейлор, Дэйв; Перри, Брэндон (16 декабря 2016 г.). Wicked Cool Shell Scripts, 2-е издание: 101 сценарий для систем Linux, OS X и UNIX . Нет крахмального пресса. ISBN  9781593276027 . Проверено 7 мая 2017 г. Скриптам оболочки не требуется специальное расширение файла, поэтому оставьте расширение пустым (или вы можете добавить расширение .sh, если хотите, но это не обязательно).
  11. ^ Ларри Уолл (4 января 1991 г.). «Нахождение последнего аргумента» . Группа новостей : comp.unix.shell . Проверено 5 января 2023 г.
  12. ^ Кристиансен, Том. «Программирование Csh считается вредным» .
  13. ^ «Основные отличия от Bourne Shell» .
  14. ^ «24 Bashism, которых следует избегать в POSIX-совместимых сценариях оболочки» . 18 мая 2022 г.
  15. ^ MSDN [ недостаточно конкретно, чтобы проверить ]
  16. ^ Комплект ресурсов для рабочей станции Windows NT 4

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

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 7E5B874560700E852294F7D1A8B8BE03__1695990600
URL1:https://en.wikipedia.org/wiki/Shell_script
Заголовок, (Title) документа по адресу, URL1:
Shell script - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)