Ash - Linux Command - Unix Command

NAME

sh - command interpreter ( shell )

SINOPSIS

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

DESCRIPTION

Si Sh ay ang standard command interpreter para sa sistema. Ang kasalukuyang bersyon ng sh ay nasa proseso ng pagbabago upang sumunod sa POSIX 1003.2 at 1003.2a na mga pagtutukoy para sa shell. Ang bersyon na ito ay may maraming mga tampok na lumilitaw na katulad nito sa ilang respeto sa Korn shell, ngunit hindi ito isang clone ng Korn shell (tingnan ang ksh (1)). Tanging mga tampok na itinalaga ng POSIX kasama ang ilang mga extension ng Berkeley, ay isinasama sa shell na ito. Inaasahan namin ang POSIX conformance sa pamamagitan ng oras 4.4 BSD ay inilabas. Ang pahinang ito ng tao ay hindi inilaan upang maging isang tutorial o isang kumpletong pagtutukoy ng shell.

Pangkalahatang-ideya

Ang shell ay isang command na nagbabasa ng mga linya mula sa alinman sa isang file o terminal, binibigyang-kahulugan ang mga ito, at sa pangkalahatan ay nagpapatupad ng iba pang mga utos. Ito ay ang programa na tumatakbo kapag ang isang gumagamit ay nag-log sa system (bagaman ang isang user ay maaaring pumili ng ibang shell na may chsh (1) command). Ang shell ay nagpapatupad ng isang wika na may mga kontrol ng pagdaloy ng daloy, isang macro facility na nagbibigay ng iba't ibang mga tampok bukod sa imbakan ng data, kasama ang built in na kasaysayan at mga kakayahan sa pag-edit ng linya. Isinasama nito ang maraming mga tampok upang makatulong sa paggamit ng interactive at may kalamangan na ang interpretasyong wika ay pangkaraniwan sa parehong interactive at di-interactive na paggamit (shell script). Iyon ay, ang mga utos ay maaaring mai-type nang direkta sa tumatakbong shell o maaaring ilagay sa isang file at ang file ay maaaring maisagawa nang direkta ng shell.

Pagsamba

Kung walang mga args ang naroroon at kung ang standard na input ng shell ay nakakabit sa isang terminal (o kung ang i - flag ang nakatakda), at ang opsyon na - c ay wala, ang shell ay itinuturing na isang interactive na shell . Ang isang interactive na shell ay karaniwang nag-uudyok bago ang bawat command at humahawak ng mga error ng programming at command nang iba (tulad ng inilarawan sa ibaba). Kapag unang nagsisimula, sinusuri ng shell ang argument 0, at kung nagsisimula ito sa isang dash `- 'ang shell ay isinasaalang-alang din ng isang login shell. Ito ay karaniwang awtomatikong isinagawa ng system kapag ang unang gumagamit ay nag-log in. Ang isang login shell ay unang nagbabasa ng mga utos mula sa mga file / etc / profile at .profil kung umiiral sila. Kung ang environment variable na ENV ay naka-set sa entry sa isang shell, o naka-set sa .profile ng isang shell ng pag-login, ang shell ay susunod na nagbabasa ng mga command mula sa file na pinangalanan sa ENV Samakatuwid, ang isang gumagamit ay dapat maglagay ng mga utos na ipapatupad lamang sa oras ng pag-login sa file na .profile, at mga command na naisakatuparan para sa bawat shell sa loob ng ENV file. Upang itakda ang variable ng ENV sa ilang file, ilagay ang sumusunod na linya sa iyong .profile ng iyong home directory

ENV = $ HOME / .shinit; i-export ang ENV

substituting para sa ``. shinit '' anumang filename na nais mo. Dahil nabasa ang ENV file para sa bawat invocation ng shell, kabilang ang mga script ng shell at di-interactive shell, ang sumusunod na paradaym ay kapaki-pakinabang para sa paghihigpit ng mga utos sa ENV file sa interactive na mga invocation. Maglagay ng mga utos sa loob ng `` kaso '' at `` esac '' sa ibaba (ang mga utos ay inilarawan sa ibang pagkakataon):

case $ - in * i *)

# mga utos para sa mapag-ugnay na paggamit lamang

...

esac

Kung ang mga argumento ng command line maliban sa mga pagpipilian ay tinukoy, pagkatapos ay ituring ng shell ang unang argument bilang ang pangalan ng isang file na kung saan ay magbasa ng mga command (isang shell script), at ang natitirang mga argumento ay nakatakda bilang positional parameter ng shell ($ 1 , $ 2, atbp). Kung hindi man, binabasa ng shell ang mga utos mula sa karaniwang input nito.

Pagproseso ng Listahan ng Argumento

Ang lahat ng mga opsyon ng solong titik ay may katumbas na pangalan na maaaring magamit bilang argumento sa opsyon na - o . Ang set- o pangalan ay ibinigay sa tabi ng opsyon na solong titik sa paglalarawan sa ibaba. Ang pagtukoy sa isang dash na `` - '' ay lumiliko ang opsyon sa, habang gumagamit ng isang plus `` + '' hindi pinapagana ang opsyon. Ang mga sumusunod na opsyon ay maaaring itakda mula sa command line o sa set (1) builtin (inilarawan sa ibang pagkakataon).

-isang allexport

I-export ang lahat ng mga variable na nakatalaga sa. (Hindi itinuturing para sa 4.4alpha)

-c

Basahin ang mga utos mula sa command line. Walang mga utos ang mababasa mula sa karaniwang input.

-C noclobber

Huwag patungan ang umiiral na mga file sa ``> '' (UNIMPLEMENTED for 4.4alpha)

-e errexit

Kung hindi interactive, lumabas kaagad kung nabigo ang anumang untested command. Ang exit status ng isang command ay itinuturing na tahasang sinubok kung ang utos ay ginagamit upang makontrol ang isang kung ang elif habang o hanggang o kung ang utos ay ang operand sa kaliwang kamay ng isang `` && '' o `` || '' operator.

-f noglob

Huwag paganahin ang expansion ng pathname .

-n noexec

Kung hindi interactive, basahin ang mga utos ngunit huwag isagawa ang mga ito. Ito ay kapaki-pakinabang para sa pagsuri sa syntax ng shell script.

-u nounset

Sumulat ng mensahe sa karaniwang error kapag sinusubukang palawakin ang isang variable na hindi nakatakda, at kung ang shell ay hindi interactive, lumabas kaagad. (Hindi itinuturing para sa 4.4alpha)

-v masigla

Isinulat ng shell ang input nito sa karaniwang error habang binabasa ito. Kapaki-pakinabang para sa pag-debug.

-x xtrace

Isulat ang bawat command sa karaniwang error (na sinusundan ng isang `+ 'bago ito isagawa. Mga kapaki-pakinabang para sa pag-debug.

-q quietprofile

Kung naka-set ang mga pagpipilian sa v- o- x , huwag ilapat ang mga ito kapag nagbabasa ng mga file sa pag-initialize, ang mga ito ay / etc / profile .profile at ang file na tinukoy ng ENV environment variable.

-Alam ko

Huwag pansinin ang EOF mula sa input kapag interactive.

-I interactive

Puwersahin ang shell upang kumilos nang interactively.

-m monitor

I-on ang kontrol ng trabaho (awtomatikong itatakda kapag nakaka-interactive).

-s stdin

Basahin ang mga command mula sa karaniwang input (awtomatikong itatakda kung walang mga argumento ng file ay naroroon). Ang opsyon na ito ay walang epekto kapag naka-set matapos ang shell ay nagsimula na tumatakbo (ibig sabihin sa set (1)).

-V vi

Paganahin ang built-in na vi (1) command line editor (hindi pinapagana - E kung nakatakda na ito).

-E emacs

Paganahin ang built-in emacs (1) command line editor (hindi pinapagana - V kung ito ay naitakda).

-b abisuhan

Paganahin ang asynchronous na abiso ng pagkumpleto ng trabaho sa background. (Hindi itinuturing para sa 4.4alpha)

Lexical Structure

Binabasa ng shell ang input sa mga tuntunin ng mga linya mula sa isang file at pinuputol ito sa mga salita sa whitespace (blangko at mga tab), at sa ilang mga pagkakasunud-sunod ng mga character na espesyal sa shell na tinatawag na `` operator '' Mayroong dalawang uri ng mga operator: mga operator ng kontrol at mga operator ng pag-redirect (ang kanilang kahulugan ay tinalakay sa ibang pagkakataon). Ang sumusunod ay isang listahan ng mga operator:

"Mga operator ng control:"

&&& (); ;; | ||

"Pag-redirect operator:"

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

Pag-quote

Ang pagbanggit ay ginagamit upang alisin ang mga espesyal na kahulugan ng ilang mga character o mga salita sa shell, tulad ng mga operator, whitespace, o mga keyword. May tatlong uri ng pag-quote: tumutugma sa mga solong quotes, katugmang double quotes, at backslash.

Backslash

Ang isang backslash pinapanatili ang literal na kahulugan ng sumusunod na karakter, maliban sa Aq newline. Ang isang backslash na sinusundan ng Aq newline ay itinuturing bilang isang pagpapatuloy ng linya.

Single Quote

Ang pag-encode ng mga character sa mga solong panipi ay nagpapanatili ng literal na kahulugan ng lahat ng mga character (maliban sa mga solong quotes, na ginagawang imposibleng maglagay ng single-quotes sa isang solong naka-quote na string).

Double Quotes

Ang pag-enclose ng mga character sa loob ng double quotes ay pinapanatili ang literal na kahulugan ng lahat ng mga karakter maliban sa dollarsign ($) backquote (`) at backslash (\) Ang backslash sa loob ng double quotes ay kakaiba sa kasaysayan, at nagsisilbing quote lamang ang mga sumusunod na character:

$ `\

Kung hindi man ay nananatiling literal.

Mga Nakalaang Salita

Ang mga nakalaang salita ay mga salita na may espesyal na kahulugan sa shell at kinikilala sa simula ng isang linya at pagkatapos ng isang operator ng kontrol. Ang mga sumusunod ay nakareserba na mga salita:

! Ta elif Ta fi Ta Ta habang Ta kaso

ibang Ta para Ta pagkatapos Ta {Ta}

gawin Ta tapos Ta hanggang Ta kung Ta esac

Ang kanilang kahulugan ay tinalakay sa ibang pagkakataon.

Aliases

Ang isang alias ay isang pangalan at katumbas na hanay ng halaga gamit ang alias (1) builtin command. Sa tuwing may nakagaling na salita ay maaaring mangyari (tingnan sa itaas), at pagkatapos ng pag-check para sa nakareserbang mga salita, sinusuri ng shell ang salita upang makita kung tumutugma ito sa isang alias. Kung gagawin nito, pinapalitan ito sa input stream na may halaga nito. Halimbawa, kung may isang alyas na tinatawag na `` lf '' na may halaga na `` ls -F '' pagkatapos ay ang input:

lf foobar

magiging

ls -F foobar

Ang mga alyas ay nagbibigay ng isang madaling paraan para sa mga walang muwang na gumagamit upang lumikha ng mga shorthand para sa mga command nang hindi na alamin kung paano lumikha ng mga pag-andar na may mga argumento. Maaari rin itong gamitin upang lumikha ng lexically hindi nakakubling code. Ang paggamit na ito ay nasiraan ng loob.

Mga utos

Binibigyang kahulugan ng shell ang mga salitang binabasa nito ayon sa isang wika, ang detalye na kung saan ay nasa labas ng saklaw ng pahinang ito ng tao (sumangguni sa BNF sa dokumento ng POSIX 1003.2). Mahalaga bagaman, ang isang linya ay binabasa at kung ang unang salita ng linya (o pagkatapos ng isang operator ng kontrol) ay hindi isang nakalaang salita, pagkatapos ay kinikilala ng shell ang isang simpleng utos. Kung hindi man, ang isang komplikadong utos o ilang iba pang espesyal na pagtatayo ay maaaring kinikilala.

Simple Commands

Kung ang isang simpleng command ay kinikilala, ang shell ay gumaganap ng mga sumusunod na pagkilos:

  1. Ang mga nangungunang salita ng form na `` name = value '' ay kinuha at itinalaga sa kapaligiran ng simpleng utos. Ang mga operator ng pag-redirect at ang kanilang mga argumento (tulad ng inilarawan sa ibaba) ay tinanggal at na-save para sa pagproseso.
  2. Ang natitirang mga salita ay pinalawak na tulad ng inilarawan sa seksyon na tinatawag na `` Pagpapalawak '' at ang unang natitirang salita ay isinasaalang-alang ang pangalan ng utos at ang utos ay matatagpuan. Ang natitirang mga salita ay itinuturing na mga argumento ng utos. Kung walang nagawang resulta ng command command, ang variable na mga assignment ng `` pangalan = halaga 'na nakilala sa item 1 ay nakakaapekto sa kasalukuyang shell.
  3. Ginagawa ang mga redirect tulad ng inilarawan sa susunod na seksyon.

Redirections

Ang mga redirect ay ginagamit upang baguhin kung saan ang isang utos ay nagbabasa ng input nito o nagpapadala ng output nito. Sa pangkalahatan, buksan, isara, o i-duplicate ang mga redirection ng isang umiiral na sanggunian sa isang file. Ang pangkalahatang format na ginagamit para sa pag-redirect ay:

[n] redir-op file

kung saan ang redir-op ay isa sa mga redirection operator na nabanggit dati. Ang sumusunod ay isang listahan ng mga posibleng redirections. Ang Bq n ay isang opsyonal na numero, tulad ng sa `3 '(hindi` Bq 3' na tumutukoy sa isang file descriptor.

[n]> file

I-redirect ang karaniwang output (o n) upang mag-file.

[n]> file

Parehong, ngunit i-override ang -C opsyon.

[n] >> file

Ilagay ang karaniwang output (o n) upang mag-file.

[n]

I-redirect ang karaniwang input (o n) mula sa file.

[n1] <& n2

Duplicate standard input (o n1) mula sa file descriptor n2.

[n] <& -

Isara ang karaniwang input (o n).

[n1]> & n2

Doblehin ang karaniwang output (o n1) mula sa n2.

[n]> & -

Isara ang karaniwang output (o n).

[n] <> file

Buksan ang file para sa pagbabasa at pagsulat sa karaniwang input (o n).

Ang sumusunod na pag-redirect ay madalas na tinatawag na `` dito-dokumento ''

[n] << delimiter

dito-doc-text ...

delimiter

Ang lahat ng mga teksto sa mga sunud-sunod na linya hanggang sa delimiter ay na-save na malayo at ginawang magagamit sa command sa karaniwang input, o file descriptor n kung ito ay tinukoy. Kung ang delimiter na tinukoy sa paunang linya ay sinipi, pagkatapos ay ang literal na pagtrato sa dito-doc-text, kung hindi man ang teksto ay napapailalim sa pagpapalawak ng parameter, pagpapalit ng utos, at pagpapalawak ng aritmetika (tulad ng inilarawan sa seksyon ng "Mga Pagpapalawak" 'Kung ang operator ay `` << -' 'sa halip ng `` <<' 'pagkatapos ay humahantong ang mga nangungunang mga tab sa dito-doc-text.

Paghahanap at Pagpapatupad

Mayroong tatlong uri ng mga utos: mga function ng shell, builtin command, at mga normal na programa - at ang utos ay hinahanap para sa (ayon sa pangalan) sa utos na iyon. Ang bawat isa ay papatayin sa ibang paraan.

Kapag ang isang function ng shell ay naisakatuparan, ang lahat ng mga positional parameter na shell (maliban sa $ 0, na nananatiling hindi nabago) ay nakatakda sa mga argumento ng function ng shell. Ang mga variable na malinaw na inilagay sa kapaligiran ng command (sa pamamagitan ng paglalagay ng mga takdang-tugma sa mga ito bago ang pangalan ng pag-andar) ay ginagawang lokal sa function at nakatakda sa mga halagang ibinigay. Pagkatapos ay ang command na ibinigay sa kahulugan ng pag-andar ay pinaandar. Ang positional parameter ay naibalik sa kanilang mga orihinal na halaga kapag nakumpleto ang utos. Ang lahat ng ito ay nangyayari sa loob ng kasalukuyang shell.

Ang mga builtin ng shell ay pinaandar sa loob ng shell, nang hindi nagsisilbing isang bagong proseso.

Kung hindi, kung ang command name ay hindi tumutugma sa isang function o builtin, ang utos ay hinahanap bilang isang normal na programa sa filesystem (tulad ng inilarawan sa susunod na seksyon). Kapag ang isang normal na programa ay naisakatuparan, ang shell ay nagpapatakbo ng programa, nagpapasa ng mga argumento at kapaligiran sa programa. Kung ang programa ay hindi isang normal na executable file (ibig sabihin, kung hindi ito magsisimula sa "magic number" na ang representasyon ng ASCII ay "#!", Kaya execve (2) ay magbabalik ng Er ENOEXEC) ang shell ay magpapakahulugan ng programa sa isang kunin. Ang bata shell ay reinitialize mismo sa kasong ito, upang ang epekto ay magiging bilang kung ang isang bagong shell ay na-hihingi upang mahawakan ang ad-hoc shell script, maliban na ang lokasyon ng hashed utos na matatagpuan sa magulang shell ay maaalala ng anak.

Tandaan na ang mga nakaraang bersyon ng dokumentong ito at ang source code mismo ay misleadingly at sporadically sumangguni sa isang shell script na walang magic bilang isang "pamamaraan ng shell".

Paghahanap ng Path

Kapag naghahanap ng isang command, ang unang hitsura ng shell upang makita kung mayroon itong isang function ng shell sa pamamagitan ng pangalan na iyon. Pagkatapos ay tinitingnan nito ang isang builtin command sa pamamagitan ng pangalan na iyon. Kung ang isang builtin command ay hindi natagpuan, isa sa dalawang bagay ang mangyayari:

  1. Ang mga pangalan ng command na naglalaman ng slash ay pinaandar lamang nang hindi gumaganap ng anumang paghahanap.
  2. Hinahanap ng shell ang bawat entry sa PATH bilang para sa command. Ang halaga ng PATH variable ay dapat na isang serye ng mga entry na pinaghiwalay ng mga colon. Ang bawat entry ay binubuo ng isang pangalan ng direktoryo. Ang kasalukuyang direktoryo ay maaaring ipinahiwatig nang implicit sa isang walang laman na pangalan ng direktoryo, o tahasan sa isang solong panahon.

Katayuan ng Exit ng Command

Ang bawat command ay may exit status na maaaring maka-impluwensya sa pag-uugali ng iba pang mga command shell. Ang paradaym ay ang isang command na lumabas na may zero para sa normal o tagumpay, at di-zero para sa kabiguan, error, o maling indikasyon. Ang pahina ng tao para sa bawat utos ay dapat ipahiwatig ang iba't ibang mga exit code at kung ano ang ibig sabihin nito. Bukod pa rito, ang mga builtin command ay bumalik sa mga exit code, tulad ng ginagawa ng function na executed shell.

Complex Commands

Ang mga komplikadong utos ay mga kumbinasyon ng mga simpleng utos na may mga operator ng kontrol o nakareserbang mga salita, na magkakasama ng paglikha ng mas malaking kumplikadong utos. Sa pangkalahatan, ang isang utos ay isa sa mga sumusunod:

  • simpleng utos
  • pipeline
  • listahan o tambalang listahan
  • compound command
  • kahulugan ng pag-andar

Maliban kung ipinahayag, ang exit status ng isang utos ay ang huling simpleng command na isinagawa ng command.

Pipelines

Ang isang pipeline ay isang pagkakasunud-sunod ng isa o higit pang mga utos na pinaghihiwalay ng operator ng kontrol. Ang karaniwang output ng lahat ngunit ang huling command ay konektado sa karaniwang input ng susunod na command. Ang karaniwang output ng huling command ay minana mula sa shell, gaya ng dati.

Ang format para sa pipeline ay:

[!] command1 [| command2 ...]

Ang karaniwang output ng command1 ay konektado sa karaniwang input ng command2. Ang karaniwang input, karaniwang output, o pareho ng isang command ay itinuturing na itinalaga ng pipeline bago ang anumang pag-redirect na tinukoy ng mga redirect operator na bahagi ng command.

Kung ang tubo ay wala sa background (tinalakay sa ibang pagkakataon), hinihintay ng shell ang lahat ng mga utos upang makumpleto.

Kung ang nakalaan na salita! ay hindi nauuna ang pipeline, ang exit status ay ang exit status ng huling command na tinukoy sa pipeline. Kung hindi man, ang exit status ay ang lohikal na HINDI ng exit status ng huling command. Iyon ay, kung ang huling utos ay babalik zero, ang exit status ay 1; kung ang huling utos ay nagbabalik ng higit sa zero, ang exit status ay zero.

Dahil ang pagtatalaga ng tubo ng karaniwang input o karaniwang output o pareho ay nagaganap bago ang pag-redirect, maaari itong baguhin sa pamamagitan ng pag-redirect. Halimbawa:

$ command1 2> & 1 | command2

nagpapadala ng parehong karaniwang output at karaniwang error ng command1 sa karaniwang input ng command2.

A; o ang terminator ay nagiging sanhi ng naunang AND-OR-list (inilarawan sa tabi) na isasagawa nang sunud-sunod; a & nagiging sanhi ng asynchronous pagpapatupad ng naunang AND-OR-list.

Tandaan na hindi katulad ng ilang iba pang mga shell, ang bawat proseso sa pipeline ay isang bata ng invoking shell (maliban kung ito ay isang shell builtin, kung saan ang kaso nito executes sa kasalukuyang shell - ngunit ang anumang epekto nito sa kapaligiran ay wiped).

Mga Utos sa Background -

Kung ang isang utos ay tinapos ng control operator na ampersand (&), ang shell ay nagsasagawa ng command na asynchronously - iyon ay, ang shell ay hindi maghintay para sa command na matapos bago isagawa ang susunod na command.

Ang format para sa pagpapatakbo ng isang command sa background ay:

command1 & [command2 & ...]

Kung ang shell ay hindi interactive, ang karaniwang input ng isang asynchronous command ay naka-set sa / dev / null

Mga Listahan - Karaniwang Pagsasalita

Ang isang listahan ay isang pagkakasunod-sunod ng zero o higit pang mga utos na pinaghihiwalay ng mga bagong linya, semicolons, o ampersands, at opsyonal na tinapos ng isa sa tatlong mga character na ito. Ang mga utos sa isang listahan ay isinasagawa sa pagkakasunud-sunod na nakasulat. Kung ang command ay sinusundan ng isang ampersand, ang shell ay nagsisimula sa command at agad na magpatuloy sa susunod na command; kung hindi, naghihintay para sa utos na wakasan bago magpatuloy sa susunod.

Mga Operator sa Listahan ng Mga Short-Circuit

`` && '' at `` || '' ay mga operator ng listahan ng AT-OR. `` && '' executes ang unang command, at pagkatapos executes ang pangalawang command iff ang exit status ng unang command ay zero. Ang `` || '' ay katulad, ngunit ang pagpapatupad ng pangalawang utos kung ang exit status ng unang utos ay nonzero. `` && '' at `` || '' parehong may parehong priyoridad.

Pag-uugali ng Daloy ng Control - kung, habang, para sa, kaso

Ang syntax ng kung utos ay

kung ang listahan
pagkatapos ay ilista
[listahan ng elif
pagkatapos ay ilista] ...
[ibang listahan]
fi

Ang syntax ng habang utos ay

habang ang listahan
gawin listahan
tapos na

Ang dalawang listahan ay paulit-ulit na papatayin habang ang exit status ng unang listahan ay zero. Ang hanggang sa utos ay katulad, ngunit may salitang hanggang sa kapalit ng panahon, na nagiging sanhi ito upang ulitin hanggang sa exit katayuan ng unang listahan ay zero.

Ang syntax ng para sa utos ay

para sa variable sa salita ...
gawin listahan
tapos na

Ang mga salita ay pinalawak, at pagkatapos ang listahan ay paulit-ulit na ginaganap sa variable na nakatakda sa bawat salita. gawin at tapos na maaaring mapalitan ng `` {'' at ``} ''

Ang syntax ng break at patuloy na utos ay

break [num]
magpatuloy [num]

Ang break ay tinatapos ang num innermost para sa o habang ang mga loop. Patuloy na patuloy sa susunod na pag-ulit ng pinakaloob na loop. Ang mga ito ay ipinatupad bilang builtin commands.

Ang syntax ng case command ay

kasing salita sa
listahan ng pattern) ;;
...
esac

Ang pattern ay maaaring talagang isa o higit pang mga pattern (tingnan ang Mga Pattern ng Shell na inilarawan sa ibang pagkakataon), na pinaghihiwalay ng mga `` '' na mga character.

Magkasama ang Mga Pangkat ng Pag-grupo

Ang mga utos ay maaaring naka-grupo sa pamamagitan ng pagsusulat ng alinman

(listahan)

o

{listahan;

Ang una sa mga ito ay nagpapatupad ng mga utos sa isang subshell. Ang mga builtin command na naka-grupo sa isang (listahan) ay hindi makakaapekto sa kasalukuyang shell. Ang pangalawang anyo ay hindi nagkahulugan ng isa pang shell kaya bahagyang mas mahusay. Ang pagpapangkat ng mga utos na magkakasama sa ganitong paraan ay nagpapahintulot sa iyo na i-redirect ang kanilang output na parang isang programa sila:

{printf hello; printf world \ n ";}> pagbati

Mga Pag-andar

Ang syntax ng kahulugan ng function ay

pangalan () na utos

Ang kahulugan ng isang function ay isang maipapatupad na pahayag; kapag isinagawa ito ay nag-install ng function na pinangalanang pangalan at nagbabalik ng isang exit status ng zero. Ang command ay karaniwang isang listahan na nakapaloob sa pagitan ng `` {'' at ``} ''

Ang mga variable ay maaaring ideklarang lokal sa isang function sa pamamagitan ng paggamit ng lokal na utos. Dapat itong lumitaw bilang unang pahayag ng isang function, at ang syntax ay

lokal [variable] -] ...

Ang lokal ay ipinatupad bilang isang builtin command.

Kapag ang isang variable ay ginawa lokal, ito inherits ang paunang halaga at nai-export at readonly flags mula sa variable na may parehong pangalan sa nakapalibot na saklaw, kung mayroong isa. Kung hindi man, ang variable ay sa simula ay hindi maitakda. Ang shell ay gumagamit ng mga dynamic na scoping, kaya kung gagawin mo ang variable na x lokal na function f, na kung saan pagkatapos ay tawag function g, ang mga sanggunian sa variable x na ginawa sa loob ng g ay tumutukoy sa variable x ipinahayag sa loob ng f, hindi sa global variable na pinangalanan x .

Ang tanging espesyal na parameter kaysa sa maaaring gawin lokal ay `` - '' Paggawa ng `` - '' lokal na anumang mga pagpipilian sa shell na binago sa pamamagitan ng set command sa loob ng function na ibalik sa kanilang orihinal na mga halaga kapag bumalik ang function.

Ang syntax ng return command ay

bumalik [exitstatus

Tinatapos nito ang kasalukuyang pag-eehersisyo. Ang pagbabalik ay ipinatupad bilang isang builtin command.

Mga variable at Mga Parameter

Ang shell ay nagpapanatili ng isang hanay ng mga parameter. Ang isang parameter na tinukoy ng isang pangalan ay tinatawag na variable. Kapag nagsisimula up, ang shell ay lumiliko sa lahat ng mga variable ng kapaligiran sa mga variable ng shell. Maaaring itakda ang mga bagong variable gamit ang form

pangalan = halaga

Ang mga variable na itinakda ng gumagamit ay dapat magkaroon ng isang pangalan na binubuo lamang ng mga alpabeto, mga numerika, at mga underscore - ang una ay hindi dapat maging numeric. Ang isang parameter ay maaari ring italaga sa pamamagitan ng isang numero o isang espesyal na character tulad ng ipinaliwanag sa ibaba.

Posisyonal na Parameter

Ang positional parameter ay isang parameter na tinukoy ng isang numero (n> 0). Itinakda ng shell ang mga ito sa simula sa mga halaga ng mga argumento ng command line na sumusunod sa pangalan ng shell script. Ang set (1) builtin ay maaari ding gamitin upang itakda o i-reset ang mga ito.

Mga Espesyal na Parameter

Ang isang espesyal na parameter ay isang parameter na tinukoy ng isa sa mga sumusunod na mga espesyal na character. Ang halaga ng parameter ay nakalista sa tabi ng karakter nito.

*

Lumalawak sa positional parameter, simula sa isa. Kapag ang pagpapalawak ay nangyayari sa loob ng isang double-quoted na string ito ay lumalawak sa isang solong patlang na may halaga ng bawat parameter na pinaghihiwalay ng unang karakter ng variable na IFS , o ng isang kung ang IFS ay hindi maitakda.

@

Lumalawak sa positional parameter, simula sa isa. Kapag ang pagpapalawak ay nangyayari sa loob ng double-quotes, ang bawat positional parameter ay nagpapalawak bilang isang hiwalay na argumento. Kung walang positional parameter, ang pagpapalawak ng @ ay bumubuo ng mga zero argument, kahit na ang @ ay double-quoted. Halimbawa, kung ano ang ibig sabihin nito, kung ang $ 1 ay `` abc '' at $ 2 ay `` def ghi '' at pagkatapos Qq $ @ ay lumalawak sa dalawang argumento:

abc def ghi

#

Nagpapalawak sa bilang ng positional parameter.

?

Lumalawak sa katayuan ng exit ng pinakabagong pipeline.

- (Hyphen.)

Pinapalawak sa kasalukuyang mga opsyon na flag (ang solong-titik na mga pangalan ng opsyon na isinaling sa isang string) na tinukoy sa invocation, sa pamamagitan ng set na builtin command, o implicitly ng shell.

$

Lumalawak sa proseso ng ID ng tinatawag na shell. Ang isang subshell ay nagpapanatili ng parehong halaga ng $ bilang kanyang magulang.

!

Lumalawak sa ID ng proseso ng pinakahuling background command na isinagawa mula sa kasalukuyang shell. Para sa isang pipeline, ang ID ng proseso ay ang huling utos sa pipeline.

0 (Zero.)

Lumalawak sa pangalan ng shell o shell script.

Pagpapalawak ng Salita

Inilalarawan ng sugnay na ito ang iba't ibang pagpapalawak na isinagawa sa mga salita. Hindi lahat ng expansions ay ginanap sa bawat salita, tulad ng ipinaliwanag mamaya.

Ang mga pagpapalawak ng Tilde, pagpapalawak ng parameter, mga pamalit na utos, pagpapalawak ng aritika, at pag-aalis ng quote na nagaganap sa isang salita ay lumalawak sa iisang larangan. Ito lamang ang paghahati sa patlang o expansion ng pathname na maaaring lumikha ng maraming mga patlang mula sa isang salita. Ang iisang pagbubukod sa panuntunang ito ay ang pagpapalawak ng mga espesyal na parameter @ sa loob ng double-quotes, tulad ng inilarawan sa itaas.

Ang pagkakasunud-sunod ng pagpapalawak ng salita ay:

  1. Pagpapalawak ng Tilde, Pagpapalawak ng Parameter, Pagkakasunud-sunod ng Command, Pagpalawak ng Aritmetika (lahat ng ito ay nangyari nang sabay-sabay).
  2. Isinasagawa ang Field Splitting sa mga patlang na binuo ng hakbang (1) maliban kung ang IFS variable ay null.
  3. Pagpapalawak ng Pathname (maliban kung ang set- f ay may bisa).
  4. Pag-alis ng Quote.

Ang $ character ay ginagamit upang ipakilala ang pagpapalawak ng parameter, command substitution, o arithmetic evaluation.

Pagpapalawak ng Tilde (pagpapalit ng home directory ng user)

Ang isang salita na nagsisimula sa isang hindi nabanggit na character na tilde (~) ay napapailalim sa pagpapalawak ng tilde. Ang lahat ng mga character hanggang sa isang slash (/) o ang dulo ng salita ay itinuturing bilang isang username at pinalitan ng direktoryo ng tahanan ng gumagamit. Kung nawawala ang username (tulad ng sa / / foobar) ang tilde ay pinalitan ng halaga ng variable ng HOME (direktoryo ng tahanan ng kasalukuyang gumagamit).

Pagpapalawak ng Parameter

Ang format para sa pagpapalawak ng parameter ay ang mga sumusunod:

kung saan ang expression ay binubuo ng lahat ng mga character hanggang sa pagtutugma ng ``} '' Anumang ``} '' escaped sa pamamagitan ng isang backslash o sa loob ng isang naka-quote na string, at mga character sa naka-embed na mga palugit na aritmetika, mga pamalit na command, at variable expansions, ay hindi napagmasdan sa pagtukoy tumutugma sa ``} ''

Ang pinakasimpleng anyo para sa pagpapalawak ng parameter ay:

Ang halaga, kung mayroon man, ng parameter ay pinalitan.

Ang parameter ng pangalan o simbolo ay maaaring nakapaloob sa mga tirante, na kung saan ay opsyonal maliban sa positional parameter na may higit sa isang digit o kapag ang parameter ay sinusundan ng isang character na maaaring interpreted bilang bahagi ng pangalan. Kung ang isang parameter expansion ay nangyayari sa loob ng double-quote:

  1. Ang expansion ng pathname ay hindi gumanap sa mga resulta ng pagpapalawak.
  2. Ang paghahati ng patlang ay hindi isinagawa sa mga resulta ng pagpapalawak, maliban sa @.

Bilang karagdagan, ang pagpapalawak ng parameter ay maaaring mabago sa pamamagitan ng paggamit ng isa sa mga sumusunod na format.

Gamitin ang Mga Default na Halaga. Kung ang parameter ay hindi naka-unset o null, ang pagpapalawak ng salita ay pinalitan; kung hindi, ang halaga ng parameter ay pinalitan.

Magtalaga ng Default na Mga Halaga. Kung ang parameter ay hindi naka-unset o null, ang pagpapalawak ng salita ay nakatalaga sa parameter. Sa lahat ng mga kaso, ang huling halaga ng parameter ay pinalitan. Ang mga variable lamang, hindi positional parameter o mga espesyal na parameter, maaaring italaga sa ganitong paraan.

Magpahiwatig ng Error kung Null o Unset. Kung ang parameter ay hindi naka-unset o null, ang pagpapalawak ng salita (o isang mensahe na nagpapahiwatig na ito ay hindi naka-unset kung ang salita ay tinanggal) ay isinulat sa karaniwang error at ang mga shell na lumabas sa isang nonzero exit status. Kung hindi man, ang halaga ng parameter ay pinalitan. Hindi dapat lumabas ang isang interactive na shell.

Gumamit ng Alternatibong Halaga. Kung ang parameter ay hindi naka-unset o null, null ay pinalitan; kung hindi, ang pagpapalawak ng salita ay pinalitan.

Sa pagpapalawak ng parameter na ipinakita dati, ang paggamit ng colon sa mga resulta ng format sa isang pagsubok para sa isang parameter na hindi naka-unset o null; Ang pagkawala ng mga colon ay nagreresulta sa isang pagsubok para sa isang parameter na hindi naka-set.

Haba ng String. Ang haba ng mga character ng halaga ng parameter.

Ang sumusunod na apat na varieties ng pagpapalawak ng parameter ay nagbibigay ng substring processing. Sa bawat kaso, ang pagtutugma ng pagtutugma ng pattern (tingnan ang Pattern ng Shell), sa halip na regular na notasyon ng expression, ay ginagamit upang suriin ang mga pattern. Kung ang parameter ay * o @, ang resulta ng pagpapalawak ay hindi tinukoy. Ang pag-enclose ng full parameter expansion string sa double-quotes ay hindi maging sanhi ng sumusunod na apat na varieties ng mga pattern ng mga character na ma-quote, habang ang pag-quote ng mga character sa loob ng mga tirante ay may epekto na ito.

Alisin ang Pinakamaliit na Pattern ng Suffix. Ang salita ay pinalawak upang makabuo ng isang pattern. Ang parameter na pagpapalawak ay pagkatapos ay nagreresulta sa parameter, na may pinakamaliit na bahagi ng suffix na naitugma sa pattern na natanggal.

Alisin ang Pinakamalaking Pattern ng Suffix. Ang salita ay pinalawak upang makabuo ng isang pattern. Ang parameter na pagpapalawak ay pagkatapos ay nagreresulta sa parameter, na may pinakamalaking bahagi ng suffix na naitugma sa pattern na natanggal.

Alisin ang Pinakamaliit na Pattern ng Prefix. Ang salita ay pinalawak upang makabuo ng isang pattern. Ang parameter na pagpapalawak pagkatapos ay nagreresulta sa parameter, kasama ang pinakamaliit na bahagi ng prefix na naitugma sa pattern na natanggal.

Alisin ang Pinakamalaking Pattern ng Prefix. Ang salita ay pinalawak upang makabuo ng isang pattern. Ang parameter na pagpapalawak pagkatapos ay nagreresulta sa parameter, na may pinakamalaking bahagi ng prefix na naitugma sa pamamagitan ng pattern na tinanggal.

Command Pagpapalit

Pinapahintulutan ng pagpapalit ng utos ang output ng isang command na papalitan sa halip ng pangalan ng command mismo. Ang paghalili ng command ay nangyayari kapag ang command ay nakapaloob sa mga sumusunod:

$ (command)

o Po `` backquoted '' na bersyon Pc:

`command`

Ang shell ay nagpapalawak sa pagpapalit ng command sa pamamagitan ng pagpapatupad ng command sa isang subshell na kapaligiran at pagpapalit ng command na pagpapalit sa standard na output ng command, pag-alis ng mga pagkakasunud-sunod ng isa o higit pang mga s sa dulo ng pagpapalit. (Naka-embed na bago ang dulo ng output ay hindi naalis, gayunpaman, habang nahati ang field, maaaring maisalin ito sa s, depende sa halaga ng IFS at ang pag-quote na ito ay may bisa.)

Pagpapalawak ng Aritmetika

Ang pagpapalawak ng aritmetika ay nagbibigay ng isang mekanismo para sa pagsusuri ng isang pang-aritmetika na expression at pagpapalit ng halaga nito. Ang format para sa pagpapalawak ng aritmetika ay ang mga sumusunod:

$ ((pagpapahayag))

Ang expression ay itinuturing na kung ito ay sa double-quotes, maliban na ang isang double-quote sa loob ng expression ay hindi ginagamot espesyal. Pinapalawak ng shell ang lahat ng mga token sa expression para sa pagpapalawak ng parameter, command substitution, at pag-alis ng quote.

Susunod, tinatrato ito ng shell bilang aritmetika na expression at pinapalitan ang halaga ng pagpapahayag.

White Space Splitting (Field Splitting)

Pagkatapos ng pagpapalawak ng parameter, pagpapalit ng utos, at pagpapalawak ng aritmetiko na sinusuri ng shell ang mga resulta ng mga pagpapalawak at mga pamalit na hindi naganap sa double-quotes para sa field splitting at maraming mga patlang ay maaaring magresulta.

Tinatrato ng shell ang bawat katangian ng IFS bilang isang delimiter at ginagamit ang mga delimiter upang hatiin ang mga resulta ng parameter expansion at command na pagpapalit sa mga patlang.

Pagpapalawak ng Pathname (Pagbuo ng Pangalan ng File)

Maliban kung ang f- flag ay nakatakda, ang henerasyon ng pangalan ng file ay ginaganap matapos makumpleto ang pagkakahati ng salita. Ang bawat salita ay tiningnan bilang isang serye ng mga pattern, pinaghihiwalay ng mga slashes. Ang proseso ng Pagpapalawak ay pumapalit sa salita kasama ang mga pangalan ng lahat ng umiiral na mga file na ang mga pangalan ay maaaring mabuo sa pamamagitan ng pagpapalit ng bawat pattern na may string na tumutugma sa tinukoy na pattern. Mayroong dalawang mga paghihigpit sa mga ito: una, isang pattern ay hindi tumutugma sa isang string na naglalaman ng isang slash, at pangalawa, isang pattern ay hindi maaaring tumugma sa isang string na nagsisimula sa isang panahon maliban kung ang unang character ng pattern ay isang panahon. Inilalarawan ng susunod na seksyon ang mga pattern na ginagamit para sa Pagpapalawak ng Pathname at ang kaso (1) na utos.

Mga Pattern ng Shell

Ang isang pattern ay binubuo ng mga normal na character, na tumutugma sa kanilang mga sarili, at meta-character. Ang mga meta-character ay ``! '' `` * '' ``? '' At `` ['' Ang mga character na nawala ang kanilang mga espesyal na kahulugan kung ito ay naka-quote. Kapag ang command o variable substitution ay ginaganap at ang dollar sign o back quotes ay hindi double quoted, ang halaga ng variable o ang output ng command ay na-scan para sa mga character na ito at sila ay naging mga meta-character.

Ang isang asterisk (`` * '') ay tumutugma sa anumang string ng mga character. Ang isang tandang pananong ay tumutugma sa anumang solong karakter. Ang isang kaliwang bracket (`` ['') ay nagpapakilala ng isang klase ng character. Ang dulo ng klase ng character ay ipinahiwatig ng isang (``] '') kung ang ``] '' ay nawawala pagkatapos ang `` ['' tumutugma sa isang `` ['' sa halip na nagpapakilala sa isang klase ng character. Ang isang klase ng character ay tumutugma sa alinman sa mga character sa pagitan ng square brackets. Ang isang hanay ng mga character ay maaaring tinukoy gamit ang isang minus sign. Ang klase ng character ay maaaring kinumpleto sa pamamagitan ng paggawa ng isang tandang pananaw sa unang karakter ng klase ng character.

Upang isama ang isang `` '' 'sa isang klase ng character, gawin itong ang unang karakter na nakalista (pagkatapos ng ``!' 'Kung mayroon man). Upang isama ang isang minus sign, gawin itong ang una o huling character na nakalista

Builtins

Inililista ng seksyong ito ang mga builtin command na builtin dahil kailangan nila upang magsagawa ng ilang operasyon na hindi maaaring maisagawa sa pamamagitan ng isang hiwalay na proseso. Bilang karagdagan sa mga ito, may ilang iba pang mga utos na maaaring builtin para sa kahusayan (hal. Echo 1).

:

Isang null utos na nagbabalik ng 0 (totoo) exit value.

. file

Ang mga utos sa tinukoy na file ay binabasa at isinagawa ng shell.

alias [ pangalan [ = string ... ]]

Kung tinukoy ang pangalan = string , tinutukoy ng shell ang pangalan ng alias na may halaga na string Kung ang tinukoy na pangalan lamang, ang halaga ng pangalan ng alias ay nakalimbag. Walang mga argumento, ang mga alias builtin ay nagpapalimbag ng mga pangalan at mga halaga ng lahat ng tinukoy na mga alyas (tingnan ang unalias)

bg [ trabaho] ...

Ipagpatuloy ang tinukoy na mga trabaho (o ang kasalukuyang trabaho kung walang trabaho ay ibinibigay) sa background.

command command arg ...

Ipatupad ang tinukoy na command na builtin. (Ito ay kapaki-pakinabang kapag mayroon kang isang shell function na may parehong pangalan bilang isang builtin command.)

cd [ directory ]

Lumipat sa tinukoy na direktoryo (default $ HOME) Kung ang isang entry para sa CDPATH ay lilitaw sa kapaligiran ng cd na utos o ang variable na shell na CDPATH ay nakatakda at ang pangalan ng direktoryo ay hindi nagsisimula sa isang slash, ang mga direktoryo na nakalista sa CDPATH ay hahanapin para sa tinukoy na direktoryo. Ang format ng CDPATH ay katulad ng sa PATH Sa isang interactive na shell, ang cd command ay i-print ang pangalan ng direktoryo na aktwal na inilipat sa kung ito ay naiiba mula sa pangalan na ibinigay ng user. Ang mga ito ay maaaring iba alinman dahil ang mekanismo ng CDPATH ay ginamit o dahil ang isang simbolikong link ay tumawid.

eval string ...

Sagutan ang lahat ng mga argumento sa mga puwang. Pagkatapos ay muling i-parse at isagawa ang command.

exec [ command arg ... ]

Maliban kung ang command ay tinanggal, ang proseso ng shell ay pinalitan ng tinukoy na programa (na dapat ay isang tunay na programa, hindi isang shell builtin o function). Anumang redirections sa command exec ay minarkahan bilang permanente, upang hindi sila mababawi kapag natapos ang command exec .

lumabas [ exitstatus ]

Tapusin ang proseso ng shell. Kung exitstatus ay ibinigay ito ay ginagamit bilang exit status ng shell; kung hindi, ang exit status ng naunang utos ay ginagamit.

pangalan ng pag- export ...

export -p

Ang mga tinukoy na pangalan ay nai-export na upang lumitaw ang mga ito sa kapaligiran ng kasunod na mga utos. Ang tanging paraan upang ma-export ang isang variable ay upang i-unset ito. Binibigyang-daan ng shell ang halaga ng isang variable na maitakda sa parehong oras na ini-export ito sa pamamagitan ng pagsulat

export name = value

Walang mga argumento na inililista ng command export ang mga pangalan ng lahat ng mga nai-export na variable. Sa pamamagitan ng opsyon sa - p na tinukoy na ang output ay naka-format na angkop para sa di-interactive na paggamit.

fc [- editor ] [ una [ huling ]]

fc -l [- nr ] [ una [ huling ]]

fc -s [ old = new ] [ unang ]

Ang mga listahan ng fc builtin, o mga pag-edit at muling pag-execute, mga utos na dati na ipinasok sa isang interactive na shell.

-e editor

Gamitin ang editor na pinangalanang editor upang i-edit ang mga utos. Ang editor string ay isang command name, napapailalim sa paghahanap sa pamamagitan ng PATH variable. Ang halaga sa FCEDIT variable ay ginagamit bilang default kapag - e ay hindi tinukoy. Kung FCEDIT ay null o unset, ang halaga ng EDITOR variable ay ginagamit. Kung EDITOR ay null o unset, ed (1) ay ginagamit bilang editor.

-l (ell)

Ilista ang mga utos sa halip na gamitin ang isang editor sa mga ito. Ang mga command ay nakasulat sa pagkakasunud-sunod na ipinahiwatig ng una at huling mga operasyon, tulad ng apektado ng - r sa bawat utos na sinundan ng command number.

-n

Susurihin ang mga numero ng utos kapag naglilista ng -l.

-r

Baligtarin ang pagkakasunud-sunod ng mga utos na nakalista (may - l o na - edit (na may alinman - l ni - s)

-s

Muling pag-execute ng utos nang walang invoking isang editor.

una

huling

Piliin ang mga utos sa listahan o i-edit. Ang bilang ng mga naunang utos na maaaring ma-access ay natutukoy ng halaga ng variable na HISTSIZE . Ang halaga ng una o huling o pareho ay isa sa mga sumusunod:

[+] numero

Ang isang positibong numero na kumakatawan sa isang numero ng utos; Ang mga numero ng command ay maaaring maipakita gamit ang - l na opsyon.

-number

Ang isang negatibong decimal na numero na kumakatawan sa utos na isinagawa ang bilang ng mga utos na dati. Halimbawa, -1 ay ang kaagad na naunang utos.

string

Isang string na nagpapahiwatig ng pinakahuling ipinasok na command na nagsisimula sa string na iyon. Kung ang lumang = bagong operand ay hindi rin tinukoy sa - ang string form ng unang operand ay hindi maaaring maglaman ng isang naka-embed na pantay na sign.

Ang mga sumusunod na variable ng kapaligiran ay nakakaapekto sa pagpapatupad ng fc:

FCEDIT

Pangalan ng editor na gagamitin.

HISTSIZE

Ang bilang ng mga naunang utos na naa-access.

fg [ trabaho ]

Ilipat ang tinukoy na trabaho o ang kasalukuyang trabaho sa harapan.

getopts optstring var

Ang POSIX getopts command, hindi malito sa Bell Labs -derived getopt (1).

Ang unang argument ay dapat na isang serye ng mga titik, ang bawat isa ay maaaring opsyonal na sinundan ng isang colon upang ipahiwatig na ang opsyon ay nangangailangan ng isang argumento. Ang variable na tinukoy ay nakatakda sa pag-parse na opsyon.

Ang command ng getopts ay nagtatanggal sa mas lumang getopt (1) utility dahil sa paghawak nito ng mga argumento na naglalaman ng whitespace.

Ang getopts builtin ay maaaring gamitin upang makakuha ng mga opsyon at ang kanilang mga argumento mula sa isang listahan ng mga parameter. Kapag naihayag , ang mga getopts ay naglalagay ng halaga ng susunod na opsyon mula sa opsyon na string sa listahan sa variable ng shell na tinukoy ng var at ito ay index sa shell variable OPTIND Kapag ang shell ay tinatawag na, OPTIND ay initialize sa 1. Para sa bawat opsyon na nangangailangan isang argument, ang mga getopts builtin ay ilagay ito sa shell variable OPTARG Kung ang isang opsyon ay hindi pinapayagan para sa optstring , ang OPTARG ay hindi maitatakda .

Ang optstring ay isang string ng mga kinikilalang titik ng pagpipilian. Kung ang isang titik ay sinusundan ng isang colon, ang pagpipilian ay inaasahang magkaroon ng isang argument na maaaring o hindi maaaring ihiwalay mula sa ito sa pamamagitan ng puting espasyo. Kung ang isang pagpipilian ng character ay hindi natagpuan kung saan inaasahan, ang mga getopts ay magtatakda ng variable var sa isang ``? '' Ang getopts ay pagkatapos ay i-unset ang OPTARG at isulat ang output sa karaniwang error. Sa pamamagitan ng pagtukoy ng isang colon bilang unang karakter ng pag- opt ng lahat ng mga error ay hindi papansinin.

Ang isang nonzero value ay ibinalik kapag ang huling pagpipilian ay naabot. Kung walang natitirang mga argumento, ang mga getopts ay magtatakda ng var sa espesyal na opsyon, `` - '' kung hindi, ito ay magtatakda ng var sa ``? ''

Ang sumusunod na fragment ng code ay nagpapakita kung paano maaaring iproseso ng isang tao ang mga argumento para sa isang utos na maaaring tumagal ng mga pagpipilian [a] at [b] at ang opsyon na [c] na nangangailangan ng argumento.

habang ang getopts abc: f
gawin
$ f sa kaso
isang | b) flag = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; exit 1 ;;
esac
tapos na
ilipat ang `expr $ OPTIND - 1`

Tatanggapin ng code na ito ang alinman sa mga sumusunod na katumbas:

cmd -acarg file na file
cmd -a -c arg file file
cmd -carg -a file na file
cmd -a -carg - file na file

hash -rv command ...

Ang shell ay nagpapanatili ng hash table na naaalala sa mga lokasyon ng mga utos. Walang mga argumento kung ano pa man, ang hash command ay nagpapalabas ng mga nilalaman ng table na ito. Ang mga entry na hindi pa nakita dahil ang huling cd command ay minarkahan ng isang asterisk; posibleng hindi wasto ang mga entry na ito.

Sa mga argumento, ang command na hash ay nagtanggal sa tinukoy na mga utos mula sa hash table (maliban kung ang mga ito ay mga pag-andar) at pagkatapos ay matatagpuan ang mga ito. Sa pamamagitan ng - v na opsyon, ang hash ay naglilimbag ng mga lokasyon ng mga utos habang hinahanap nila ito. Ang - r na opsiyon ay nagiging sanhi ng command na hash upang tanggalin ang lahat ng mga entry sa hash table maliban sa mga function.

jobid [ trabaho ]

I-print ang proseso ng id ng mga proseso sa trabaho. Kung ang argumento sa trabaho ay tinanggal, ang kasalukuyang trabaho ay ginagamit.

mga trabaho

Iniuutos ng utos na ito ang lahat ng mga proseso sa background na mga anak ng kasalukuyang proseso ng shell.

pwd

I-print ang kasalukuyang direktoryo. Ang command na builtin ay maaaring naiiba mula sa programa ng parehong pangalan dahil ang builtin command remembers kung ano ang kasalukuyang direktoryo ay sa halip na recomputing ito sa bawat oras. Ginagawa nitong mas mabilis. Gayunpaman, kung ang kasalukuyang direktoryo ay pinalitan, ang builtin na bersyon ng pwd ay patuloy na i-print ang lumang pangalan para sa direktoryo.

basahin ang [- p prompt ] [- r ] variable ...

Ang prompt ay ipi-print kung ang pagpipilian na- p ay tinukoy at ang karaniwang input ay isang terminal. Pagkatapos ay binabasa ang isang linya mula sa karaniwang input. Ang trailing newline ay tinanggal mula sa linya at ang linya ay nahati tulad ng inilarawan sa seksyon sa salita na nahati sa itaas, at ang mga piraso ay nakatalaga sa mga variable sa pagkakasunud-sunod. Dapat na tinukoy ang hindi bababa sa isang variable. Kung mayroong higit pang mga piraso kaysa sa mga variable, ang natitirang mga piraso (kasama ang mga character sa IFS na pinaghiwalay sa kanila) ay nakatalaga sa huling variable. Kung mayroong higit pang mga variable kaysa sa mga piraso, ang natitirang mga variable ay itatalaga ang null string. Ang readin na builtin ay magpapahiwatig ng tagumpay maliban kung ang EOF ay nakatagpo sa input, kung saan ang pagkabigo ay ibinalik.

Bilang default, maliban kung tinukoy ang opsyon na - r , ang backslash na `` \ '' ay nagsisilbing isang character na makatakas, na nagiging sanhi ng literal na pagtrato ng sumusunod na character. Kung ang isang backslash ay sinusundan ng isang newline, ang backslash at ang newline ay tatanggalin.

readonly name ...

readonly -p

Ang tinukoy na mga pangalan ay minarkahan bilang nabasa lamang, nang sa gayon ay hindi sila maaaring mabago o mag-set sa dakong huli. Binibigyang-daan ng shell ang halaga ng isang variable na maitakda sa parehong oras na ito ay minarkahan na basahin lamang sa pamamagitan ng pagsulat

readonly name = value

Walang mga argumento na binabanggit ng readonly na utos ang mga pangalan ng lahat ng nabasa lamang na mga variable. Sa pamamagitan ng opsyon sa - p na tinukoy na ang output ay naka-format na angkop para sa di-interactive na paggamit.

itakda ang [{- options | + mga opsyon | - arg ... ]

Ang hanay ng utos ay gumaganap ng tatlong magkakaibang function.

Walang mga argumento, inililista nito ang mga halaga ng lahat ng mga variable ng shell.

Kung ang mga pagpipilian ay ibinigay, nagtatakda ito ng tinukoy na mga flags ng opsyon, o nililimas ito tulad ng inilarawan sa seksyon na tinatawag na Sx Argument List Processing.

Ang pangatlong paggamit ng set command ay upang itakda ang mga halaga ng positional parameter ng shell sa tinukoy na arg. Upang baguhin ang positional parameter nang hindi binabago ang anumang mga pagpipilian, gamitin ang `` - '' bilang unang argument na itatakda. Kung walang mga args ang naroroon, itatakda ng hanay na command ang lahat ng mga positional parameter (katumbas sa pag-e-execute ng `` shift $ #. ''

variable na halaga

Nagtatalaga ng halaga sa variable. (Sa pangkalahatan mas mahusay na isulat ang variable = halaga sa halip na gamitin ang setvar setvar ay nilayon na gagamitin sa mga function na nagtatalaga ng mga halaga sa mga variable na ang mga pangalan ay ipinasa bilang mga parameter.)

shift [ n ]

Palitan ang positional parameter ng n beses. Ang isang shift ay nagtatakda ng halaga ng $ 1 sa halagang $ 2 ang halaga ng $ 2 sa halagang $ 3 at iba pa, na nagpapababa ng halaga ng $ # ng isa. Kung n ay mas malaki kaysa sa bilang ng positional parameter, ang shift ay mag-isyu ng isang error na mensahe, at lumabas sa return status 2.

beses

I-print ang naipon na oras ng gumagamit at system para sa shell at para sa mga proseso na tumakbo mula sa shell. Ang katayuan ng pagbabalik ay 0.

bitag ang pagkilos ng signal ...

Pakawalan ang shell upang mai-parse at mag-execute ng pagkilos kapag natanggap ang alinman sa tinukoy na mga signal. Ang mga signal ay tinukoy sa pamamagitan ng numero ng signal. Kung ang signal ay 0 ang aksyon ay papatayin kapag lumabas ang shell. ang aksyon ay maaaring null o `` - '' ang dating nagiging sanhi ng tinukoy na signal na hindi papansinin at ang huli ay nagiging sanhi ng default na aksyon na dadalhin. Kapag tinatanggal ng shell ang isang subshell , nire-reset ito na nakulong (ngunit hindi binabalewala) ang mga signal sa default na pagkilos. Ang utos ng bitag ay walang epekto sa mga signal na hindi pinansin sa pagpasok sa shell.

type [ name ... ]

I-translate ang bawat pangalan bilang isang command at i-print ang resolution ng paghahanap ng command. Ang posibleng resolusyon ay: shell keyword, alias, shell builtin , command, sinusubaybayan na alias at hindi nakita. Para sa mga alias ang pagpapalawak ng alias ay nakalimbag; para sa mga command at sinusubaybayan ang mga alias ang kumpletong pathname ng command ay naka-print.

ulimit [- H -S ] [- a -tfdscmlpn [ value ]]

Magtanong tungkol sa o itakda ang matigas o malambot na mga limitasyon sa mga proseso o magtakda ng mga bagong limitasyon. Ang pagpili sa pagitan ng mahigpit na limitasyon (na hindi pinapayagan ang anumang proseso na lumabag, at kung saan hindi maaaring itataas sa sandaling ito ay nabawasan) at malambot na limitasyon (na nagiging sanhi ng mga proseso upang maging signaled ngunit hindi kinakailangang pumatay, at kung saan maaaring itataas) ay ginawa gamit ang ang mga flag na ito:

-H

itakda o magtanong tungkol sa mga mahigpit na limitasyon

-S

itakda o magtanong tungkol sa mga soft limit. Kung alinman - H at - S ay tinukoy, ang soft limit ay ipinapakita o ang parehong mga limitasyon ay nakatakda. Kung parehong tinukoy, ang huling panalo.

Ang limitasyon na itatanong o itatakda, pagkatapos, ay pinili sa pamamagitan ng pagtukoy sa alinman sa mga flag na ito:

-a

ipakita ang lahat ng kasalukuyang mga limitasyon

-t

ipakita o itakda ang limitasyon sa oras ng CPU (sa mga segundo)

-f

ipakita o i-set ang limitasyon sa pinakamalaking file na maaaring malikha (sa 512-byte na mga bloke)

-d

ipakita o itakda ang limitasyon sa sukat ng segment ng data ng isang proseso (sa kilobytes)

-s

ipakita o i-set ang limitasyon sa laki ng stack ng isang proseso (sa kilobytes)

-c

ipakita o itakda ang limitasyon sa pinakamalaking laki ng dump ng core na maaaring magawa (sa mga bloke ng 512-byte)

-m

ipakita o itakda ang limitasyon sa kabuuang pisikal na memory na maaaring magamit sa pamamagitan ng isang proseso (sa kilobytes)

-l

ipakita o itakda ang limitasyon sa kung magkano ang memorya ng isang proseso ay maaaring i-lock sa mlock (2) (sa kilobytes )

-p

ipakita o itakda ang limitasyon sa bilang ng mga proseso na maaaring magamit ng user sa isang pagkakataon

-n

ipakita o i-set ang limitasyon sa mga file na bilang isang proseso ay maaaring magkaroon ng bukas nang sabay-sabay

Kung wala sa mga ito ang tinukoy, ito ay ang limitasyon sa laki ng file na ipinapakita o itatakda. Kung ang halaga ay tinukoy, ang limitasyon ay nakatakda sa numerong iyon; kung hindi, ang kasalukuyang limitasyon ay ipinapakita.

Ang mga limitasyon ng isang arbitrary na proseso ay maaaring ipakita o itakda gamit ang sysctl (8) utility.

umask [ mask ]

Itakda ang halaga ng umask (tingnan ang umask (2)) sa tinukoy na halaga ng octal. Kung ang argumento ay tinanggal, ang halaga ng umask ay nakalimbag.

unalias [- a ] [ pangalan ]

Kung tinukoy ang pangalan , tinatanggal ng shell ang alias na iyon. Kung - isang tinukoy, ang lahat ng mga alyas ay aalisin.

i-unset ang pangalan ...

Ang mga tinukoy na variable at pag-andar ay hindi naka-unset at hindi na-export. Kung ang isang ibinigay na pangalan ay tumutugma sa parehong isang variable at isang function, pareho ang variable at ang function ay hindi maitakda.

maghintay [ trabaho ]

Maghintay para sa tinukoy na trabaho upang makumpleto at ibalik ang katayuan ng exit ng huling proseso sa trabaho. Kung ang argumento ay tinanggal, maghintay para sa lahat ng mga trabaho upang makumpleto at bumalik ang isang exit status ng zero.

Pag-edit ng Linya ng Command

Kapag ang sh ay ginagamit nang interactively mula sa isang terminal, ang kasalukuyang command at ang kasaysayan ng command (tingnan ang fc sa Sx Builtins) ay mae-edit gamit ang pag-edit ng command line na vi-mode. Ang mode na ito ay gumagamit ng mga utos, na inilarawan sa ibaba, katulad ng isang subset ng mga inilarawan sa pahina ng vi tao. Ang command na `set '-o vi ay nagbibigay-daan sa pag-edit ng vi-mode at ilagay sh sa vi insert mode. Sa pamamagitan ng vi-mode na pinagana, sh ay maaaring ilipat sa pagitan ng insert mode at command mode. Ang editor ay hindi inilarawan sa buong dito, ngunit sa isang mas huling dokumento. Ito ay katulad ng vi: pag-type Aq ESC ay ihagis ka sa utos VI utos mode. Ang pagpindot sa Aq return habang nasa command mode ay ipapasa ang linya sa shell.

Mahalaga: Gamitin ang command ng tao ( % man ) upang makita kung paano ginagamit ang isang utos sa iyong partikular na computer.