Команда Linux - команда Unix

ИМЕ

sh - командния интерпретатор ( shell )

Кратък обзор

sh [- / + aCefnuvxIimqsVEbc ] [- о име ] -words [ цел ... ]

ОПИСАНИЕ

Sh е стандартният интерпретатор на команди за системата. Текущата версия на sh е в процес на промяна, за да отговаря на изискванията на POSIX 1003.2 и 1003.2a за корпуса. Тази версия има много функции, които правят тя да изглежда подобна в някои отношения с обвивката на Корн, но тя не е клонинг на обвивката на Корн (виж ksh (1)). Само функции, обозначени с POSIX плюс няколко разширения на Berkeley, се включват в тази черупка. Очакваме POSIX съответствие с времето, когато се пусне 4.4 BSD. Тази страница на човека не е предназначена да бъде урок или пълна спецификация на обвивката.

Преглед

Черупката е команда, която чете линии от файл или терминал, интерпретира ги и обикновено изпълнява други команди. Това е програмата, която се изпълнява, когато потребителят се регистрира в системата (въпреки че потребителят може да избере различна обвивка с командата chsh (1)). Тя съдържа език, който има структури за контрол на потока - макро съоръжение, което предлага различни функции в допълнение към съхранението на данни, заедно с вградени възможности за редактиране на историята и реда. Тя включва много функции, които подпомагат интерактивната употреба и има предимството, че интерпретативният език е общ за интерактивната и не-интерактивната употреба (скриптове на Shell). Това означава, че командите могат да бъдат написани директно в изпълняваната обвивка или могат да бъдат въведени във файл и файлът може да бъде изпълнен директно от обвивката.

призоваване

Ако не са налице никакви аргументи и стандартният вход на черупката е свързан към терминал (или ако е зададен флагът - i ), а опцията - c не е налице, обвивката се счита за интерактивна обвивка . Интерактивният черупки обикновено се извежда пред всяка команда и обработва програмните и командните грешки по различен начин (както е описано по-долу). При първото стартиране корпусът проверява аргумента 0, а ако започва с тире "-", обвивката също се счита за входна черупка. Това обикновено се извършва автоматично от системата, когато потребителят се запише за първи път. Командата за влизане първо чете команди от файловете / etc / profile и .profile, ако съществуват. Ако променливата на средата ENV е зададена при въвеждане на обвивка или е зададена в .profile на входна обвивка, черупката след това чете команди от файла, посочен в ENV. Следователно, потребителят трябва да постави команди, които трябва да бъдат изпълнени само при времето за влизане във файла .profile и командите, които се изпълняват за всяка черупка в ENV файла. За да зададете променливата ENV на някой файл, поставете следния ред във вашия .profile на вашата домашна директория

ENV = $ HOME / .shinit; износ ENV

замествайки `` .shinit '' всяко име на файл, което желаете. Тъй като ENV файлът се чете за всяко поискване на обвивката, включително скриптове на Shell и не-интерактивни черупки, следващата парадигма е полезна за ограничаване на команди в ENV файл до интерактивни покани. Поставете команди в `` case '' и ` esac '' по-долу (тези команди са описани по-късно):

случай $ - в * i *)

# команди само за интерактивна употреба

...

ESAC

Ако аргументите за командния ред освен опциите са били посочени, черупката третира първия аргумент като името на файл, от който да чете командите (скрипт на shell), а останалите аргументи се задават като параметрите на позицията на shell ($ 1 , $ 2 и т.н.). В противен случай черупката чете команди от стандартния си вход.

Обработка на списъка с аргументи

Всички опции с единични букви имат съответно име, което може да се използва като аргумент към опцията - o . Името на комплекта е предоставено до опцията за единична буква в описанието по-долу. Задаването на тире `` - '' включва опцията, докато плюс `` + '' деактивира опцията. Следните опции могат да бъдат зададени от командния ред или с вградената (1) вградена (описана по-късно).

-алекспорт

Експортирайте всички зададени променливи. (НЕИЗПЪЛНИТЕЛНО за 4.4алфа)

-° С

Прочетете командите от командния ред. От стандартния вход няма да се четат команди.

-Cloblobber

Не презаписвайте съществуващите файлове с ``> '' (UNIMPLEMENTED за 4.4алфа)

-e errexit

Ако не е интерактивен, излезте незабавно, ако някоя неизпитана команда се провали. Изходното състояние на команда се счита за изрично тествано, ако командата се използва за управление на ако е elif, докато или докато командата е оператор на лявата ръка на оператор "&&" или "` || '.

-f noglob

Деактивиране на разширението на пътя .

-n noexec

Ако не са интерактивни, прочетете командите, но не ги изпълнявайте. Това е полезно за проверка на синтаксиса на скриптове на shell.

внушение

Напишете съобщение към стандартната грешка, когато се опитвате да разгънете променлива, която не е зададена и ако черупката не е интерактивна, излезте незабавно. (НЕИЗПЪЛНИТЕЛНО за 4.4алфа)

-v verbose

Скриптът записва своя вход към стандартната грешка, докато се чете. Полезно за отстраняване на грешки.

-x xtrace

Напишете всяка команда на стандартна грешка (предшествана от "+", преди да бъде изпълнена.) Полезно за отстраняване на грешки.

-q тихпрофил

Ако са зададени опциите - v или - x , не ги прилагайте при четене на инициализиращи файлове, които са / etc / profile .profile и файла, определен от променливата на средата ENV .

- Игнорирай

Игнорирайте EOF от входа, когато сте интерактивни.

-i интерактивна

Принудете обвивката да се държи интерактивно.

монитор

Включете контрола за задание (задайте автоматично, когато сте интерактивни).

е стадион

Четене на команди от стандартен вход (настройва се автоматично, ако не съществуват аргументи за файла). Тази опция няма ефект, когато е зададена, след като черупката вече е започнала да работи (т.е. със сет (1)).

-V vi

Активирайте вградения редактор за команден ред vi (1) (деактивира - E, ако е зададен).

- Емаци

Активирайте вградения редактор на командния ред emacs (1) (деактивира - V, ако е зададен).

-b уведомява

Активиране на асинхронно известяване за завършване на задание за фона. (НЕИЗПЪЛНИТЕЛНО за 4.4алфа)

Лексикална структура

Shell чете вход от гледна точка на линии от файл и го разделя на думи в бяло пространство (празни места и раздели) и в определени последователности от символи, които са специални за обвивката, наречена "оператори". Има два типа оператори: контролни оператори и оператори на пренасочване (тяхното значение е разгледано по-късно). Следва списък на операторите:

"Оператори за контрол:"

& && (); ;; | || <Нов ред>

"Оператор на пренасочване:"

<>> | << >> <&> & << - <>

Цитирайки

Цитирането се използва, за да премахне специалното значение на някои знаци или думи в обвивката, като оператори, празно пространство или ключови думи. Има три типа цитати: съвпадащи единични кавички, съвпадащи двойни кавички и обратна наклонена черта.

Наклонена черта

Обратната наклонена черта запазва буквалното значение на следния знак, с изключение на Aq newline. Обратното наклонена черта, предшестваща нов ред на Aq, се третира като продължение на линията.

Единични котировки

Затварянето на символи в единични кавички запазва буквалното значение на всички знаци (с изключение на единични кавички, което прави невъзможно поставянето на единични кавички в единичен цитат низ).

Двойни котировки

Затварянето на знаците в двойните кавички запазва буквалното значение на всички символи, с изключение на доларовете ($) и наклона (). Обратното наклона в двойните кавички е исторически странно и служи само за цитиране на следните знаци:

$ `\ <нов ред>

В противен случай тя остава буквална.

Запазени думи

Запазените думи са думи, които имат специално значение за черупката и се разпознават в началото на линията и след контролен оператор. Следните са запазени думи:

! Ta elif Ta Ta Ta, докато случаят Ta

друго Ta за Та тогава Ta {Ta}

направете Ta направено Ta до Ta ако е esac

Тяхното значение се обсъжда по-късно.

Псевдоними

Псевдонимът е име и съответна стойност, зададена чрез вградената команда на псевдоним (1). Винаги, когато може да възникне запазена дума (вижте по-горе), и след като проверите резервирани думи, черупката проверява думата, за да види дали тя съвпада с псевдоним. Ако го направи, той го замества във входния поток с неговата стойност. Например, ако има псевдоним, наречен "lf" с стойността "ls -F", тогава входът:

Ако foobar

ще стане

ls -F foobar

Псевдонимите осигуряват удобен начин за наивните потребители да създават съкращения за команди, без да се налага да се научават как да създават функции с аргументи. Те могат да бъдат използвани и за създаване на лексикално неясен код. Това използване се обезсърчава.

команди

Обвивката интерпретира думите, които чете според език, чиято спецификация е извън обхвата на тази страница (вижте документа на BNF в документа POSIX 1003.2). По същество обаче се чете линия и ако първата дума на реда (или след оператор за управление) не е запазена дума, тогава черупката е разпознала проста команда. В противен случай е възможно да се разпознае сложна команда или някаква друга специална конструкция.

Прости команди

Ако е била разпозната проста команда, тя изпълнява следните действия:

  1. Водещите думи на формуляра "name = value" се отстраняват и се задават в средата на простата команда. Операторите на пренасочване и техните аргументи (както е описано по-долу) се отделят и съхраняват за обработка.
  2. Останалите думи се разширяват, както е описано в секцията, наречена "Разширения", а първата оставаща дума се счита за команда и командата се намира. Останалите думи се считат за аргументите на командата. Ако не е получено име на команда, тогава задаването на променливата `` name = value '', разпознато в точка 1, засяга текущата обвивка.
  3. Пренасочванията се извършват, както е описано в следващия раздел.

Редиректвания

Пренасочванията се използват, за да променят коя команда чете своя вход или изпраща своя изход. По принцип пренасочванията отварят, затварят или дублират съществуваща препратка към файл. Общият формат, използван за пренасочване, е:

[n] redir-op файл

където redir-op е един от операторите за пренасочване, споменати по-рано. Следва списък на възможните пренасочвания. Bqn е незадължително число, както в "3" (не "Bq 3", което се отнася до файлов дескриптор.

[n]> файл

Пренасочване на стандартния изход (или n) към файла.

[n]> | досие

Същото, но преименувайте опцията - C.

[n] >> файл

Добавете стандартен изход (или n) към файл.

[n] <файл

Пренасочване на стандартния вход (или n) от файла.

[n1] <& n2

Дублиран стандартен вход (или n1) от дескриптор на файлове n2.

[n] <& -

Затваряне на стандартен вход (или n).

[n1]> & n2

Дублиран стандартен изход (или n1) от n2.

[n]> & -

Затваряне на стандартен изход (или n).

[n] <> файла

Отваряне на файл за четене и запис на стандартен вход (или n).

Следното пренасочване често се нарича "тук-документ"

[n] << разделител

тук-док-текст ...

разделител

Целият текст на последователни линии до разделителя се запазва и се предоставя на командата на стандартния вход или дескриптора на файлове n, ако е посочена. Ако посоченият от началния ред разделител е цитиран, текстът here-doc се обработва буквално, в противен случай текстът се подлага на разширяване на параметъра, заместване на команди и аритметично разширение (както е описано в раздел "Разширения") "Ако операторът е` `<< - '' вместо` `<< ', тогава водещите раздели в тук-doc-text се премахват.

Търсене и изпълнение

Има три вида команди: функции на черупки, вградени команди и нормални програми - и командата се търси (по име) в този ред. Те са изпълнени по различен начин.

Когато се изпълни функция на черупки, всички позиционни параметри на корпуса (с изключение на $ 0, които остават непроменени) се задават на аргументите на функцията shell. Променливите, които са изрично поставени в средата на командата (чрез поставяне на задачи към тях преди името на функцията), са направени локални за функцията и са настроени на дадените стойности. След това се изпълнява командата, дадена в дефиницията на функцията. Позиционните параметри се възстановяват на първоначалните им стойности, когато командата завърши. Всичко това се случва в рамките на текущата обвивка.

Вградените Shell се изпълняват вътрешно в черупката, без да се създава нов процес.

В противен случай, ако името на командата не съвпада с функция или вградена, командата се търси като нормална програма в файловата система (както е описано в следващия раздел). Когато се изпълнява нормална програма, корпусът изпълнява програмата, предава аргументите и околната среда на програмата. Ако програмата не е нормален изпълним файл (т.е. ако не започне от "магически номер", чието представяне на ASCII е "#!", Така execve (2) връща Er ENOEXEC тогава) shell ще тълкува програмата в subshell. Детската корпус ще се самоинтелиализира в този случай, така че ефектът ще бъде, сякаш е била използвана нова обвивка за обработка на ad-hoc shell скрипта, с изключение на това, че местоположението на хеширани команди, намиращи се в родителската обвивка, ще бъде запомнено от дете.

Обърнете внимание, че предишните версии на този документ и самия изходен код погрешно и спорадично се отнасят до шрифт на шкафа без магически номер като "процедура за обвивка".

Път търсене

При намиране на команда, черупката първо гледа дали тя има функция на черупки с това име. След това търси вградена команда с това име. Ако не бъде намерена вградена команда, се случва едно от две неща:

  1. Имената на командите, съдържащи наклонена черта, се изпълняват просто без да се извършват търсения.
  2. Обвивката проверява всеки запис в PATH на свой ред за командата. Стойността на променливата PATH трябва да бъде поредица от записи, разделени от двоеточие. Всеки запис се състои от име на директория. Текущата директория може да бъде обозначена имплицитно от празно име на директорията или изрично от един период.

Статус на командния изход

Всяка команда има изходно състояние, което може да повлияе на поведението на други команди на shell. Парагдията е, че командата излиза с нула за нормална или успешна и ненулева за повреда, грешка или фалшива индикация. В страницата Man за всяка команда трябва да се посочат различните кодове на излизане и какво означават те. Освен това вградените команди връщат изходните кодове, както и изпълнената функция на черупки.

Сложни команди

Комплексните команди са комбинации от прости команди с контролни оператори или запазени думи, които заедно създават по-голяма сложна команда. По-общо казано, командата е едно от следните:

Освен ако не е посочено друго, изходният статус на команда е този на последната проста команда, изпълнена от командата.

тръбопроводи

Тръбопроводът е последователност от една или повече команди, разделени от контролния оператор |. Стандартният изход на всички, освен последната команда, е свързан към стандартния вход на следващата команда. Стандартният изход на последната команда се наслежда от обвивката, както обикновено.

Форматът за тръбопровод е:

[!] команда1 [ command2 ...]

Стандартният изход на команда1 е свързан със стандартния вход на команда2. Стандартният вход, стандартният изход или и двете на команда се счита за присвоен от тръбопровода преди всяко пренасочване, посочено от операторите на пренасочване, които са част от командата.

Ако тръбопроводът не е във фонов режим (обсъден по-късно), черупката чака да завършат всички команди.

Ако запазената дума! не предхожда тръбопровода, изходният статус е изходното състояние на последната команда, посочена в тръбопровода. В противен случай, изходното състояние е логически НЕ на изходното състояние на последната команда. Това означава, че ако последната команда върне нула, изходното състояние е 1; ако последната команда връща по-голяма от нула, изходното състояние е нула.

Тъй като прехвърлянето на тръбопроводи на стандартен вход или стандартен изход, или и двете, се извършва преди пренасочване, то може да бъде променено чрез пренасочване. Например:

$ command1 2> & 1 | command2

изпраща стандартен и стандартна грешка на команда1 към стандартния вход на команда2.

А; или причинява последователното изпълнение на предходния списък AND-OR (описан по-долу); a & причинява асинхронно изпълнение на предходния списък AND-OR.

Забележете, че за разлика от някои други черупки всеки процес в тръбопровода е дете на назоващата черупка (освен ако не е вградена черупка, в който случай тя се изпълнява в текущата обвивка, но всеки ефект, който има върху околната среда, е изтрит).

Команди за фона -

Ако командата се прекъсне от контролния оператор ampersand (&), обвивката изпълнява командата асинхронно - т.е. черупката не чака командата да завърши, преди да изпълни следващата команда.

Форматът за изпълнение на команда във фонов режим е:

команда1 & [команда2 & ...]

Ако черупката не е интерактивна, стандартното въвеждане на асинхронна команда е настроено на / dev / null

Списъци - общо казано

Списъкът е последователност от нула или повече команди, разделени от нови линии, точка и запетая или амперсандове и евентуално прекратена от един от тези три знака. Командите в списък се изпълняват в реда, в който са написани. Ако командата е последвана от ampersand, черупката започва командата и незабавно премине към следващата команда; в противен случай чака командата да бъде прекратена, преди да продължите към следващата.

Оператори на списъка с къси кръгове

`` && '' и `` || 'са AND-OR оператори в списъка. `` && '' изпълнява първата команда и след това изпълнява втората команда, ако изходното състояние на първата команда е нула. `` || '' е подобен, но изпълнява втората команда, ако изходното състояние на първата команда е ненулева. `` && '' и `` || "и двата имат същия приоритет.

Конструкции за контрол на потока - ако, макар и за случай

Синтаксисът на командата if е

ако има списък
след това списък
[списък с имена
след това] ...
[списък с други]
Fi

Синтаксисът на времевата команда е

докато е в списъка
направете списък
Свършен

Двата списъка се изпълняват многократно, докато изходното състояние на първия списък е нула. Командата "до" е подобна, но има думата до мястото на времето, което я кара да се повтаря, докато изходното състояние на първия списък е нула.

Синтаксисът на командата за

за променлива в думата ...
направете списък
Свършен

Думите се разширяват и след това списъкът се изпълнява многократно с променливата, зададена на всяка дума на свой ред. да направите и направите може да бъде заменен с `` {'' и ​​``} ''

Синтаксисът на командата за прекъсване и продължаване е

прекъсване [num]
продължете [num]

Пробивът прекратява най-същината за или по време на цикли. Продължаваме с следващото повторение на най-вътрешната линия. Те се изпълняват като вградени команди.

Синтаксисът на командата случай е

думата в случай
модел) ;;
...
ESAC

Моделът всъщност може да бъде един или повече шаблони (виж Shell Patterns, описани по-нататък), разделени със символи `` ''.

Групиране на командите заедно

Командите могат да бъдат групирани и чрез писане

(Списък)

или

{list;

Първият от тях изпълнява командите в подвъзел. Вградените команди, групирани в (списък), няма да засегнат текущата обвивка. Втората форма не е друга, така че е малко по-ефективна. Групирането на командите заедно по този начин ви позволява да пренасочите изхода, сякаш са били една програма:

{printf hello; printf world \ n ";}> поздрав

Функции

Синтаксисът на дефиницията на функцията е

име () команда

Дефиницията на функцията е изпълнимо изявление; когато се изпълни, той инсталира функция с име с име и връща изходно състояние от нула. Командата обикновено е списък, приложен между `` {'и ``}' '

Променливите могат да бъдат обявени за локални за дадена функция, като се използва местна команда. Това трябва да се появи като първото изявление на дадена функция, а синтаксисът е

местен [променлив | -] ...

Local се изпълнява като вградена команда.

Когато променливата се направи локално, тя наследи първоначалната стойност и експортираните и readonly флагове от променливата със същото име в околния обхват, ако има такава. В противен случай променливата първоначално е деактивирана. Обвивката използва динамично обхват, така че ако направите променливата x локална за функцията f, която след това нарича функцията g, препратките към променливата x, направена вътре в g, ще се отнасят до променливата x, обявена вътре в f, а не до глобалната променлива, наречена x ,

Единственият специален параметър, който може да бъде направен на местно ниво, е `` - '' Изработване на `` - '' локални опции за черупки, които се променят чрез командата set в рамките на функцията да бъдат възстановени до първоначалните им стойности при връщане на функцията.

Синтаксисът на командата за връщане е

върнете [exitstatus

Тя прекратява изпълняващата функция. Връщането се изпълнява като вградена команда.

Променливи и параметри

Обвивката поддържа набор от параметри. Параметър, означен с име, се нарича променлива. При стартиране, черупката превръща всички променливи на среда в променливи на обвивката. Можете да зададете нови променливи, като използвате формуляра

име = стойност

Променливите, зададени от потребителя, трябва да имат име, състоящо се само от азбучни, цифрови и долни черти - първото от които не трябва да е цифрово. Параметърът може също така да бъде обозначен с номер или специален знак, както е обяснено по-долу.

Позиционни параметри

Позиционалният параметър е параметър, обозначен с число (n> 0). Обвивката ги поставя първоначално на стойностите на аргументите на командния ред, които следват името на скрипта на shell. Вграденият комплект (1) може да се използва и за настройка или нулиране.

Специални параметри

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

*

Разширява до позиционните параметри, като се започне от една. Когато разширението се осъществява в рамките на двоен цитат, той се разширява до едно поле със стойността на всеки параметър, разделен от първия знак на променливата IFS или с , ако IFS е деактивиран.

@

Разширява до позиционните параметри, като се започне от една. Когато разширението се осъществява в рамките на двойни кавички, всеки позиционен параметър се разширява като отделен аргумент. Ако няма позиционни параметри, разширението на @ генерира нулеви аргументи, дори когато @ е двойно цитиран. Това, което основно означава, например, е, че $ 1 е `` abc '' и $ 2 е `` def ghi '', след това Qq $ @ се разширява към двата аргумента:

abc def ghi

#

Разширява до броя позиционни параметри.

?

Разширява до изходното състояние на последния тръбопровод.

- (Hyphen.)

Разширява до текущите флагове на опциите (имената на опциите за единична буква, свързани в низ), както е указано при извикване, чрез настроената вградена команда или имплицитно от обвивката.

$

Разширява до идентификатора на процеса на извиканата обвивка. А subshell запазва същата стойност на $ като родител.

!

Разширява до идентификационния процес на последната команда за фона, изпълнена от текущата обвивка. За даден тръбопровод идентификационният процес е този на последната команда, която е в процес на работа.

0 (нула.)

Разширява до името на скрипта за shell или shell.

Разширения на Word

Тази клауза описва различните разширения, които се извършват върху думи. Не всички разширения се изпълняват на всяка дума, както е обяснено по-късно.

Разширенията на Tilde, разширенията на параметрите, заместванията на команди, аритметичните разширения и премахването на котировки, които се срещат в рамките на една дума, се разширяват до едно поле. Това е само разширение на полето или разширение на пътя, което може да създаде няколко полета от една дума. Единственото изключение от това правило е разширяването на специален параметър @ в рамките на двойни кавички, както е описано по-горе.

Редът за разширяване на думата е:

  1. Разширяване на Tilde, Разширяване на параметъра, Замяна на команда, Аритметично разширение (всички те се появяват едновременно).
  2. Разделянето на поле се извършва на полетата, генерирани от стъпка (1), освен ако променливата IFS е нула.
  3. Разширяване на пътя (освен ако не е в сила).
  4. Премахване на коментар.

Знакът $ се използва за въвеждане на разширение на параметрите, замествания на команди или аритметична оценка.

Tilde Expansion (замествайки домашната директория на потребителя)

Думата, започваща с некотиран символ на тилда (~), се подлага на експанзия. Всички символи до наклонена черта (/) или в края на думата се третират като потребителско име и се заменят с домашната директория на потребителя. Ако потребителското име липсва (както в ~ / foobar), tilda се заменя с стойността на променливата HOME (домашната директория на текущия потребител).

Разширяване на параметрите

Форматът за разширение на параметрите е както следва:

където изразът се състои от всички символи, докато съвпадението ``} '' Всяко ``} '' е избягнато от обратна наклонена черта или в цитирания низ, а знаците във вградените аритметични разширения, замествания на команди и променливи разширения не се разглеждат при определяне на съвпадение ``} ''

Най-простата форма за разширяване на параметрите е:

Стойността, ако има такава, на параметъра е заменена.

Името на параметъра или символът могат да бъдат приложени в скоби, които са по избор, с изключение на позиционните параметри с повече от една цифра или когато параметърът е последван от знак, който може да се интерпретира като част от името. Ако в двойните кавички настъпва разширение на параметър:

  1. Разширяването на името на пътя не се извършва на резултатите от разширяването.
  2. Разделянето на полета не се извършва на резултатите от разширяването, с изключение на @.

Освен това разширението на параметрите може да бъде променено, като се използва един от следните формати.

Използвайте стойностите по подразбиране. Ако параметърът е неактивен или нулев, разширението на думата се замества; в противен случай стойността на параметъра се замества.

Присвояване на стандартните стойности. Ако параметърът е деактивиран или нулев, разширението на думата се присвоява на параметър. Във всички случаи крайната стойност на параметъра се замества. По този начин могат да се задават само променливи, а не позиционни параметри или специални параметри.

Посочете грешка, ако е нула или не е зададена. Ако параметърът е деактивиран или нулев, разширението на думата (или съобщение, показващо, че е деактивирано, ако думата е пропуснато) се записва в стандартна грешка и черупката излиза с ненулево изходно състояние. В противен случай стойността на параметъра се замества. Интерактивната черупка не трябва да излиза.

Използвайте алтернативна стойност. Ако параметърът е неактивен или нулев, null се замества; в противен случай разширяването на думата се заменя.

При разширенията на параметрите, показани по-горе, използването на двоеточие във формата води до тест за параметър, който е деактивиран или нулев; пропускането на дебелото черво води до тест за параметър, който е само неактивен.

Дължина на низа. Дължината на знаците в параметрите.

Следващите четири разновидности на разширението на параметрите осигуряват обработка на подсъздаване. Във всеки случай, за да се оценят шаблоните, се използва нотация за съвпадение на шаблони (вижте Shell Patterns). Ако параметърът е * или @, резултатът от разширението е неуточнен. Затварянето на пълния низ на разширяване на параметрите в двойни кавички не води до цитиране на следните четири разновидности на символите на шаблона, докато цитирането на символи в скобите има този ефект.

Премахване на най-малък шаблон. Думата се разширява, за да се получи модел. След това разширението на параметрите води до параметър, като най-малката част от суфикса съответства на изтрития шаблон.

Премахване на най-големия модел на присвояване. Думата се разширява, за да се получи модел. След това разширението на параметрите води до параметър, като най-голямата част от суфикса съответства на изтрития шаблон.

Премахване на най-малкия модел на префикс. Думата се разширява, за да се получи модел. След това разширението на параметрите води до параметър, като най-малката част от префикса съответства на изтрития шаблон.

Премахване на най-големия модел на префикс. Думата се разширява, за да се получи модел. След това разширението на параметрите води до параметър, като най-голямата част от префикса съответства на изтрития шаблон.

Командно заместване

Подмяната на команда позволява изходът на команда да бъде заменена на мястото на самата команда. Подмяната на команда се извършва, когато командата е затворена, както следва:

$ (Команда)

или Po `` backquoted '' версия Pc:

`command`

Обвивката разширява подмяната на командата, като изпълнява команда в среда на подсистема и замества подмяната на командата със стандартния изход на командата, като премахва последователностите от един или повече s в края на замяната. (Embedded s преди края на изхода не се премахват, но по време на разделянето на полето те могат да бъдат преведени в s, в зависимост от стойността на IFS и цитирайки това, което е в сила.)

Аритметично разширение

Аритметичното разширяване осигурява механизъм за оценка на аритметична експресия и заместване на нейната стойност. Форматът за аритметично разширяване е както следва:

$ ((Експресията))

Изразът се третира като двоен кавички, с изключение на това, че двоен цитат в израза не се обработва специално. Обвивката разширява всички символи в израза за разширение на параметъра, заместване на команди и премахване на котировки.

След това обвивката третира това като аритметично изражение и замества стойността на израза.

Разделяне на бялото пространство (разделяне на поле)

След разширяване на параметъра, заместване на команди и аритметично разширение, черупката сканира резултатите от разширения и замествания, които не се появяват в двойни кавички за разделяне на полета и могат да се получат множество полета.

Обвивката третира всеки знак на IFS като разделител и използва разделителите за разделяне на резултатите от разширяването на параметрите и замяната на команди в полета.

Разширяване на името на пътя (генериране на име на файл)

Освен ако не е зададен флаговението - f , генерирането на име на файл се изпълнява след приключване на разделянето на думите. Всяка дума се разглежда като серия от модели, разделени с наклонени наклони. Процесът на разширение заменя думата с имената на всички съществуващи файлове, чиито имена могат да бъдат формирани чрез заместване на всеки шаблон с низ, съответстващ на зададения шаблон. Има две ограничения: първо, моделът не може да съответства на низ, съдържащ наклонена черта, а втората - моделът не може да съответства на низ, започващ с период, освен ако първият знак на шаблона е период. Следващият раздел описва шаблоните, използвани както за разширението на името на пътя, така и за командата case (1).

Shell Patterns

Моделът се състои от нормални знаци, които се сравняват със себе си и мета-символи. Мета-символите са ``! `` `` `` ``? '' И `` ['' Тези герои губят своите специални значения, ако са цитирани. Когато се изпълнява команда или вариация на заместване и знакът за долар или обратните цитати не са цитирани двойно, стойността на променливата или изхода на командата се сканира за тези знаци и те се превръщат в мета-символи.

Звездичка (`` * '') съвпада с низ от знаци. Въпросният знак съответства на всеки един знак. Лявата скоба (`` ['') въвежда класа на знаците. Краят на класа на символа се обозначава с (``] ''), ако липсва ``] '', след това `` ['' съответства на `` ['', вместо да въвежда класа на знаците. Класът на знаците съвпада с който и да е символ между квадратните скоби. Може да бъде определен диапазон от знаци, като се използва знак минус. Класът на знаците може да бъде допълнен, като се направи изумление първият знак на класа на героите.

За да включите "`] "в класа на символите, направете го първия изброен знак (след"! ", Ако има такъв). За да включите знак минус, направете го в списъка с първия или последния знак

КЛАВИШНАта_ПОСЛЕДОВАТЕЛНОСТ

Този раздел изброява вградените команди, които са вградени, защото трябва да извършат операция, която не може да бъде извършена от отделен процес. В допълнение към тях има няколко други команди, които могат да бъдат вградени за ефективност (напр. Ехо 1).

:

Команда null, която връща 0 (вярна) изходна стойност.

, досие

Командите в посочения файл се четат и изпълняват от корпуса.

псевдоним [ име [ = низ ... ]]

Ако име = низ е зададено, черупката определя името на псевдонима с низ на стойности Ако е зададено само име , се отпечатва стойността на името на псевдонима. Без аргументи, вграденият псевдоним отпечатва имената и стойностите на всички дефинирани псевдоними (вижте unalias)

bg [ работа] ...

Продължете зададените задания (или текущата задача, ако не са дадени задания) във фонов режим.

команда команда арг ...

Изпълнете определената вградена команда. (Това е полезно, когато имате функция за черупки със същото име като вградена команда.)

cd [ директория ]

Превключване към определена директория (по подразбиране $ HOME) Ако се появи запис за CDPATH в средата на командата cd или в променливата shell CDPATH и името на директорията не започва с наклонена черта, директорите, изброени в CDPATH, ще бъдат претърсени за посочената директория. Форматът на CDPATH е същият като този на PATH В интерактивен корпус командата cd ще отпечата името на директорията, в която действително е превключила, ако това е различно от името, дадено от потребителя. Това може да е различно, било защото беше използван механизмът на CDPATH , или поради пресичането на символна връзка.

eval низ ...

Свържете всички аргументи с интервали. След това преразглеждайте и изпълнявате командата.

exec [ команда арг ... ]

Освен ако командата не е пропусната, процесът на обвивката се заменя с определена програма (която трябва да е реална програма, а не функция на черупка или функция). Всяко пренасочване на командата exec се маркира като постоянно, така че да не се отменя, когато изпълни командата exec .

изход [ exitstatus ]

Прекратете процеса на обвивката. Ако се изведе exitstatus , се използва като изходно състояние на черупката; в противен случай се използва изходното състояние на предишната команда.

име за износ ...

износ -p

Посочените имена се експортират така, че да се показват в средата на следващите команди. Единственият начин да експортирате променлива е да я деактивирате. Обвивката позволява стойността на дадена променлива да бъде зададена в същото време, когато тя се експортира чрез писане

име на изхода = стойност

При липса на аргументи командата за експортиране посочва имената на всички експортирани променливи. С опцията - p, изходът ще бъде форматиран подходящо за неинтерактивна употреба.

fc [- e редактор ] [ първи [ последен ]]

fc-l [- nr ] [ първото [ последно ]]

fc-s [ стар = нов ] [ първо ]

Fc вградените списъци или редакциите и изпълнява отново командите, въведени преди това в интерактивен корпус.

-е редактор

Използвайте редактора, наречен от редактора, за да редактирате командите. Редакторният низ е име на команда, подлежаща на търсене чрез променливата PATH . Стойността в променливата FCEDIT се използва като по подразбиране, когато - e не е посочено. Ако FCEDIT е нула или не е дефинирана , използва се стойността на променливата EDITOR . Ако EDITOR е null или unset, ed (1) се използва като редактор.

-1 (е11)

Посочете командите, вместо да извиквате редактор върху тях. Командите се записват в последователността, обозначена от първия и последния операнди, като се повлиява от - r с всяка команда, предшествана от команден номер.

Потискайте командни номера, когато се регистрирате с -l.

-r

Обърнете реда на изброените команди (с - l или редактирани (без нито - l, нито - s)

Рестартирайте командата без да извиквате редактор.

първи

последно

Изберете командите, които да се показват или редактират. Броят на предишните команди, до които може да се достигне, се определя от стойността на променливата HISTSIZE . Стойността на първото или последното или на двете са една от следните:

[+] брой

Положително число, представляващо команден номер; командите могат да се показват с опцията - l .

-брой

Отрицателен десетичен номер, представляващ командата, която е била изпълнена по-рано. Например, -1 е непосредствено предишната команда.

низ

Низм, показващ последната въведена команда, която започва с този низ. Ако старият = нов операнд не е указван и с - низовата форма на първия операнд не може да съдържа вграден равен знак.

Следните променливи на средата засягат изпълнението на fc:

FCEDIT

Име на редактора, който да се използва.

HISTSIZE

Броят на предишните команди, които са достъпни.

fg [ работа ]

Преместете зададената задача или текущата задача на преден план.

getopts optstring var

Командата POSIX getopts не трябва да се бърка с полученото от Bell Labs getopt (1).

Първият аргумент трябва да бъде поредица от букви, всеки от които може по избор да е последван от двоеточие, за да покаже, че опцията изисква аргумент. Посочената променлива е зададена на опцията за анализ.

Командата getopts отменя по-старата помощна програма getopt (1), поради обработката на аргументите, съдържащи празно пространство.

Вградените getopts могат да се използват за получаване на опции и аргументи от списък с параметри. Когато се извиква, getopts поставя стойността на следващата опция от опционалния низ в списъка в променливата на shell, указана от var и е индекс в променливата shell OPTIND Когато shell е извикана, OPTIND се инициализира на 1. За всяка опция, която изисква аргумент, getopts вграден ще го постави в променливата shell OPTARG Ако опцията не е разрешена в optstring тогава OPTARG ще бъде деактивиран .

optstring е поредица от разпознати букви с опции. Ако буквата е последвана от двоеточие, опцията се очаква да има аргумент, който може да бъде или да не бъде отделен от нея чрез бяло пространство. Ако символът на опцията не е намерен там, където се очаква, getopts ще зададе променливата var до "`? '' Getopts ще дезактивира OPTARG и ще напише изход към стандартна грешка. Чрез указване на двоеточие като първия знак на optstring всички грешки ще бъдат игнорирани.

Когато се достигне последната опция, се връща нулева стойност. Ако няма останали аргументи, getopts ще зададе var на специалната опция `` - '', в противен случай ще зададе var да ``? ''

Следващият кодов фрагмент показва как може да се обработва аргументите за команда, която може да приеме опциите [a] и [b] и опцията [c], която изисква аргумент.

докато getopts abc: f
правя
случай $ f in
a | б) флаг = $ f ;;
в) carg = $ OPTARG ;;
\?) echo $ USAGE; изход 1 ;;
ESAC
Свършен
shift 'expr $ OPTIND - 1`

Този код ще приеме като еквивалентно едно от следните неща:

cmd -acarg файл
cmd -a -c ар файл файл
cmd -carg - файл с файлове
cmd -a -carg - файлов файл

hash -rv команда ...

Обвивката поддържа таблица на хешове, която помни местата на командите. Без каквито и да било аргументи, командата хеш отпечатва съдържанието на тази таблица. Записите, които не са разгледани от последната команда на cd, са отбелязани със звездичка; възможно е тези записи да бъдат невалидни.

С аргументи командата хеш премахва посочените команди от хеш таблицата (освен ако не са функции) и след това ги намира. С опцията - v , хеш отпечатва местоположенията на командите, когато ги намира. Опцията - r причинява командата хеш за изтриване на всички записи в хеш таблицата, с изключение на функциите.

jobid [ работа ]

Отпечатайте идентификационните номера на процесите в заданието. Ако аргументът за заданието е пропуснат, използва се текущата задача.

работни места

Тази команда изброява всички фонови процеси, които са деца на текущия процес на обвивка.

хората с увреждания

Отпечатайте текущата директория. Вградената команда може да се различава от програмата с едно и също име, защото вградената команда си спомня коя е текущата директория, вместо да я преизчислява всеки път. Това го прави по-бързо. Ако обаче текущата директория бъде преименувана, вградената версия на pwd ще продължи да отпечатва старото име на директорията.

прочетете [- p prompt ] [- r ] променлива ...

Появата се отпечатва, ако опцията - p е зададена и стандартният вход е терминал. След това се чете линия от стандартния вход. Последният нов ред се изтрива от линията и линията се разделя, както е описано в раздела за разделяне на думите по-горе, а парчетата са присвоени на променливите по ред. Трябва да се посочи поне една променлива. Ако има повече парчета от променливите, останалите парчета (заедно с героите в IFS, които ги разделят) се присвояват на последната променлива. Ако има повече променливи, отколкото останалите, останалите променливи се определят като нулев низ. Вграденият в прозорец четец ще покаже успеха, освен ако не се срещне EOF на входа, в който случай се връща повреда.

По подразбиране, освен ако не е зададена опцията- r , обратната наклонена черта "` \ "действа като знак за евакуация, което води до буквално третиране на следващия символ. Ако обратно наклонена черта е последвано от нов ред, обратното наклонена черта и новата линия ще бъдат изтрити.

readonly име ...

readonly -p

Посочените имена се означават само като четене, така че те не могат да бъдат променени или деактивирани впоследствие. Тя позволява стойността на дадена променлива да бъде зададена в същото време, когато е маркирана само за четене

readonly name = value

Без аргументи командата readonly съдържа имената на всички променливи само за четене. С опцията - p, изходът ще бъде форматиран подходящо за неинтерактивна употреба.

задайте [{- опции + опции - arg ... ]

Командата за настройка изпълнява три различни функции.

Без аргументи той посочва стойностите на всички променливи на обвивката.

Ако са дадени опции, той задава указаните опции или ги изчиства, както е описано в секцията, наречена Sx Processing of Argument List.

Третото използване на зададената команда е да се зададат стойностите на позиционните параметри на обвивката на зададените аргументи. За да промените позиционните параметри, без да променяте опции, използвайте "-" като първият аргумент, който трябва да зададете. Ако не са налице никакви аргументи, командата set ще изчисти всички позиционни параметри (еквивалентни на изпълняващата `` shift $ #. ''

променлива стойност

Задава стойност на променлива. (По принцип е по-добре да се записва променлива = стойност, отколкото да се използва setvar setvar е предназначена да се използва във функции, които приписват стойности на променливи, чиито имена се предават като параметри.)

преместване [ n ]

Прехвърлете позиционните параметри n пъти. Смяната задава стойността на $ 1 до стойността от $ 2 на стойността от $ 2 до стойността от $ 3 и т.н., намалявайки стойността на $ # по един. Ако n е по-голямо от броя позиционни параметри, shift ще издаде съобщение за грешка и ще излезе с състояние на връщане 2.

пъти

Отпечатайте натрупаните потребителски и системни времена за обвивката и за процесите, изпълнявани от корпуса. Състоянието на връщане е 0.

сигнал за действие на капака ...

Причината е, че корпусът се анализира и изпълни действие, когато се получи някой от посочените сигнали. Сигналите се задават чрез номера на сигнала. Ако сигналът е 0, действието се изпълнява при излизане на корпуса. действието може да е null или `` - '' първото ще доведе до пренебрегване на зададения сигнал, а последният ще предизвика предприемането на действия по подразбиране. Когато черупката отваря подлепващ елемент , той възстановява сигнали, които са прихванати (но не игнорирани) към действието по подразбиране. Командата на капан няма ефект върху сигналите, които са били игнорирани при влизането в корпуса.

въведете [ name ... ]

Интерпретирайте всяко име като команда и отпечатайте разделителната способност за търсенето на команди. Възможните разделителни способности са: ключовата дума shell, псевдоним, shell builtin , команда, проследяван псевдоним и не е намерен. За псевдоними се отпечатва разширението на псевдонима; за командите и проследяваните псевдоними се отпечатва пълното име на командата.

ulimit [ -H-S ] [ -a -tfdscmlpn [ стойност ]]

Заявете или задайте твърдите или меки ограничения за процесите или задайте нови граници. Изборът между твърдата граница (която не може да бъде нарушена от никакъв процес и която не може да се повдигне, след като е била понижена) и меката граница (която кара процесите да се сигнализират, но не непременно убиват и които могат да бъдат повдигнати) тези знамена:

да зададете или да попитате за твърдите ограничения

зададете или питайте за меки ограничения. Ако не са зададени нито - Н, нито - S , мекото ограничение се показва или са зададени и двете ограничения. Ако са посочени и двете, последната печели.

След това границата, която трябва да бъде разпитана или зададена, се избира, като се посочи някой от тези знамена:

покажете всички текущи ограничения

-T

показване или задаване на ограничението за времето на процесора (в секунди)

-f

покажете или задайте ограничението за най-големия файл, който може да бъде създаден (в блокове от 512 байта)

показване или задаване на ограничението за размера на сегмента данни на процес (в килобайти)

показване или задаване на ограничението за размера на стека на процеса (в килобайти)

-° С

покажете или задайте ограничението за най-големия размер на ядрото, което може да бъде произведено (в блокове от 512 байта)

покажете или задайте ограничението за общата физическа памет, която може да се използва от процеса (в килобайти)

-l

покажете или задайте лимит за колко памет може да блокира процесът с mock (2) (в килобайти )

-p

показва или определя ограничението за броя на процесите, които този потребител може да има едновременно

покажете или задайте ограничението за броя на файловете, които процесът може да е отворен едновременно

Ако никоя от тях не е посочена, това е ограничението за размера на файла, което се показва или задава. Ако е зададена стойност, границата е зададена на този номер; в противен случай се показва текущата граница.

Ограниченията на произволен процес могат да бъдат показани или зададени чрез помощната програма sysctl (8).

umask [ mask ]

Задайте стойността на umask (виж umask (2)) до определената осмова стойност. Ако аргументът бъде пропуснат, стойността umask се отпечатва.

unalias [- a ] [ име ]

Ако името е посочено, черупката премахва този псевдоним. Ако - a е посочено, всички псевдоними се премахват.

деактивиране на името ...

Посочените променливи и функции са деактивирани и не се оповестяват. Ако дадено име съответства както на променлива, така и на функция, променливата и функцията са деактивирани.

чакай [ работа ]

Изчакайте заданието да завърши и да върне изходното състояние на последния процес в заданието. Ако аргументът е пропуснат, изчакайте да приключат всички задания и да върнете изходното състояние на нула.

Редактиране на командния ред

Когато sh се използва интерактивно от терминал, текущата команда и историята на командите (вж. Fc в Sx Builtins) могат да бъдат редактирани чрез редактиране на команден ред vi-mode. Този режим използва команди, описани по-долу, подобни на подмножество от описаните в страницата vi man. Командата `set '-o vi позволява редактирането на ви-режим и поставянето на sh в режим за вмъкване в vi. При активиран режим vi, sh може да се превключи между режима на вмъкване и режима на управление. Редакторът не е описан изцяло тук, но ще бъде в по-късен документ. Това е подобно на vi: пишете Aq ESC ще ви хвърли в команда VI режим команда. Натискането на Aq return, докато сте в командния режим, ще премине линията към черупката.

Важно: Използвайте командата човек ( % man ), за да видите как се използва команда на вашия компютър.