Пепел - команда за Linux - команда на Unix

NAME

sh - команден преведувач ( школка )

СИНОПСИС

sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ target ... ]

ОПИС

Sh е стандарден команден преведувач за системот. Тековната верзија на sh е во процес на менување за да одговара на спецификациите POSIX 1003.2 и 1003.2a за школка. Оваа верзија има многу опции кои го прават тоа слично во некои погледи за школка Korn, но тоа не е клон на Korn shell (види ksh (1)). Само функции назначени од POSIX плус неколку проширувања на Berkeley, се вградени во оваа школка. Очекуваме согласност со POSIX од времето 4.4 BSD е пуштен на слобода. Оваа страница на човекот не е наменета да биде упатство или целосна спецификација на школка.

Преглед

Школка е команда која чита линии од или датотека или терминал, ги толкува, и генерално извршува други команди. Тоа е програма која работи кога корисникот се најавува во системот (иако корисникот може да избере друга школка со командата chsh (1)). Шулката имплементира јазик кој има конструкции за контрола на проток, макро објект кој обезбедува различни карактеристики покрај складирање на податоци, заедно со вградени истории и можност за уредување на линии. Вклучува многу функции за да им помогне интерактивна употреба и има предност дека интерпретативниот јазик е заеднички за интерактивна и не-интерактивна употреба (школка скрипти). Тоа е, командите можат да бидат внесени директно во тековната школка или може да се стават во датотека и датотеката може да биде извршена директно од страна на школка.

Повик

Ако не постојат аргументи и ако стандардниот влез на школка е поврзан со терминал (или ако е поставено знакот - i ), и опцијата -c не е присутна, школка се смета за интерактивна школка . Интерактивна школка генерално ги поттикнува пред секоја команда и различно ги обработува програмските и командните грешки (како што е опишано подолу). Кога првпат се стартува, школка проверува аргумент 0, и ако започнува со цртичка `- ', школка се смета за школка за најава. Ова вообичаено се прави автоматски од страна на системот кога корисникот прво се пријавува. Школка за логирање прво ги чита командите од датотеките / etc / profile и .profile ако тие постојат. Ако променливата на околината ENV е поставена при влез во школка или е поставен во. Профил на школка за најава, школка потоа ги чита командите од датотеката именувана во ENV Затоа, корисникот треба да ги става командите што треба да се извршуваат само во време за најава во датотеката .profile и команди кои се извршуваат за секоја школка во ENV датотеката. За да ја наместите променливата ENV во некоја датотека, ставете ја следната линија во вашиот. Профил од вашиот домашен директориум

ENV = $ HOME / .shinit; извоз ENV

заменувајќи го `` .shinit '' кое било име на датотека што сакате. Бидејќи ENV- датотеката се чита за секое повикување на школка, вклучувајќи скрипти на школка и не-интерактивни школки, следната парадигма е корисна за ограничување на командите во ENV- датотеката за интерактивни повици. Поставете команди во "случајот" и " esac " подолу (овие команди се опишани подоцна):

случај $ - во * i *)

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

...

esac

Ако аргументите на командната линија, покрај опциите се наведени, тогаш школка го третира првиот аргумент како името на датотеката од која ќе читаат команди (школка скрипта), а останатите аргументи се поставени како позициони параметри на школка ($ 1 , 2 $, итн.). Инаку, школка чита команди од својот стандарден влез.

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

Сите опции за едно писмо имаат соодветно име кое може да се користи како аргумент за опцијата - o . Името на множеството - е дадено до опцијата за единечна буква во описот подолу. Одредувањето на цртичка `` - '' ја вклучува опцијата, додека употребата на плус "+" + оневозможува опција. Следните опции можат да се постават од командната линија или со вградениот (1) вграден (опишан подоцна).

allexport

Извоз на сите променливи што се доделуваат. (Неуспешно за 4,4 алфа)

-c

Прочитајте команди од командната линија. Нема да се читаат команди од стандардниот влез.

-C noclobber

Не пребришете ги постоечките датотеки со ``> '' (UNIMPLEMENTED за 4.4alpha)

-e errexit

Ако не е интерактивен, веднаш излезете ако не успее некоја непроверена команда. Се смета дека излезниот статус на команда е експлицитно тестиран ако командата се користи за контрола на елиф додека или додека не е или ако командата е лева рака операнд на оператор `` & & '' или `` || ''.

-f noglob

Оневозможи проширување на патеката .

-не noexec

Ако не се интерактивни, прочитајте ги командите, но не ги извршувајте. Ова е корисно за проверка на синтаксата на скрипти на школка.

-у nounset

Напишете порака за стандардна грешка кога се обидувате да ја проширите променливата што не е поставена, и ако школка не е интерактивна, веднаш излезете. (Неуспешно за 4,4 алфа)

-В разговор

Школката го пишува својот влез за стандардна грешка како што се чита. Корисно за дебагирање.

-x xtrace

Напишете ја секоја команда на стандардна грешка (пред која е претставена `+ 'пред да се изврши. Корисно за дебагирање.

-q тивок профил

Доколку се поставени опциите - v или - x , не ги применувајте при читање на иницијализираните датотеки, бидејќи тие се / etc / profile .profile и датотеката специфицирана со променливата на ENV околина.

- Не сум загрижен

Игнорирајте го EOF од влезот кога е интерактивен.

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

Принудете ја школка да се однесуваат интерактивно.

монитор

Вклучете ја контролата на работното место (автоматски поставете кога е интерактивна).

-со стан

Прочитајте ги командите од стандардниот влез (автоматско поставување ако не постојат аргументи на датотеки). Оваа опција нема ефект кога е поставено откако школка веќе започнала со работа (т.е. со сет (1)).

-V vi

Овозможете го вградениот vi (1) уредник на командната линија (оневозможува - Е ако е поставен).

emacs

Овозможете го вградениот emacs (1) уредник на командната линија (оневозможува - V ако е поставен).

известува

Овозможи асинхронно известување за завршување на работа во позадина. (Неуспешно за 4,4 алфа)

Лексичка структура

Школката го чита влезот во однос на линиите од датотека и ги прекршува во зборови на празни места (празни места и јазичиња), а во одредени секвенци на знаци кои се посебни за школка наречена `` оператори '' Постојат два вида оператори: контролни оператори и оператори за пренасочување (нивното значење е дискутирано подоцна). Следниве е листа на оператори:

"Контролни оператори:"

& && (); ;; | ||

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

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

Цитирајќи

Цитирањето се користи за да се отстрани посебното значење на одредени карактери или зборови на школка, како што се оператори, празни места или клучни зборови. Постојат три вида цитирање: исти цитати, исти двојни цитати и обратна коса црта.

Обратна коса црта

Асоцирањето со обратна коса го задржува буквалното значење на следниот карактер, со исклучок на Aq новата линија. Асоцирањето со обратна коса што претходи на новата линија Aq се третира како продолжување на линијата.

Единствени цитати

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

Двокреветни цитати

Примените знаци во двојни цитати го задржуваат буквалното значење на сите знаци, освен $ dollar ($) и "обратна коса црта" (\). Враќањето на обратна коса во двојните цитати е историски чудно, и служи за цитирање само на следниве знаци:

$ `\ <нова линија>

Инаку останува буквално.

Резервирани зборови

Задржани зборови се зборови што имаат посебно значење за школката и се препознаваат на почетокот на линијата и по контролниот оператор. Следниве се задржани зборови:

! Ta elif Ta fi Ta додека случајот Та

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

не го направил Та до Та, ако е

Нивното значење е дискутирано подоцна.

Aliases

Алијас е име и соодветна вредност поставена со користење на вградената команда на алијас (1). Секогаш кога може да се појави задржан збор (види погоре), и по проверка за задржани зборови, школка го проверува зборот за да види дали се совпаѓа со алијас. Ако го стори тоа, го заменува во влезниот проток со неговата вредност. На пример, ако постои псевдоним наречен `` lf '' со вредност `` ls -F '' тогаш влезот:

lf foobar

ќе стане

ls -F foobar

Псевдоните обезбедуваат лесен начин за наивните корисници да создадат кратенки за команди, без да мора да научат како да креираат функции со аргументи. Тие исто така можат да се користат за создавање на лексички нејасен код. Оваа употреба е обесхрабрена.

Команди

Школката ги толкува зборовите што ги чита според јазикот, чијашто спецификација е надвор од опсегот на оваа човечка страница (погледнете го BNF во документот POSIX 1003.2). Во суштина, сепак, се чита линија и ако првиот збор од линијата (или после контролниот оператор) не е задржан збор, тогаш школка ја препозна едноставната команда. Во спротивно, може да се препознае сложена команда или некоја друга посебна конструкција.

Едноставни команди

Ако едноставна команда е препознаена, школка ги изведува следниве дејства:

  1. Водечките зборови од формата `` name = value '' се одземаат и се доделуваат на просторот на едноставната команда. Операторите за пренасочување и нивните аргументи (како што е опишано подолу) се одземаат и се зачувуваат за обработка.
  2. Останатите зборови се прошируваат како што е опишано во делот наречен `Expansions ', а првиот преостанат збор се смета за командно име и се наоѓа командата. Останатите зборови се сметаат за аргументи на командата. Ако не резултирало со некое име за команда, назначените вредности на "name = value", признати во став 1, влијаат на тековната школка.
  3. Пренасочувањата се вршат како што е опишано во следниот дел.

Пренасочувања

Пренасочувањата се користат за промена каде командата го чита својот влез или го испраќа својот излез. Генерално, пренасочувањата отвораат, затвораат или копираат постоечка референца на датотека. Вкупниот формат што се користи за пренасочување е:

[n] redir-op датотека

каде што redir-op е еден од операторите за пренасочување споменати претходно. Следниве е листа на можни пренасочувања. Bq n е изборен број, како во `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] << разграничувач

тука-doc-текст ...

раздвојувач

Целиот текст за последователни линии до раздвојувачот е зачуван и достапен за командата на стандардниот влез или дескриптор на датотека n, ако е назначен. Ако се цитираат разграничувачите како што е наведено на почетната линија, тука-doc-текст се третира буквално, инаку текстот е подложен на проширување на параметарот, замена на команди и аритметичка експанзија (како што е опишано во делот за `` Expansions '') 'Ако операторот е `<< -' 'наместо` <<' 'тогаш водечките јазичиња во тука-doc-текст се одземаат.

Пребарување и извршување

Постојат три типа на команди: функции на школка, вградени команди и нормални програми - и командата се бара (по име) во тој редослед. Секој од нив се извршува на поинаков начин.

Кога е извршена функцијата на школка, сите параметри на позицијата на школка (освен $ 0, кои остануваат непроменети) се поставени на аргументите на функцијата на школка. Променливите кои експлицитно се поставени во средината на командата (со поставување задачи до нив пред името на функцијата) се локални за функцијата и се поставени на дадените вредности. Тогаш командата дадена во дефиницијата на функција се извршува. Позиционите параметри се вратени на нивните оригинални вредности кога командата завршува. Сето тоа се случува во рамките на тековната школка.

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

Инаку, ако името на командата не се совпаѓа со некоја функција или е изградена, командата се бара како нормална програма во датотечниот систем (како што е опишано во следниот дел). Кога нормална програма е извршена, школка ја извршува програмата, пренесувајќи ги аргументите и околината на програмата. Ако програмата не е нормална извршна датотека (т.е. ако не започне со "магичен број" чија ASCII претстава е "#!", Така execve (2) се враќа Er ENOEXEC тогаш), школка ќе ја интерпретира програмата во подслојка. Детската школка ќе се ре-иницира во овој случај, така што ефектот ќе биде како да се повика нова школка за да се справи со ad-hoc-скриптата, освен што локацијата на хеша команди лоцирани во родителската школка ќе бидат запаметени од дете.

Забележете дека претходните верзии на овој документ и самиот изворниот код погрешно и спорадично се однесуваат на скрипта за школка без магичен број како "процедура на школка".

Барај на патека

Кога лоцира команда, школка најпрво изгледа да се види дали има функција на школка со тоа име. Потоа изгледа за вградена команда со тоа име. Ако вградената команда не е пронајдена, се случи една од две работи:

  1. Командните имиња кои содржат коса црта едноставно се извршуваат без извршување на било какви пребарувања.
  2. Школка го бара секој запис во PATH за возврат за командата. Вредноста на променливата PATH треба да биде серија на записи разделени со колони. Секој запис се состои од име на директориум. Тековниот директориум може да биде назначен имплицитно со празно име на директориум, или експлицитно со еден период.

Command Exit Status

Секоја команда има статус на излез кој може да влијае на однесувањето на другите команди за школка. Парадигмата е дека командата излегува со нула за нормална или успешна, а не нула за неуспех, грешка или лажна индикација. Човечката страница за секоја команда треба да ги наведе различните кодови за излез и што значи. Дополнително, вградените команди ги враќаат излезните кодови, како и извршената функција на школка.

Комплексни команди

Комплексните команди се комбинации на едноставни команди со контролни оператори или задржани зборови, заедно создавајќи поголема комплексна команда. Поопшто, командата е една од следниве:

Освен ако не е поинаку наведено, статусот за излез на командата е оној на последната едноставна команда извршена од командата.

Цевководи

Гасоводот е низа од една или повеќе команди разделени од контролниот оператор. Стандардниот излез на сите освен последната команда е поврзан со стандардниот влез на следната команда. Стандардниот излез од последната команда е наследен од школка, како и обично.

Форматот за гасоводот е:

[!] command1 [| команда2 ...]

Стандардниот излез на command1 е поврзан со стандардниот влез на командата2. Стандардниот влез, стандардниот излез или двата команда се смета дека се назначени од нафтоводот пред какво било пренасочување специфицирано од операторите за пренасочување кои се дел од командата.

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

Ако задржаниот збор! не претходи на цевководот, статусот за излез е излезниот статус на последната команда одредена во цевководот. Инаку, статусот за излез е логичен НЕ на статусот за излез од последната команда. Тоа е, ако последната команда се враќа нула, статусот за излез е 1; ако последната команда се врати поголема од нула, статусот за излез е нула.

Бидејќи доделувањето на гасоводот на стандардниот влез или стандардниот излез или и двете се одвива пред пренасочување, може да се промени со пренасочување. На пример:

$ command1 2> & 1 | command2

испраќа и стандарден излез и стандардна грешка на командата1 до стандардниот влез на командата2.

A; или терминатор предизвикува претходната И-ИЛИ-листа (опишана подолу) да биде извршена последователно; a & предизвикува асинхронно извршување на претходната И-ИЛИ-листа.

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

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

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

Форматот за извршување на команда во заднина е:

command1 & [command2 & ...]

Ако школка не е интерактивна, стандардниот влез на асинхроната команда е поставен на / dev / null

Листи - Општо земено

Листата е секвенца од нула или повеќе команди одделени со нови линии, точки со запирка или амперндаи, и евентуално прекинат со еден од овие три знака. Командите во листата се извршуваат по редоследот на кој се напишани. Ако командата е проследена со амперсанд, школка ја започнува командата и веднаш продолжува кон следната команда; инаку чека да се прекине командата пред да се продолжи со следното.

Краткорочни оператори

`` && '' и `` || '' се оператори со список AND-OR. `` & & '' ја извршува првата команда, а потоа ја извршува втората команда ако излезниот статус на првата команда е нула. `` || '' е слична, но ја извршува втората команда ако излезниот статус на првата команда е нула. `` && '' и `` || '' имаат ист приоритет.

Контрола на проток - ако, додека, за, случај

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

ако листата
потоа листа
[елиф листа
потоа листа] ...
[друга листа]
fi

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

додека списокот
направи листа
направено

Двете листи се извршуваат постојано, додека излезниот статус на првата листа е нула. Додека командата е слична, но го има зборот сè додека не дојде време, што го предизвикува повторувањето сè додека излезниот статус на првата листа не биде нула.

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

за променлива во зборот ...
направи листа
направено

Зборовите се прошируваат, а потоа листата се извршува постојано со променливата поставена на секој збор за возврат. може да се замени со `` {'' и ​​``} ''

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

пауза [број]
продолжи [број]

Пауза го прекинува бројот на најскриените за или додека петелките. Продолжи со следната итерација на внатрешната јамка. Овие се имплементираат како вградени команди.

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

случај збор внатре
шема) листа ;;
...
esac

Моделот всушност може да биде еден или повеќе обрасци (видете подолу Шалтерски шаблони), разделени со знаци "` `'.

Заеднички команди за групирање

Командите можат да бидат групирани со пишување или

(листа)

или

{листа;

Првиот од овие ги извршува командите во подслој. Вградените команди групирани во (листа) нема да влијаат на тековната школка. Втората форма не вилушува друга школка, па е малку поефикасна. Групирањето команди заедно на овој начин ви овозможува да ги пренасочите нивните резултати како да беа една програма:

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

Функции

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

name () команда

Дефиниција на функција е извршна изјава; кога е извршена, инсталира функција име со име и го враќа статусот за излез од нула. Командата обично е листа заградена помеѓу `` {'' и ​​``} ''

Променливите може да се декларираат како локални на функција со користење на локална команда. Ова треба да се појави како прва изјава за функција, а синтаксата е

локална [променлива | -] ...

Локалната е имплементирана како вградена команда.

Кога променливата е направена локална, ја наследува почетната вредност и извезува и ги чита само знамињата од променливата со исто име во околината, доколку постои. Во спротивно, променливата првично не е поставена. Школката користи динамички опсег, така што ако ја внесете променливата x локална на функцијата f, која потоа ја повикува функцијата g, референци на променливата x направена во g ќе се однесува на променливата x пријавена во f, а не на глобалната променлива име x .

Единствениот посебен параметар одошто може да се направи локален е `` - '' Изработка на `` - '' локални опции на школка кои се менуваат преку наместената команда внатре во функцијата за да се вратат на нивните оригинални вредности кога функцијата се враќа.

Синтаксата на командата за враќање е

врати [exitstatus

Ја прекинува функцијата што моментално се извршува. Враќањето се имплементира како вградена команда.

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

Школка одржува сет на параметри. Параметарот означен со име се нарекува променлива. Кога стартувате, школка ги претвора сите променливи на околината во школка променливи. Нови променливи може да се постават со помош на формуларот

име = вредност

Варијаблите поставени од страна на корисникот мора да имаат име кое се состои само од азбучни, нумерички и долни црти - од кои првиот не смее да биде нумерички. Параметарот, исто така, може да се означи со број или специјален знак како што е објаснето подолу.

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

Позициски параметар е параметар означен со број (n> 0). Школката ги поставува првично на вредностите на аргументите на командната линија кои го следат името на школка скрипта. Вградениот (1) вграден исто така може да се користи за поставување или ресетирање на нив.

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

Посебен параметар е параметар означен со еден од следниве специјални знаци. Вредноста на параметарот е наведена веднаш до неговиот карактер.

*

Се проширува до позициони параметри, почнувајќи од еден. Кога експанзијата се случува во двоцифрена низа, таа се проширува на едно поле со вредност на секој параметар одделен со првиот карактер на променливата IFS , или со ако IFS не е поставена.

@

Се проширува до позициони параметри, почнувајќи од еден. Кога експанзијата се случува во двојни цитати, секој позициски параметар се проширува како посебен аргумент. Ако нема позициони параметри, проширувањето на @ генерира нула аргументи, дури и кога @ е двојно цитиран. Она што во основа значи, на пример, ако $ 1 е `` abc '' и $ 2 е `` def ghi '', тогаш Qq $ @ се проширува на два аргументи:

abc def ghi

#

Се проширува на бројот на позициони параметри.

?

Се проширува до излезниот статус на најновиот гасовод.

- (цртичка.)

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

$

Се проширува до идентификацијата на процесот на повиканата школка. Подслој ја задржува истата вредност на $ како нејзин родител.

!

Се проширува во идентификацијата на процесот на најновата позадина команда извршена од тековната школка. За гасовод, идентификацијата на процесот е онаа на последната команда во гасоводот.

0 (нула.)

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

Проширување на зборови

Оваа клаузула ги опишува различните проширувања што се изведуваат со зборови. Не сите проширувања се изведуваат на секој збор, како што е објаснето подоцна.

Проширувањето на Тилда, екстензии на параметри, командни замени, аритметички експанзии и цитатски отстранувања што се појавуваат во еден збор се прошируваат на едно поле. Тоа е само разделување на полето или проширување на патеката што може да создаде повеќе полиња од еден збор. Единствен исклучок од ова правило е проширувањето на специјалниот параметар @ во двојни цитати, како што беше опишано погоре.

Редоследот на проширувањето на зборовите е:

  1. Проширување на Тилда, проширување на параметри, замена на команди, аритметичко проширување (сите овие се појавуваат во исто време).
  2. Поделбата на полето се врши на полиња генерирани од чекор (1), освен ако променливата IFS е нула.
  3. Проширување на патеката (освен ако е поставено - f е на сила).
  4. Цитат Отстранување.

Знакот $ се користи за воведување на проширување на параметар, замена на команди или аритметичка евалуација.

Проширување на тилда (замена на домашен директориум на корисникот)

Зборот што започнува со неквалификуван тилден карактер (~) е подложен на проширување на тилдите. Сите знаци до коса црта (/) или на крајот на зборот се третираат како корисничко име и се заменуваат со домашниот директориум на корисникот. Ако нема корисничко име (како во ~ / foobar), тилдата се заменува со вредноста на променливата HOME (домашен директориум на тековниот корисник).

Проширување на параметри

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

каде што изразот се состои од сите знаци додека не се избегне совпаѓање ``} '' Any ``} '' со обратна коса црта или во цитираниот стринг, како и знаци во вградени аритметички проширувања, командни замени и променливи проширувања не се испитуваат при одредувањето на појавување ``} ''

Наједноставната форма за проширување на параметрите е:

Вредноста, доколку постои, на параметарот е заменета.

Името или симболот на параметарот може да биде затворен во загради, кои се опционални освен за позициони параметри со повеќе од една цифра или кога параметарот го следи карактер кој може да се толкува како дел од името. Ако проширување на параметарот се случува во двојни цитати:

  1. Проширувањето на патеката не се изведува врз резултатите од експанзијата.
  2. Поделбата на областа не се врши врз резултатите од експанзијата, со исклучок на @.

Покрај тоа, експанзија на параметар може да се модифицира со користење на еден од следниве формати.

Користете стандардни вредности. Ако параметарот е несовршен или нула, проширувањето на зборот е заменето; во спротивно, вредноста на параметарот е заменет.

Доделете ги стандардните вредности. Доколку параметарот е несовршен или нула, проширувањето на зборот се доделува на параметар. Во сите случаи, конечната вредност на параметарот е заменет. На ваков начин може да се назначат само променливи, а не позициони параметри или специјални параметри.

Наведете ја грешката ако Null или Unset. Ако параметарот е неизложен или не е нишан, проширувањето на зборот (или пораката што ја покажува таа не е поставена ако зборот е испуштен) е запишан на стандардна грешка и школка излезе со статус на излез од ненулесто. Инаку, вредноста на параметарот е заменет. Интерактивната школка не треба да излезе.

Користете алтернативна вредност. Ако параметарот е непроменет или нул, нула е заменет; во спротивно, проширувањето на зборот е заменето.

Во претходно прикажаните параметри, користењето на дебелото црево во формат резултира со тест за параметар кој е неизложен или нула; пропуст на дебелото црево резултира со тест за параметар кој е исклучен.

Должина на стринг. Должината во знаците на вредноста на параметарот.

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

Отстрани најмалиот суфикс шаблон. Зборот е проширен за да произведе шема. Параметарот проширување потоа резултира во параметар, со најмалиот дел на суфиксот исти со избришани шема.

Отстрани го најширокиот нацрт на суфиксот. Зборот е проширен за да произведе шема. Проширувањето на параметарот потоа резултира со параметар, при што најголемиот дел од суфиксот се совпаѓа со избришаниот образец.

Отстрани најмалиот шаблон за префикс. Зборот е проширен за да произведе шема. Проширувањето на параметарот потоа резултира со параметар, со најмалиот дел од префиксот исти со избришаниот образец.

Отстрани го најширокиот шаблон за префикс. Зборот е проширен за да произведе шема. Параметарот проширување потоа резултира со параметар, со најголем дел од префиксот исти со избришани шема.

Командна замена

Замена на командата овозможува излезот на командата да биде заменет на местото на самиот команден назив. Замена на команди се случува кога командата е затворена како што следува:

$ (команда)

или По `` backquoted '' верзија Pc:

`команда`

Школката ја проширува командата за замена со извршување на команда во опкружувачка средина и замена на командата замена со стандардниот излез на командата, отстранување на секвенци на една или повеќе s на крајот од замена. (Вградени s пред крајот на излезот не се отстрануваат, меѓутоа, за време на поделба на полето, тие може да се преведат во s, во зависност од вредноста на IFS и цитирањето што е во сила.)

Аритметичка експанзија

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

$ ((израз))

Изразот се третира како да е во двојни цитати, освен што двојниот цитат во изразот не се третира посебно. Школката ги проширува сите токени во изразот за проширување на параметрите, команда за замена и отстранување цитат.

Следно, школка го третира ова како аритметички израз и ја заменува вредноста на изразот.

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

По проширување на параметарот, команда за замена и аритметичка експанзија, школка ги скенира резултатите од проширувањата и заменувањата кои не се појавија во двојни цитати за разделување на полето и може да резултираат со повеќе полиња.

Школката го третира секој карактер на IFS како разделител и ги користи разграничувачите за да ги подели резултатите од проширувањето на параметарот и замена на командата во полиња.

Проширување на патеката (генерирање на име на датотека)

Освен ако не е поставено знакот - f , генерирањето на името на датотеката се врши по завршувањето на поделбата на зборови. Секој збор се гледа како серија на обрасци, разделени со коса. Процесот на експанзија го заменува зборот со имињата на сите постоечки датотеки чии имиња можат да се формираат со замена на секој модел со низа што одговара на наведениот образец. Постојат две ограничувања за ова: прво, шаблонот не може да одговара на низа која содржи коса црта, и второ, шаблонот не може да одговара на низа почнувајќи со период, освен ако првиот карактер на моделот не е период. Следниот дел ги опишува шаблоните што се користат за проширување на Pathname и за случајот (1).

Шел шаблони

Моделот се состои од нормални знаци, кои се совпаѓаат и мета-знаци. Мета-ликовите се ``!! '`` *' '``??' 'И `` [' 'Овие знаци го губат своето посебно значење ако се цитираат. Кога се извршува команда или променлива замена и знаците за долар или задни цитати не се дуплирани, вредноста на променливата или излезот на командата се скенира за овие знаци и тие се претвораат во мета-знаци.

Ѕвездичка (`` * '') одговара на било кој низа знаци. Знак за прашалник се совпаѓа со секој единствен знак. Левата заграда (`` ['') воведува класа на знаци. Крајот на класата на знаци е означен со (``] '') ако недостасува `` '' ', тогаш `` [' 'одговара на `` [' ', наместо да внесува класа на знаци. Класата на знаци се совпаѓа со некој од ликовите меѓу квадратните загради. Низа знаци може да се наведат со знак минус. Класата на знаци може да биде надополнета со тоа што ќе се појави фантастичен прв карактер на класата на знаци.

За да вклучите ``] '' во класа на знаци, направете го првиот лик наведен (по ``! '' Ако има). За да вклучите знак минус, ставете го првиот или последниот знак

Вградени

Овој дел ги наведува вградените команди кои се вградени затоа што треба да извршат некоја операција која не може да се изврши со посебен процес. Покрај овие, постојат и неколку други команди кои може да бидат вградени за ефикасност (на пр. Ехо 1).

:

Нулта команда која враќа 0 (вистинска) излезна вредност.

. датотека

Командите во наведената датотека се читаат и извршуваат од страна на школка.

алијас [ име [ = стринг ... ]]

Ако е наведен името = стрингот , школка го дефинира името на алијас со вредносна низа. Ако е назначено само името , вредноста на името на алијас се отпечати. Без аргументи, вградениот псевдоним ги отсликува имињата и вредностите на сите дефинирани псевдоними (видете нелиаии)

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

Продолжете ги зададените задачи (или тековната задача ако не се дадени задачи) во позадина.

команда команда аргумент ...

Извршете ја одредената вградена команда. (Ова е корисно кога имате функција на школка со исто име како вградена команда.)

cd [ директориум ]

Префрлете се на наведениот директориум (стандарден $ HOME) Доколку се појави запис за CDPATH во околината на командата cd или промената на прозорецот CDPATH и името на директориумот не започнува со коса црта, тогаш ќе се пребаруваат директориумите наведени во CDPATH за наведениот директориум. Форматот на CDPATH е ист како оној на PATH. Во интерактивната школка, командата cd ќе го испечати името на директориумот во кој тој навистина се префрли, ако ова е различно од името што го даде корисникот. Овие можат да бидат различни, бидејќи механизмот CDPATH бил користен или затоа што била преминала симболичка врска.

eval стринг ...

Конкатени ги сите аргументи со празни места. Потоа повторно разбери и изврши команда.

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

Освен ако командата не е испуштена, процесот на школка се заменува со наведената програма (која мора да биде вистинска програма, а не гравирана или функционална). Сите пренасочувања на командата exec се означени како постојани, така што тие не се откажани кога командата exec завршува.

излез [ exitstatus ]

Прекинете го процесот на школка. Ако е дадено exitstatus, тој се користи како статус за излез на школка; во спротивно се користи излезниот статус на претходната команда.

извозно име ...

извоз -p

Наведените имиња се извезуваат, така што тие ќе се појават во средината на следните команди. Единствениот начин за отстранување на променлива е да го исклучите. Школка овозможува вредноста на променливата да биде поставена во исто време кога се извезува со пишување

извоз име = вредност

Без аргументи командата за извоз ги наведува имињата на сите извезени променливи. Со наведената опција - p излезот ќе биде соодветно форматиран за не-интерактивна употреба.

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

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

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

Фк вградените листи, или уредувања и повторно извршува, команди претходно внесени во интерактивна школка.

уредник

Користете уредувач именуван од уредник за да ги уредите командите. Стригата на уредникот е име на команда, предмет на пребарување преку променливата PATH . Вредноста во променливата FCEDIT се користи како стандардно кога - е не е одредено. Ако FCEDIT е нула или не е поставена, се користи вредноста на променливата EDITOR . Ако уредникот е нула или не е поставена, ед (1) се користи како уредувач.

-l (ell)

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

-n

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

-r

Врати го редоследот на наброените команди (со- л или изменето (со ниту- л ниту со)

Повторно изврши ја командата без да се повика уредник.

прво

последен

Изберете ги командите за листа или уредување. Бројот на претходните команди за кои може да се пристапи се одредува според вредноста на променливата HISTSIZE . Вредноста на првата или последната или двете се една од следниве:

[+] број

Позитивен број претставува команден број; командните броеви можат да бидат прикажани со опцијата - l .

-број

Негативен децимален број кој ја претставува командата која беше извршена број на команди претходно. На пример, -1 е претходна претходна команда.

стринг

Стринг што ја покажува последната влезна команда која започнува со таа низа. Ако стариот = нов операнд не е специфициран со - стрингот на првиот операнд не може да содржи вграден знак за еднаквост.

Следниве променливи на околината влијаат врз извршувањето на fc:

FCEDIT

Име на уредникот за употреба.

ИСТОРИЈАЈ

Бројот на претходните команди кои се достапни.

fg [ работа ]

Поместете ја зададената задача или тековната задача на преден план.

getopts optstring var

POSIX getopts команда, а не да се меша со Bell Labs- избришани getopt (1).

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

Командата getopts ја забранува старата getopt (1) алатка поради ракување со аргументи кои содржат празни места.

Вградените getopts може да се користат за добивање опции и нивните аргументи од листа на параметри. Кога се повикуваат, getopts ја става вредноста на следната опција од опцијата низа во листата во променливата на школка назначена од var и е индекс во променливата на школка OPTIND Кога се користи командната линија, OPTIND се иницијализира на 1. За секоја опција која бара аргумент, вградениот getopts ќе го смести во променливата на школка 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 датотека со датотеки со arg
cmd -carg-датотека со датотеки
cmd -a -carg - датотека со датотеки

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

Школката одржува хаш-табела која се сеќава на локациите на командите. Без никакви аргументи, хаш командата ја отпечатоци содржината на оваа табела. Записи кои не се погледнати од последната команда на cd се означени со ѕвездичка; можно е овие записи да бидат неважечки.

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

работа [ работа ]

Печатете го идентификацијата на процесот на процесите во работното место. Ако аргументот за работа е испуштен, се користи тековната задача.

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

Оваа команда ги прикажува сите процеси во позадина кои се деца на тековниот процес на школка.

pwd

Печатете го тековниот директориум. Вградената команда може да се разликува од програмата со исто име, бидејќи вградената команда се сеќава на она што тековниот директориум е, наместо да го пресметува секој пат. Ова го прави побрзо. Меѓутоа, ако сегашниот директориум е преименуван, вградената верзија на pwd ќе продолжи да го печати старото име за директориумот.

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

Прашањето се печати, ако опцијата - p е наведена и стандардниот влез е терминал. Потоа, линијата се чита од стандардниот влез. Завршената нова линија е избришана од линијата и линијата е поделена како што е опишано во делот за разделување на зборови погоре, а парчињата се доделуваат на променливите по редослед. Мора да се специфицира барем една променлива. Ако има повеќе парчиња од променливите, останатите парчиња (заедно со ликовите во IFS што ги одделуваат) се доделуваат на последната променлива. Ако има повеќе променливи од парчиња, на останатите променливи се добива нулта низа. Изграденото читање ќе укаже на успех, освен ако не се сретне со EOF на влезот, во кој случај се враќа неуспехот.

Стандардно, освен ако не е одредена опцијата - r , обратна коса црта `` \ '' дејствува како знак за избегнување, што предизвикува буквално да се третира следниот карактер. Ако обратна коса црта е проследена со нова линија, обратна коса црта и нова линија ќе бидат избришани.

само за читање ...

само за читање -p

Специфицираните имиња се означени како само за читање, така што тие не можат подоцна да се модифицираат или да се исклучат. Школка овозможува вредноста на променливата да биде поставена во исто време, означена е само за читање со пишување

readonly име = вредност

Без аргументи, командата readonly ги наведува имињата на сите променливи за читање. Со наведената опција - p излезот ќе биде соодветно форматиран за не-интерактивна употреба.

поставете [{- опции | + опции | - arg ... ]

Наместената команда извршува три различни функции.

Без аргументи, ги наведува вредностите на сите школка променливи.

Ако се дадени опции, таа ги поставува означените опциски знамиња или ги брише како што е опишано во делот наречен Обработка на листа на аргументи Sx.

Третата употреба на наместената команда е да ги поставите вредностите на позиционите параметри на школка на наведените аргументи. За промена на позициони параметри без да ги менувате сите опции, користете го `` - '' како прв аргумент што треба да го поставите. Ако не постојат аргументи, наместената команда ќе ги исчисти сите позициони параметри (еквивалентни на извршување на `` shift $ #. '' '

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

Доделува вредност на променлива. (Во принцип, подобро е да се напише променлива = вредност, наместо да се користи сетварот сетвар , наменето е да се користи во функции кои доделуваат вредности на променливи чии имиња се пренесуваат како параметри.)

смена [ n ]

Поставете ги позиционите параметри n пати. А смена ја поставува вредноста од $ 1 до вредноста од $ 2 вредноста од $ 2 до вредноста од $ 3 и така натаму, намалувајќи ја вредноста од $ # за една. Ако n е поголем од бројот на позициони параметри, смената ќе издаде порака за грешка и ќе излезе со статус за враќање 2.

времиња

Печатете го акумулираниот корисник и систем пати за школка и за процесите што работат од школка. Повратен статус е 0.

сигнал за акција ...

Предизвикајте ја школка за разгледување и извршување на дејство кога некој од наведените сигнали се прима. Сигналите се одредуваат со бројот на сигналот. Ако сигналот е 0 , дејството се извршува кога школка ќе излезе. дејството може да биде нула или `` - '', што првото предизвикува наведениот сигнал да биде игнориран, а вториот предизвикува стандардно дејство да се преземе. Кога школка ја одбива потсечната , таа ги враќа задржаните (но не и игнорираните) сигнали до основното дејство. Командата за стапица нема ефект врз сигналите кои биле игнорирани при влез во школка.

тип [ име ... ]

Интерпретирајте го секое име како команда и отпечатете ја резолуцијата на пребарувањето за команда. Можни резолуции се: клучен збор за школка, алијас, изградена команда, команда, алијас за следење и не е пронајдена. За алијаси се отпечати проширувањето на алијас; за команди и придружни алијаси се отпечати целосната патека на командата.

ulimit [- H -S ] [- a-tfdscmlpn [ вредност ]]

Побарајте или поставете ги тврдите или меките граници на процесите или поставете нови граници. Изборот помеѓу тврдото ограничување (кое не е дозволено да прекршува некој процес и што не може да се зголеми откако ќе се спушти) и мекиот лимит (кој предизвикува процеси да бидат сигнализирани, но не и неопходно убиени и кои можат да се зголемат) се прави со овие знамиња:

-H

постави или да се распрашува за тврди лимити

-S

постави или да се распрашува за меки граници. Ако не е назначено ни- H ниту -S , мек-лимитот е прикажан или се поставени двете ограничувања. Ако и двете се наведени, последниот победи.

Лимитот што треба да се испитува или поставува, потоа, се избира со наведување на кое било од овие знамиња:

покажи ги сите тековни граници

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

-f

покажи или поставите ограничување на најголемата датотека што може да се креира (во 512-бајт блокови)

-d

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

покажи или поставите граница на големина на стек на процес (во килобајти)

-c

покаже или го постави ограничувањето на најголемата големина на отпадната големина што може да се произведе (во 512-бајт блокови)

-m

покажи или поставите го ограничувањето на вкупната физичка меморија што може да се користи со процес (во килобајти)

-l

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

-p

покажи или поставите граница на бројот на процеси кои овој корисник може да ги има во исто време

-n

покажи или поставете го ограничувањето на датотеките со број што може да се отвори одеднаш

Ако ништо не е наведено, тоа е ограничувањето на големината на датотеката што е прикажана или поставена. Ако вредноста е одредена, границата е поставена на тој број; во спротивно ќе се прикаже сегашната граница.

Ограничувањата на произволниот процес може да бидат прикажани или поставени користејќи ја алатката sysctl (8).

умаска [ маска ]

Поставете ја вредноста на умаска (види умаск (2)) до одредената осветлена вредност. Ако аргументот е испуштен, вредноста на умаска е отпечатена.

нелиаји [- a ] [ име ]

Ако е наведено името , школка го отстранува тој алијас. Ако - а е наведен, сите алијаси се отстранети.

невршено име ...

Специфичните променливи и функции се неусогласени и неекспонирани. Ако одредено име одговара на променливата и на функцијата, и променливата и функцијата се непроменети.

почекај [ работа ]

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

Уредување на командната линија

Кога sh се користи интерактивно од терминал, тековната команда и историјата на командата (видете Fc во Sx Вградените) може да се уредуваат користејќи vi-режим командната линија за уредување. Овој режим користи команди, опишани подолу, слични на подмножество на оние опишани на страната vi man. Командата `set '-o vi овозможува ви-режим на уредување и ставете sh во vi insert mode. Со режимот vi-mode, sh може да се вклучи помеѓу режимот на вметнување и командниот режим. Уредувачот не е опишан во целост тука, но ќе биде во подоцнежен документ. Слично е на vi: пишувањето AQ ESC ќе ве фрли во командниот режим на командата VI. Притискање Aq враќање додека во командниот режим ќе ја помине линијата до школка.

Важно: Користете ја командата за човекот ( % man ) за да видите како се користи командата на вашиот компјутер.