[Seminar - Unix Shell, keskkondade] [Douglas Kline - Harvard University] [See on CS50. - CS50.TV] Tänane teema on Unix shell. Ma olen Douglas Kline, ekspert, või vähemalt mõistlikult pädev kasutaja, kest. Kest on liides kasutaja arvuti operatsioonisüsteem. Nimi on eksitav, sest erinevalt looma koorega mis on raske ja kaitsev, arvuti kest võimaldab suhtlemist. Nii poorne membraan oleks ilmselt parem metafoor. Originaal kest Unix on Bourne shell. Bourne on kirjutatud B-O-U-R-N-E. Bourne oli üks originaal autorid Unix, ja nii kest on tema nime. Nimi, mis kesta käsk on vaid lihtsalt sh. See on käsk, mida on võimalik täita. Kest algab login. Kui te logite sisse arvutisse, shell lihtsalt käivitub teie jaoks, ja see, mida teeb sinu käske. Ta võib alustada muul ajal ka. Kui sa avab akna ei ole märgitud teisiti, siis hakkab kest teile. Nii see on, et sa ei saa minna akna ja hakka käsud ja nii edasi on, kuigi sa ei saa sisse logida, et aken. Lisaks sellele, kui te serveriga, siis ta hakkab kest kaugarvuti. Ja see on võimalik käivitada käske ilma interaktiivne kest. See võib tähendada teie praegune töö, ja see võib tähendada ka kaugjuhtimiseks. Sa võiksid saata käsk teise arvutisse, mis sisaldab alustamisega kest seal. Tegelikult peab see sisaldama alustamisega kest on isegi kui see ei ole oma lõplikku eesmärki. Kui midagi hakkab niimoodi, et see ei pea tingimata algama uus kest. Kui sa avab uue akna, on võimalik öelda seda, et tuua toimetaja või mingi muu käsk. Sellisel juhul toimetaja algab nullist. Kui redaktor lõpeb, akna lõpeb. See on natuke ebatavaline, kuid seda võib teha. Neil juhtudel ei ole see kest. Nii et see ei pruugi nii olla, et akna või mõne sellise taotluse avab kest. Shell korrastab käske. Parsimine tähendab kindlaks erinevate elementide ja liigitades need. Jooksul käsk täielik string, et kirjutad, seal on 1 või enam ühekordset käske täita. Muud elemendid võivad olla argumente. Seal võib olla ka erimärke, mis mõjutavad nii et ühe käsu. Nad võivad saata väljund mujal kui ekraanil Kui käsk mis tavaliselt saadab selle ekraani. Seda saab suunata sisend, seda võib teha muid asju ka. On mitmeid muid sümboleid, sümbolite, ja nii edasi. Parsimine hõlmab avastamise ja tõlgendades neid asju. Nüüd, kui ei ole rohkem küsimusi, mis on üsna tõenäoline, kuna ei ole enam inimesi, me jätkame oma järgmisel leheküljel siin. Ma ütlesin, et Bourne shell on esimene kest. Seal on teised. Üks on C-shell. Käsk csh. Nimi C-shell on lihtsalt sõnamäng. See kest kehtestati Berkeley Unix 1970ndate keskel. Berkeley Unix oli seemnevedeliku sündmuse arengut Unix. See oli suur revolutsioon ja sisaldas sissejuhatuses seda kest. Põhjuseks sõnamäng, C-shell, on see, et C-shell on mõned omadused, see, mis meenutavad C keeles mis Bourne shell ei ole - või see ei olnud sel ajal. Seal on ka TC-kest. See on superset C-shell. See on lisavõimalusi, millest paljud on kasulikud interaktiivne kasutamine näiteks meenutades käskude ajalugu mehhanismi mis ma kirjeldada mõnevõrra hiljem - lihtsal viisil, modelleeritud pärast toimetaja. Samuti on köited, mis võimaldab teil siduda lühikese võti stringi enam käsk. Me ei kavatse sattumist et täna. On mõned omadused, mis on kasulik programmeerimine. Kuid C-pesa ei ole sageli kasutatakse koorega programmeerimine. Shell programmid, kui sa veel ei tea, On programme, mis koosneb shell omadused. Sa võiksid minna need, nagu programmid. Sa kirjutad hunnik käske arvesse fail ja käivita fail. Sul ei ole vaja kompileerida. See on tõlgendav keeles. Väljend C-shell on nüüd üheselt mõistetav, kuna see võib viidata üksnes algse C-shell, csh, või kõikide C-kestad, sealhulgas Tcsh. See on veidi ebamäärane. Hiljem kest on Korn shell, KSH, nime programmeerija, Korn. See kest üritanud lisada 1 koorega eelised C-shell interaktiivseks kasutamiseks ja Bourne shell programmeerimine. See on kasutatud interaktiivset shelli mõned inimesed - vähemus. Hiljem aga oli teise sissejuhatuse Bash koorega Bash jälle sõnamäng, Bourne-uuesti laduma. See pikendamine Bourne shell. Korn shell on ka. Mõlemad on. See on sama eesmärgid Korn shell ühendamise C-Shelli ja Bourne shell on eelised 1 kest. Paljud täiustusi Korn shell sisalduvad ka Bash. Bash on aga rohkem ja seetõttu on eelistatav. Bourne-uuesti laduma ja Korn shell kutsutakse Bourne tüüpi kestad sest need sisaldavad Bourne shell omaduste, mis ei sobi mõnes mõttes koos C-kestad. On ka teisi kestad peale nende, mõned on mõeldud piiratud kasutamise, võibolla piiratud mõned käsud, võibolla spetsialiseeritud otstarbeks, mitte tihti. Ok. Järgmine punkt siin. Bash kest on muutunud seostatud mitmesuguste Linux. Ma ei ole kindel, kas see on tõsi iga vormi. Seal on palju vorme olemas ja ma ei ole kasutanud neid kõiki, aga need, mis olen kasutanud on saanud sellega seotud. Nii palju kui mina tean, on midagi Bash mis muudab enam ühildub Linux kui muu kombinatsioon kest ja operatsioonisüsteemi. Ma arvan, et see ilmselt lihtsalt peegeldab kalduvustele programmeerijad. Et see on muutunud seostatud Linux on üks põhjus, et eelistate Bash et ksh sest asjad on tõenäoliselt kirjutatud ja see on tõenäoliselt levida. Ma annan sulle muud põhjused, mis hiljem. Bourne shell skriptid peaks kestma alla Korn shell või Bash. Kui kirjutad midagi Bourne shell, saab ilmselt käivitada all KSH või bash. Korn shell skriptid tõenäoliselt liikuda Bash, kuid ma ei saa garanteerida, et. Hiljem siia, C-shell skriptid peaks kestma alla TC-kest. C-shell tegelikult kunagi laialdaselt kasutatud skript alates Bourne shell ja hiljem Bourne tüüpi kestad olid parem selleks. Nii et tegelikult ei ole nii oluline. On üsna palju Bourne shell skriptid, mis on kirjutatud kaua aega tagasi, enne Korn shell või Bourne-jälle kest toodi. Need on ikka veel kasutusel, osa operatsioonisüsteemide ja et sa ei leia neid, kui te vaatate operatsioonisüsteemi või mõne vana programmeerimine pakette. Bash on mingil määral muutub omamoodi lingua franca operatsioonisüsteemide. See on juba laiendatud Windows ja VMS. VMS, juhul kui te ei tea, on varaline operatsioonisüsteemi Digital Equipment Corporation, mis on ikka veel kasutusel, peamiselt kulisside taga. Ja kui see läheb töötab mitmete erinevate operatsioonisüsteemide tõenäoliselt inimesed kipuvad minema seda. Kuid see areng on suhteliselt uus. See on alles algus, nii et ma ei saa ennustada, kui see osutub tõesti selline lingua franca. Samuti, kuna fail teenimesid ja raamatukogud erinevad nende erinevate operatsioonisüsteemide sa ei pruugi olla võimalik kirjutada Bash skripti ühe operatsioonisüsteemi ja seejärel käivitage see teine. Sa peaksid olema võimeline liigutada erinevate Unix, Linux Mac OS operatsioonisüsteemidega kuid mitte tingimata Windows või VMS. Te võib-olla muuta faili failinimega kirjelduse, ja mõned raamatukogud võivad olla erinevad, mis võivad mõjutada seda, kuidas mõned käsud töötavad või kuidas nad töötlevad argumendid jms. Lisaks sellele veel ettevaatlik siin see, et puudub garantii et kõik erinevad kestad Olen mainitud - Bourne shell, C-shell, TC-kest, Korn shell, Bourne-jälle laduma - valmib mingil Unix või Linux või Mac OS arvutis. Nad lihtsalt ei pruugi olla seal. See on üks hoiatusi siin. See on kahetsusväärne piirang siin, sest sa tahaks asju teha igal pool, kuid kahjuks te ei saa tugineda sellele. Ok. Next siin. Oletame, et sa tahad kirjutada skripti, Programm koosneb käske. Sa kirjutad oma käske, pange need fail ja käivita fail. Mis siis, kui soovite lisada argumendid? Juhul kest operatsioonide argumente nimetatakse parameetrid või asendi parameetrid ja nad kutsutakse kokku dollari märk ja number, $ 1, $ 2. Nii et kui script on see nimi, minu esimene argument olla argument 1 ja minu teine ​​võib olla argument 2 ja sees minu script, kui ma tahan viidata need asjad - olgem kustutan selle, sest ma tõesti ei kavatse kasutada seda - sees minu script ma saaksin $ 1 viidata arg1, $ 2, mis tulevad välja nii, arg2. Nii et need sümbolid on võimalik esitada argumente, ning need kehtivad kõigi kohta kestad. Lisaks on ka muid sümboleid. $ * Viitab kogu argument loendis neid kõiki. $ # Viitab mitmeid argumente. Jällegi, see kehtib kõigi kestad. Need sümbolid, * ja #, võib kasutada nende tähendused teistes kohtades ka. Me ei hakka seda. Shell specifier line. Milleks see? Oletame, et olete kirjutanud stsenaariumi ja see on eriti koore ja soovite käivitada. Kuidas sa tead, mida laduma oma operatsioonisüsteemi kasutada käivitada oma script? Ühel hetkel võid arvata, et see läheks see Bourne shell kui sa ei ole just teisiti, kuid inimesed ei kirjuta skriptid Bourne shell, et palju enam ja sa ei saa isegi toetuda sellele enam. Nii et siin on meil kesta specifier line siin. See määratleb Bash. Pange tähele, et see täpsustab seda ja failinimega, / bin / bash. Kui arvuti on Bash kesta kuid mitte bin kataloogi / bin, see ei toimi. See on teine ​​täpsustava veel ettevaatlik siin. Nael märk kommentaar line iseloomu. See kehtib kõigi kestad. Eriti juhul, #! alguses script, on erijuhtum. See määratleb kest, mille skripti käivitama. Nagu ma ütlesin, see ei pruugi olla samas kohas / bin. Lisaks on veel üks asi siin. Kui kasutate ainult nael märk ilma hüüumärk ja failinimega, mis peaks näitama, C-shell. Kuid ma ei soovita seda tehes, sest ma ei ole võimeline tagama et see on alati töö. Kui soovite C-shell, oleks parem öelda. Siis on midagi üsna segane siin. Kui kasutate kest specifier line, näiteks / bin / bash ja et koor ei ole kättesaadav seal, seal ei ole sellist asja nagu / bin / bash, et erilist arvuti, kas seetõttu, et ei ole Bash või kuna see on teises kohas, saad viga ütlen teile, et script sa jooksid ei eksisteeri. Ja muidugi oma script olemas, nii et veateade on segadusttekitav. Põhjusel, et operatsioonisüsteem annab teile, et viga või täpsemalt, et teie interaktiivse shelli, kus teil on seda teinud, et viga, et aruanded käsk, mida kasutatakse, mis on nimi script. See käsk tõhusalt nn shell nimega skripti. See, kui sa selle segase veateate. Teine võimalus helistada shell script on täpsustades kest käsureal, kui siin. See on käsk. See ütleb joosta Bash ja siis saan oma skripti Bash. See on ülimuslikud specifier line, ja see on funktsioon, mis võimaldab teil anda lühemaks teenimesid. Kui annad käsu operatsioonisüsteem otsima, et käsk erinevates kohtades. Kui see on olemas, siis tuleb leida. Arvuti leiad Bash kus see asub ja kasutada seda, nii et sa ei pea siis olema mures, kui ta leiab, et on. Seal on potentsiaalselt muid probleeme siin nagu kui seal on rohkem kui 1 versioon Bash, mis on võimalik, kuigi ebatõenäoline. Nii et on veel üks võimalus tegeleda nende asjadega. Täpsustav read võib helistada mistahes kest. Nad võivad helistada ka asjad peale kestad. Näited on mul siin on sed, mis on oja toimetaja; AWK, mis on muster töötlemise keeles; ja Perl, väga kõrgelt arenenud skriptikeelt. Kui paned specifier joon tähistab üks neist saate alguses, see läheb otse, et programmis, aga mitte kest. Need programmid on piirid oma võimetele. Perl on väga võimekas. Sed on toimetaja. Seda saab teha asju üle lihtsalt toimetamine. Kuid see võib olla raske programmeerida, et. Lisaks läbivad argumendid ja kraami script on kas võimatu või segadust. Seega nendel juhtudel, kus AWK või sed, see on, vähemalt minu kogemuse parem kirjutada skripti ja kõne AWK või sed shell script mitte helistades AWK või sed nagu script specifier line. Perl on väga mitmekülgne keelt, nagu ma ütlesin. Te ei saa käivitada interaktiivne käske Perl, mis tähendab, et sa ei saa testida osad skriptid, et sa arendamine käivitades neid interaktiivselt. Kuid see on väga võimalik keel ja on kujunenud väga laialt levinud vahend. See on lihtsalt natuke Sulgudes märkus specifier read. Peaaegu kõigi vormide Linux - jälle, ma ei saa olla kindel, et see kõik - ja Mac OS, kui sa kirjutad csh saad tcsh ja kui kirjutad SH saad bash. Nad püüdsid seal teile rohkem arenenud versioonid nendest kestad, kuid see võib olla segadusttekitav. Kui kirjutad skripti kasutades Tcsh või Bash pakub samas tehti csh või SH ja siis proovige käivitada arvuti, mis ei ole Tcsh või Bash, võite saada mõned vead, kui on käske olemas mis need kestad ei tunne. Lisaks olete kutsutud oma shell sinu arvutis kutsudes seda SH või csh ja siis saan rohkem arenenud kestad. Te ei tohi isegi mõelda sellele, et te kasutate rohkem arenenud kest. Nii et see on potentsiaalne lõksu. Kuidas kindlaks teha, et kui sa kirjutad SH saad Bash, kui kirjutad csh saad tsch? On asju, mida nendes arvutites kutsuti lingid mis saab ühendada failinimed viidata sama asi. See võib olla kas 2 nimed sama või faili, mille eesmärk on suunata teise faili. Neid nimetatakse raske ja viitu. Me ei lähe sinna enam täna. Samuti võib eraldi failidena - 1 fail sh 1 faili Bash - kuid nad mõlemad kulgema Bash. Siis on veel täpsustava siin. Kui te helistate üks neist kestad ühe nime, siis võiks arvata, et sa saad samu funktsioone nagu helistaja see teine ​​nimi. Noh, et tegelikult ei pruugi olla tõsi. Neid käske saab tutvuda nimi, mille nad olid kutsutud ja nad saavad, alusel, et nimi, käituvad erinevalt. Esineda võib probleeme püüab vasta standardile. Mõned teist võivad olla kuulnud POSIX standard või mõni muu, võibolla muid funktsioone. Seda saab muuta mõnikord käsureaargumentidena või seades kest muutujaid. Üleskutse seda SH või bash võib tegelikult viia teistsuguse täitmine isegi kui see on sama fail, mis sa täitev. Teine asi, mida kaaluda, on see, et isegi kui teine ​​arvuti on Tcsh või Bash, kui need ei ole seotud, kuna need on sinu arvutis kui sul on Linux või Mac OS arvutis, siis jälle saad shell et helistate sh või csh, mitte üks, et võiksite. Praegune Bourne-kesta lisaseadmed vähem kui need, Bash kuid varem need originaalpakendis Bourne shell. Nagu tuleneb, et isegi praeguse Bourne shell, SH, isegi kui see ei ole Bash, sarnaneb C keeles rohkem kui C-shell teeb. See ei olnud õige, kui C-shell esmakordselt loodud, kuid see on kujunenud nii. Te võite märgata siin, et kõik need kesta nimed, välja arvatud Bourne shell on midagi, mis näitab, mis kest nad on - csh, bash - kuid Bourne shell on vaid sh. Miks? See oli esialgne kest. See oli kest siis ei kesta, ja kuna see oli kest, ei olnud mingit põhjust eristada seda veel kesta. Nii et miks see on, et nimi ja ikka teeb. See top on siin joont salasõna andmebaasi konto on mul olemas teises arvutis. Ma lähen, et proovida saada, et nimi, nii et saate näha, et osa lõpus, kest. UUS andmebaas omab login parameetrid kõikidele kasutajatele. Alguses on kasutajanimi, mida näed viimase 2 tähte minu. Valdkondades siin on eraldatud kooloniga. Viimane valdkond, nagu näete, on bin / tcsh kest. See on kest spetsifikatsiooni. Seal on midagi huvitavat siin. Kui Unix esmakordselt välja, seal oli ainult 1 koorega nii ei olnud valikut seal. Nii et miks nad võimaldavad valdkonnas salasõna andmebaas täpsustada kesta? Ma ei tea, aga see on hea, et nad tegid. See on üsna raske teha muudatusi salasõna andmebaasi formaat sest paljud programmid viitavad selle formaat ja tuleks ümber kirjutada. See on õnnestunud või juhuslik arendamine, et need sisalduvad selles valdkonnas. Selline salasõna faili liini kasutatakse kõigil Unix ja Linux arvutid nii palju kui mina tean. Mac on oma süsteem. See on tegelikult salasõna faili read, mis formaadis, kuid see ei ole, kus kasutaja omadused on määratletud. Teine Sulgudes märkus seal. Kui olete helistaja koorega, võite helistada see sub-kest oma olemasolevaid kestad. Nii et kui ma lähen siit, lähme vabaneda need asjad. Siin ma olen C-shell. See muutuja, mis täpselt määratleb mu kest, tegelikult ei ole alati usaldusväärne tee kindlaks, mida laduma näed, kuid sel juhul on. Mis siis, kui ma lihtsalt kirjutada - Nüüd ma olen Bash. Mõned asjad hakkavad olema sama. Kas ütleb mulle minu käske. Kui ma seda peatada tagasi oma C-shell, ls, sama. Eks ole? fg, teadmisi, tagasi minu Bash kesta. pwd, praeguse kataloogi tagasi C-shell. pwd erinevad kataloog - tegelikult mitte erinevate kataloog käesolevas asjas. See on samas kataloogis. Oletame, et ma tahan helistada käsk siin: kus ls. Mida see teeb? Ta ütleb mulle, kus ls käsk, üks, mis annab mulle kataloogis, asub ls. Lähme tagasi Bash kesta. Proovime sama asi. Hmm, huvitav seal, kus: command not found. Miks see nii on? Kui käsk on ehitatud C-shell. See ei ole käsk, mida tuleb lugeda mällu kusagilt mujalt ja hukati. C-shell jookseb ta kandes täitmise et osa oma kood ja see ei ole Bash kesta. Nii Bash, millel ei ole sellist sisseehitatud käsk, loodab ta, ei leia seda, ja me saame viga. Nii et meil on Bash kesta sõitmisega C-shell, ja me nimetame seda sub-kest. Ja igaks juhuks sa oled uudishimulik, Bash kest on oma viis asukoha käske. räsitud viitab asjaolule, et see on võimalik teostada kiiremini leitakse kiiremini. See on üks lisaseadmed ehitatud mõned neist kestad. Bourne tüüpi kestad eelistatakse programmeerimine. Nad on kontrolli struktuuride nagu silmad, tingimisi avaldused, omamoodi käske, et sa võiksid kasutada programmeerimiskeeli nagu C või mis iganes keelt. Võib-olla te Programmeerimine Java või mis iganes. Koored on need liiga. Bourne tüüpi kestad, eriti Bash, on rohkem ning need on ette nähtud suurem paindlikkus. Bash kest on massiivid. Originaal Bourne shell ei ole. Nii et võib olla tunduvalt soodsam programmeerimine. C-shell on tegelik massiive, kuid ei ole palju neid muid funktsioone. Bourne tüüpi kestad täidab kiiremini kui nad ei ole mõeldud funktsioonidega interaktiivne kasutamine. Sa valid asjad maha üks eesmärk, see laadib need alla muuks otstarbeks. Seal on see kompromiss on. Need omadused, mis on mõeldud interaktiivne kasutamine tegelikult on vähe või üldse mitte kasutada skriptid. On võimalik kasutada interaktiivsete sub-kest nagu üks hakkasin seal katsetada käske, mida te kavatsete kasutada skripti. See, mida sa ei saa teha Perl. Sa suudad seda teha koos kestad. Isegi struktuurid jms silmad ja nii edasi saab käivitada interaktiivselt. Nad on mõnikord kasulik käivitada interaktiivselt, kuid tõenäoliselt te kasutate neid arendada script. Varjunimed. See saab olema umbes C-shell. Ajalugu mehhanism, kus sa saad tagasi varem käsud või nende osad, et olete juba jooksma. Jällegi umbes C-shell, Bourne shell ja Korn shell on need asjad, aga ma ei hakka neid. Nii et siin on mõned kasulikud varjunimed, mis mul on. Kirjutamise asemel ls - see on ühine käsk - kirjuta l ja säästa ennast 1 märk. Kas erinevaid võimalusi, kõik need tööd. Pange tähele, et need mõisted on jutumärkides ümber. Sellistel juhtudel hinnapakkumisi ei ole vajalik. Kui saate määratleda need varjunimed ilma jutumärkideta ikkagi tööle. Nad on soovitatav. On olukordi, kus ei saa kasutada quote sest sa tahad, et midagi juhtuks, mis quote takistaks. Mõnikord võib tsiteerida osa määratlusele, kuid mitte kõik. Samuti on üldiselt soovitatav kasutada ülakoma asemel jutumärgid. Jutumärgid on mõju muutuja mõisted, Eriti põhjustab neid hinnati mitte peatada. Miks me tahame peatada hindamine? Ja kuidas hinnapakkumisi teha meie jaoks? Siin on käsk, mis võivad teile huvi pakkuda. "Kas g *" g *, nagu te ilmselt teate, on märk väljendus kõik failinimed algavad g. Kui ma lihtsalt kirjutada käsk ls g *, ma toon nimekirja kõik need nimed on minu praegune kataloog. Kui ma defineerin mis alias, sest see on siin hinnapakkumisi, see töötab, et käsk on oma praeguse kataloogi, kus näed seda. Aga kui sa jooksed alias definitsioon ilma jutumärkideta, ta hindab wildcard g * kui ta jookseb selle määratlemisel käsk. Nii mõiste alias on ls järgneb failide nimekiri kataloog kus alias käsk on täidetud, olenemata sellest, kus sa tegelikult kavatsevad käivitada käsk. See ei ole palju kasutada, ja jutumärkideta vältida hindamise tärn. Nii et sa lihtsalt saada määratlus heaolu ls g *. Siis, kui sa jooksed alias, KOVid, see siis paneb selle välja. Nüüd ei ole hinnapakkumiste ning ta hindab tärniga suorittaessasi alias käsk. Nii et üks asi. Jutumärgid oleks sama mõju siin kuid on ka teisi juhtumeid, kus jutumärkide ei tööta nii hästi. Siin on veel üks. Sa võid teada, grep käsu. Grep käsu abil saab skaneerida faili read, mis on teatud strings. Lähme siis siia ja ma väljuda minu Bourne shell. Okei. Siin on faili. Oletame, et see on grep abc stringe. Siin see on. Kui ma grep zddd ma ei saa midagi. Okei. Seega leiab stringi aru; ta ei leia, et see ei anna sellest teada. See väljundid iga rida, mis on, et string peal. On igasuguseid võimalusi siin, mille leiate dokumentides. Siin on üks viis seda teha. Aga see, alias grabc "grep abc"? See saab lisada 1 argument kui alias on määratud. Nii et kui ma teen seda siin, nüüd kui ma seda grabc, nüüd alias sisaldab rohkem kui lihtsa käsuga. Samuti on argument. Seni, mis töötab. Mul on veel üks käsk siin see, et need on erinevad stringid seal ja näidata, et see ei leia midagi seal, sest see ei sobi. Mida teha, kui ma tahan lisada alias definitsiooni fail, et ma lähen otsima ja ma tahan anda argumendina alias string et ma otsin? Ma võiksite öelda abc kui argument minu alias, aga alias on juba kindlaks määratud faili. Ja see, kui see väljend on sisse Pange tähele, meil on siin grep nagu enne. Meil on fail siit, keelpillid. \! ^, Selline kummaline väljend, ma arvan, kui sa ei ole näinud seda enne. Hüüumärk on osa C-shell ajalugu mehhanism. See võib meenutada varem käske, see võib meenutada argumente nende käske ja nii edasi. Ajalugu mehhanismi kasutatakse osana esitusvigu. Kui määrate real pärast hüüumärk, siis vaadake, et line ajaloos nimekirja mida me ei hakka nüüd, sest see on kogu muu teema. On võimalik määrata osa liin. Nii! 03:02 oleks teine ​​argument käsu number 3. Katus siin väljend tähistab esimene argument. Kui te ei anna see märge, mis käsu te viitate, see tähendab kohe eelmise käsu, ja katus on sümbol esimest argumenti. Sest see on katus ja mitte number, et sa ei pea kasutama koolon, nii! ^ tähendab esimene argument, et eelnevalt kirjeldatud käskluse. Vähe sassi siin. Sel juhul, kui te kasutate seda alias määratlus, ajalugu viide viitab tagasi käske mis alias kasutatakse. Nii see läheb tagasi 1 käsu ajalugu operatsiooni kuid nagu alias operatsiooni viitab see käsk, mis siis oleks tüüp, öelda, grstrings_file. Meil on jutumärgid siin ta. Mida kurakriips eest? Sel juhul, nagu ka mujal, me ei taha täita ajalugu mehhanism määratledes alias. Kui meil ei oleks kurakriips seal kest oleks tõmmake esimene argument Käsu õigus enne, kui see jooksis see alias käsk, mida me ei taha. Me tahame, et see on ehitatud alias käsk helistada argument hiljem. Ülakoma ei pääse hüüumärk, ajalugu viide. Ehk tead väljendit põgeneda tähendab muuta tähenduses midagi. Sellisel juhul tähendab see seda, et lõpetada midagi, millel on eriline tähendus. Hüüumärk on eriline tähendus on ajalugu. Põgeneda ning ta ei ole seda mõtet. Tsitaadid ei tee seda; kurakriips teeb. Nii et me tegelikult kasutades 2 taset põgenedes siin. Ma lähen, et liikuda selle käsu teistesse aken ilma kirjutades kasutades neid töötlusvõtteid, mida võib olla kasulik. Midagi muud siin ma näitan sulle. Kui sa lihtsalt kirjutad alias argumentidega, see ütleb teile kõik oma argumendid. See on kamp varjunimed ma juba siin peale nende, mida ma olen kasutanud siin täna. Aga kui ma lihtsalt kirjutada nimega alias, ta ütleb mulle, mida see tähendab. Pange tähele, et jutumärgid on läinud ja tagurpidi kaldkriips on läinud. See string siin on tulemus, et alias määratlus, ja nüüd on lihtsalt! ^ ta. See läheb otsima failis stringid midagi. Nii et kui ma teen grstrings_file stringid, ma ei anna see midagi otsida seal, aga ta otsib ridades. Ta ei leia sõna stringid fail strings, kuid ei leia abc. Ja ta ei leia seda. Nii et siin me anname argument, mis tabab sisse mõiste alias, mis sisestatakse see. See on koht, kus see väljend pärineb. Võite kasutada rohkem kui 1. Katus on sümbol esimest argumenti. Kui soovid kasutada teist argumenti, siis oleks siis öelda: 2. Ei ole eriline sümbol teine ​​argument. Ja kuna te kasutate number, siis oleks kasutada jämesooles. On aga veel üks valik siin. Dollari märk tähistab viimase argument. Ja kuna see on sümbol, võite jätta jämesooles. Nii et see oleks viimane argument nimekirjas. Ja seal on ka, et üks. Tärn tähendab, kõik, nii et see on täielik argument nimekirja ja uuesti, võite jätta koolon, sest see ei ole number. Ma loodan, et te kõik järgides kõiki selle. Ajalugu mehhanism saab minna tagasi varem read ajaloos nimekirja. Sa võid seda teha alias määratlus. Ma pole kunagi näinud seda teinud. See tooks kaasa selle, tõmmates välja varem antud käskude ajalugu nimekiri kui teil täita alias, mis võivad olla erinevad käsud olenevalt sellest, millal ja kus sa käivitada. Mõeldav võiksite tõmmake selline viide lihtsalt teada, mis varem käsk oli. Ma pole kunagi näinud seda juhtub. Ma arvan, et keegi tahta, kuid see on väga ebatõenäoline. On veel üks asi siin. Kui te kasutate, et ajalugu tüüpi viide siis ainult argumente, mis on selline viide on kasutatud. Kui teil on alias määratlust, mis ei kasuta ajalugu tüüpi viide kui see muutub lihtsalt alguses käsu ja sul on rohkem väiteid, siis midagi kirjutad pärast, et lisatakse käsk. Sel juhul näiteks ma andsin seal kasutasime esimene argument; me ei kasutanud teised. Kui muid argumente oli antud käsureal, et nad ei saa kasutada. Nii et kui te kasutate ajalugu viide üldse, siis tuleb seda kasutada, et saada kõik argument. Seal on teine ​​asi siin ma tahan mainida, osaliselt sulgudesse nimelt, et see ajalugu mehhanism hüüumärk läheb tagasi algse C-shell. Tcsh kasutusele ajalugu tegevuse mis kasutavad erinevaid käske ja nöörid toimetajad, kas Emacs või vi. Minu isiklik arvamus on, Emacs on palju lihtsam kasutada selleks isegi kui te kasutate vi Teie regulaarne redigeerimiseks. On mitmeid Emacsi käske, mis on nüüd kohandatud ajalugu. Kontroll P saab eelmise rea ajaloos nimekirja. Teine kontroll P sulle üks enne seda. Kuni nool teeb sama asja. Kontroll N saab järgmise käsu, kui olete juba kerida tagasi mõnes mõttes. Nool teeb seda ka. Saate liikuda vasakult paremale nooled ja mitmed muud asjad. Seda saab kasutada ajalugu mehhanism palju lihtsam kui kasutades hüüumärk süntaks, kuid te ei kasuta, et alias määratlus. Me läheme üle, et mõni teine ​​kord. Muutujad. Sa tead, mida muutujad programmeerimiskeeltes. Merekarbid on nad ka. C-shell kasutab käsk seatud määrata muutujad, et seab muutuja väärtusele b - nagu ma ütlesin, mõttetu mõiste vaid näide sellest, kuidas seda kasutatakse. Set käsk loob muutuja kui ta seda juba ei ole. Asendi parameetrid shelliskriptides võib pidada muutujad, kuid neid kasutada ja nende suhtes mõnevõrra erinevad. Sa ei saa omistada väärtus $ 1 käigus script. Sa oleks võimalik määrata uus muutuja selleks kui mõned tahtsid. Tüüp määrata ilma argumentideta ja sa saad nimekirja kõigist praegu defineeritud muutujad. Ja lähme üle minu teisi kest ja vaata mis me saame, kui me teeme seda. Üsna pikk nimekiri, eks? Kerige üles natuke. Vaata seda. Mõned neist asjadest on määratud automaatselt kest. Kest tekitab muutuva ja annab talle raha. Mõned neist on määratletud kest aga siis uuesti määratletud alla vastavalt oma eelistustele. Ja mõned neist on loodud kasutaja sõltuvalt sellest, mida ta teeb, mis päev. See on lihtsalt seatud argumentidega. Seal on kummaline omadus siin see asi. Ei pea olema kas tühikuteta võrdusmärgi ja muutuja nimi ja raha või ruume mõlemal pool võrdusmärki, nagu see üks. See ei tööta, ja see on tegelikult kehtiv käsk kuid ta ei tee seda, mida sa kavatsed. See käsk töötab, sest kui sa just ütlesid seatud ja muutuja nimi ilma võrdusmärgi või seada ja muutuja nime võrdusmärgi ja mingit väärtust, see seab muutuja null väärtusega. Nii seadis = on kehtiv käsk. Set käsu saab määrata rohkem kui 1 muutuja sama liini. Nii et see käsk on siin mõju määratletakse nii A ja B null väärtusi. Ilmselt mitte see, mida sa tahad. See üks siin eespool mainitud, viib viga sest = b ei ole korrektne väljend. Muutuja nimi ei tohi alata võrdusmärki. Ja seal on neid veelgi asju siin. Käärsoolelahangu valimiseks kasutatud argumendid ajalugu read, ning neid saab kasutada - ja ma ei lähe enne - muuta neid asju. Samuti võib neid kasutada modifitseerida kest muutujad. See üks siin, $, on väärtus. : R startida pikendamist. Pikendamine on midagi pärast dot, dot ja midagi järgnevat lõpus faili ainult lõppu loetelu pärast viimase Kaldkriipsude. Nii et mul on see siin. on see, et. See langeb. O. Kui seal ei pikene, vaid teenimesid pärast viimast slash, see ei mõjuta. : h, et muutuja väljend, võtab ära viimase osa kataloog nimekirja uuesti alles pärast viimase Kaldkriipsude. Nii / / b / c muutub / / b, kuid see on muutunud, sest element loetelu lõppu on null. Siin on midagi, mida ka mina tahan rõhutada. Need kvalifitseerujad ei otsi olemasolu neid faile. Nad lihtsalt otsida stringe. Need on mõeldud manipuleerida failinimede teenimesid, kuid neid saab kasutada suvalist stringi, isegi kui see ei ole faili nimi. Ja nad ei vaata, et oleks olemas, nii et kui seal ei ole sellist faili / a / b / c see on siiski töö. Kas see on mingit kasu on teine ​​küsimus, kuid see on siiski töö. Muutujad erinevad Bourne kestad. Me jõuame hiljem. Dollar märk võib pääsenud nagu hüüumärk ja tärniga. Dollar märk saab kenoviiva või ülakoma. Jutumärgid on kummaline mõju kõik kestad sunnib hindamise dollari märk muutuja väljend. Nii et kui see on pääsenud üks viis, jutumärgid võib mõjuda põhjustab seda hinnata ikkagi. See on natuke segane. Kui on mitu taset põgenedes, nagu ülakoma sees jutumärgid või jutumärkide sees ülakoma tuleb testida, et näha, mis juhtub muutuja, kui te kasutate üks. Need 2 olukordades - double sees ühe, ühtse sees topelt - ei pruugi teile sama tulemus. Keskkonnamuutujaid kohustatud C-shell muutujaid. Keskkonnamuutujaid ka muutujate C-kest samuti on nad muutujad teistes kestad liiga. In C-shell nad erinevad hulgad. Asjad, mida ma ütlesin enne asute kest muutujaid. Keskkonna muutujad eraldi muutujaid välja arvatud mitme muutuja, mida me nimetame seotud muutujate mis on väga oluline ja me võtame arvesse need hiljem. Keskkonnamuutujaid automaatselt edasi et kestad või käske, mis käivitatakse oma kest. Muid asju ei ole. Shell muutujate varjunimed ei ole. Keskkonna muutujad. Sellepärast me nimetame neid keskkonna muutujad, asja mõte on selles, et keskkond ulatub minevikku lihtsalt oma praeguse shell. Neid saab kasutada, et määratleda asju käske. Siin on näide. PRINTER, LPDEST. Mõlemad need muutujad saab määrata printerit, mis käsk kasutada printimiseks asju. Kui teil on mitu printerit ümber, võiksite panna üks meeldivaim. Põhjus on meil 2 muutujad on, et erineva käske kirjutatud Kasutades neid erinevaid muutujaid. Sa võid anda neile erinevaid väärtusi. Tõenäoliselt sa annan neile nii sama väärtusega. Need asjad töötavad, sest käsud teha trükkimine programmeeritud uurida väärtusi need muutujad. Kui programm ei ole kirjutatud, et tee, kui see on kirjutatud, et teha midagi muud, muutuja oleks asjakohatu. Nii operatsioonisüsteemi ei otsi need muutujad iga kord, kui te leiate printeriga. Käsk, mis teeb trükkimise otsivad need muutujad, kui see on programmeeritud nii. Need tunnused on sageli määratletud oma vormindamise failid kuid mitte tingimata. Saate määrata neile käsureal. Nad võivad olla määratletud käsuga. Käsk, mis töötab midagi võib olla oma valik muutujaid - muutujad, mis on unikaalne eelkõige tarkvarapakett, näiteks. Need määratakse kindlaks, kui sa jooksed selle paketi. Kuidas on need muutujad edastatakse sub-shell? Kui sub-kest on kirjutatud, ei saa kirjutada sellesse piirkonda. Ala sub-kest, mis on pühendatud keskkonna muutujad ei kirjutanud sub-kest, see on kirjutatud kopeerimist. Kui sa jooksed tavaline käsk, nagu need käsud trükkida või mis iganes, nad alustad luues uue kest. Kest tekitab koore ja seejärel kirjutab selle osa käsuga, et näed, mis on veidi segane, vaid see, kuidas neid käske saada keskkonna muutujad et nad siis viidata hiljem. Käsk siin määratlemisel muutuja setenv. See, kuidas sa määratleda. See on 3 elementi: setenv, muutuja väärtus. Kui sa lihtsalt ei setenv argumentidega, mida sa saad? Nimekirja kõik need muutujad. Jällegi on see kena pikk nimekiri ja sel juhul, kui teised need muutujad on määratletud suuresti minu login operatsiooni korpusel mitte midagi, mida ma tegin. Seal on teine ​​käsk siin printenv. Et ka prindib keskkond. Pange tähele, see viimane asi, mida siin toimetaja = vi. See ütleb, et kui ma kasutan midagi, mis nõuab toimetaja ja ma ei täpsusta toimetaja ja see võimaldab mul valida, see võib anda mulle vi. Mis siis, kui ma printenv TOIMETAJA? Ta ütleb mulle, mis see on. Just enne seda oli muutuv, vähem. Need on sinu vaikimisi valikuid, kui ma käivitada käsk less, mis kuvab faile. Nii et kui ma seda teen, printenv võib võtta 1 argument või 0 argumendid, mitte rohkem kui 1. On ka muid käske ka, aga me ei hakka kõik täna. Mäleta oli modifitseerijaid shell muutujate nagu: h, mis langeb viimane element failinimega, või: r, mis langeb pikendamist. Need praegu kehtivad keskkonna muutujaid liiga. Nad ei kasutatud. Seda, et nad ei saa muuta. Nüüd neid saab. See on üks edusammud arengutega kestad aastate jooksul. Ma ütlesin, et kestad osana keskkondades ja shell muutujate C-shell on, mõningate eranditega, erinevat komplekti. Saad luua keskkonnamuutuja ja koorega muutuja sama nime. Need võivad olla erinevad muutujad, nad võivad olla erinevad väärtused. Muutuvad väärtus ühe ei muutu väärtus muud. Need muutujad on kõik hinnatud dollari märk - $ $ iganes. Mis siis, kui sul on see? Kas sa tead, millest üks teil? Minu testid sain kest muutuja, kuid seda ei ole dokumenteeritud ja sa ei saa tugineda sellele. Nii et ma palun teid, tekitab kest ja keskkonna muutujate sama nime on hea idee? Ei midagi. Millised on need peamised erandid, mille puhul keskkonnale ja shell muutujate on üksteisega seotud? On need 4. Suurtäht TERM keskkonnamuutuja laduma muutuv mõiste väikeste tähtedega, terminaliemulatsiooni. Ma lihtsalt lähen siia ja ma teen Kaja kasulik käsk siin $ TERM $ perspektiivis. Ja seal. xterm on terminal tüüpi aknad kuvatakse x Window System. xterm-color on variatsioon, et see võimaldab erinevaid värve. Miks me defineerime neid? Mis on see hea? Käsud, mis ümber ekraani nagu toimetaja Kirjuta eriti järjestusi, mida nimetatakse Paojada, Lisa terminali või akna ümber selle ja nii edasi. Need järjestused on erinevad erinevate terminalide. See ütleb see mida kasutada. Mõnikord on küsimusi seal. Võiksid muuta. Kui asjad ei tööta, mõnikord terminal tüübiks on valitud vale, võib teil olla võimalik seda parandada uueks mõiste muutuja. Nendel juhtudel, muutes ühe muutuja keskonnamuutujaga või kest muutuja tuleks muuta teine. Olen avastanud läbi kogemuse, et muutuvas TERM trükitähtedega ei ole alati muuta kest muutuv mõiste väikeste tähtedega. See on viga. Ma ei tea, kas see on alati tõsi. Suurem osa ajast see ei ole tõsi, kuid see võib olla. Nii et kui sa midagi muuta, vaid vaadata, et välja. See ei ole tihti, et sa pead muutma seda väärtust, kuid kord, kui sa seda teed. Keskkonnamuutuja kasutaja. Jällegi keskkonnamuutuja trükitähtedega, Shell muutuja väikeste tähtedega. See on sinu kasutajanimi. See on ainult väga erandlikel asjaoludel et sa tahaksid seda muuta. Kui teie kasutajanimi on keegi teine, siis võib visata igasuguseid asju välja. Kodu kataloog, kasutaja kodukataloogi. Jällegi, sa ei taha seda muuta. Teate kõik need juhtumid ja üks, mida me parasjagu katta, tee muutuja, keskkonnamuutuja on trükitähtedega ja seotud kesta muutuja on väikeste tähtedega. Kui muuta mõnda, siis peaks muutma teisi. Selline siduv ei ole võimalik tuvastada, kui te ei saa siduda 2 muutujad, va need 4 ja siduvad need muutujad ei saa tagasi võtta, sa ei saa eraldi neid. Nii et need 4 paari muutujad on seotud. Nad alati. Puudub teised on. Lisaks oleks võimalik luua muutujaid samanimelised vastupidisel tüübid. Sa võiksid kesta muutuja mõiste väikeste tähtedega või keskkonnamuutuja TERM trükitähtedega. Need muutujad ei sõltuks nende paaris muutujad ja nad oleksid teineteisest sõltumatud. Ma ei kujuta ette, miks sa ei tee seda, kui sa tahad inimesi segadusse ajada. See üks siin, tee muutuja, see on tõesti oluline. Teine asi on see, et seal võib olla juhtumeid muutujate sarnaste ühildatud nimed, mis ei ole omavahel seotud. Ei saa olla muutujad, SHELL ja Shelli ja väiketähti. Tuginedes sellele nimi, sa ei tea, kas see muutuja on kest muutuja või keskkonnamuutuja, ja nad ei ole omavahel seotud. Nii et omamoodi seotud nimed ei tähenda seotud muutujad. Tee muutuja, mida ma näitas enne, on loetelu teenimesid kus kest otsib käske. Lähme üle selle akna siin ja me teeme echo $ PATH, suurtähtedega - keskkonnamuutuja - echo $ path, väikeste tähtedega - Shell muutuja. Pange tähele, et kataloogide nimekirja on sama. Need on seotud. Muuda üks, muudad muu. Keskkonnas muutuja elemendid on eraldatud kooloniga. Pange tähele, et. Kest muutujad tühikutega. See keskkonnamuutuja on üks string. Kest muutuja massiivi. Bourne shell ei ole massiivid. Bash ei, kuid see on juba fikseeritud osa kest. See on ühekordne string mitte massiivi. C-shell alati olnud massiivid. Massiivid on palju lihtsam töötada. Võite viidata osi. Nii echo $ path [1] ja ma saan / usr / bin, esimene element. Taas meenub dollari märk tähistab viimase osa ajaloost nimekirja. Mis juhtub siis? Ta püüdis leida dollari märk muutuja sümbol. Ma sellest pääseda. Oops. See ei võtaks, et kas. Mõned need asjad ei tööta nii hästi. Võib-olla me lihtsalt jätta see välja. Tärn tähistab kogu asi, kuid see on, mida sa saad, kui sa ei täpsusta element. Teine võimalus, et massiivi muutujad saab manipuleerida, mitmeid elemente seal, 7 elementi. Siin me esitame nael märk enne muutuja nimi. Siin on veel üks. Pane küsimärk seal. See on loogiline väärtus. See näitab, et muutuja eksisteerib. See on teine ​​töömeetod muutujaid. See, muide, ei pea olema massiivi muutuja. See võib olla mis tahes muutuja. Ja kui ma seda teen, ei ole selline muutuv ja ma saan 0. Teine väike asi seal umbes muutuja hinnanguid. Tagasi see siin, kui mingil põhjusel sa tahad teha seda selle asemel et töötada array kest muutuja, on käsud, mida saab eraldada need asjad põhinevad jämesooles. Tegelikult, kui sa lähed tuleb teha seda Bash kesta võimalusel mingi script, mis oleks ilmselt, kuidas sa seda teha. Kuid C-shell see on palju lihtsam kasutada massiivi. In Bourne shell, muutujad on määratud ühe väljend nagu see, meeldib, kuidas sa võiksid määrata muutuja programmeerimiskeelt ja siin ei tohi olla tühikuid. See on vajalik, et see oleks vaid 1 string. In Bourne tüüpi kestad, kõik muutujad kest muutujaid. Keskkond muutujad alamhulk kest muutujad. Nad on eristada mitte-keskkonnamuutujateta eksportides. Käsk seda teha, on eksport, nagu eksport printer. Kui me määratleda sellise muutuja, kui me tahtsime printimiskäsk leida, see peaks olema keskkonnamuutuja ja see, kuidas me teeme seda üks. Siin on midagi sellist segadust. See väljend, eksport keskkonnale, tuleneb sellest Bourne shell mõiste, ja veel, et märge on esitatud kirjeldusi C-shell, kus puudub selline käsk nagu eksport. Kui sa just ütlesid ekspordi iseenesest, saad nimekirja eksportida - Nii et kui ma lihtsalt eksportida siin, ei ole sellist asja. Okei, lähme edasi. Need asjad, muide, on ka määratletud kest. Ma ei ole määratlenud ühtegi neist ise. Kest teeb igasuguseid asju ise. Tuleb teha asju automaatselt. In Bash või Korn shell, saate käivitada käsk niimoodi, mis mõlemad annavad muutuja väärtust ja eksportida seda 1 käsk. In Bourne shell nad olema eraldi käske nagu eksport. Siin on veel üks aspekt, mis on segane. Set käsu C-shell defineerib muutujate ja argumentidega ütleb teile, mida muutujate väärtused. In Bash kesta, set käsk ilma argumentideta teeb sama asja, kuid argumendid see hoopis midagi muud. Nii et need on eri argumente siin. Mõned neist on keskkonna muutujad, mõned neist on kest muutujaid. Kõik nad on shell muutujate tõesti. Mõned neist on keskkonna muutujad. Set käsu argumente saab kasutada tegutseda on asendi parameetrid script, mis on viis, kuidas need kõik korraga. Me ei saa minna sinna täna. Samuti võib kasutada muutus kest käitumist. Eriti Bash on muutujad, mis määravad, kui kest käitub. Siis ka lihtsalt see käsk, et võite näha seda käsku. Default järgnevad muutujad ja muutuja tüüpi kasutatakse Korn ja Bash kestad. See ei ole kohustuslik, vaid seda saab kasutada selleks, et piirata väärtused muutujate mis võib olla kasulik, et vältida vigu ja see on üsna levinud. Nii et ma lihtsalt mainida, et juhul, kui sa näed seda kusagil. Kui käsk. Mäleta mainisin, kui käsk C-shell, mida saab öelda, asukoht käsk failinimega. Siin on käsk asendamine. Te peaksite leidma klaviatuuril kuskil märk, mis näeb välja selline. Asukoht klaviatuuril läheb erineda. Oleme kutsunud see backquote. See on umbes sama suur kui tsiteerida. See läheb ülemine vasakult alla paremale. Siin on minu Mac klaviatuur on ülemises vasakus nurgas. See märk saab käivitada käsk jooksul käsk. Kui teil on väljend sees jutumärgid, et väljend on käsk, see kestab. Väljund operatsioonide asendatakse seejärel kogu backquote ekspressiooni sees enam käsk mis siis jookseb, et toodang osana string argumendid ja nii edasi. Siin on käsk, mis kasutab seda. Olgem näidata toimingu siin. Lähme siia, võtta jutumärgid. Kontroll saab mind alguses kooskõlas Emacsi toimetamine süntaks. Seni teenimesid just kui ei, aga kui ma seda niimoodi, see siis pistikud, et nimekiri teenimesid asemel kogu backquote väljendus ja jookseb ls-l neile. Objekti mugav, eks? Nii et üks kena asi. See, kuidas jutumärgid tööta. Nüüd lähme alla veidi kaugemale. Need on varjunimed. Ma tegelikult kasutada neid. Ma püüan saada see koos 1 redigeerimise operatsioon. Okei. Nüüd vaatame, kuidas need määratlused tuli välja. alias LWH mulle, kuidas seda määratleda. Pange tähele, et see on lihtsalt see, kuid välimine tsitaadid on võetud maha ja hüüumärk on maha võetud. ! * Terve kõiki argumente. In alias määratlus ta kohaldab tagasi, kui ma kasutan seda. LWH KSH bash. Okei. Vaata, kuidas see töötab? See säästab mulle kirjutades. Lähme üles natuke lihtsalt mainida midagi siin. Pange tähele, siin neid erinevaid kestad. Ma oleks pidanud mainitud varem. Csh on 2 siin ja nii ei / bin / tcsh. Me võiksime luua ka muul viisil, et need on tegelikult sama faili. Pea meeles ma ütlesin, kui sa kirjutad SH saad bash. Sisestage see ja sa saad selle. Aga need ei ole seotud. Need on ühe neist seal. Ja see ei ole selline fail, mis saab helistada teisele. Nii et need on eraldi failidena, C-shell neist on sama fail. Tagasi siin, teine ​​siin, see alias, tähele, et on selle käsu, fail. See alias jookseb seda. Faili ütleb tüüpi faili. Nii FWH KSH bash. Okei. See väljund faili käsuga. Ma ei tea, kas sa tead, mida see tähendab siin, Mach-O universaalne binaarne 2 arhitektuuri. On võimalik 2 protsessor liigid Mac, ja mõned programmid kanti olema võimeline liikuma nii, ja faili käsk saab määrata, et nii see on, mida see tähendab. Mõlemad failid on kirjutatud nii. Nii me näeme, kuidas alias töötab, me näeme, kuidas backquote töötab, me näeme, kuidas tegeliku faili ls või fail töötab. See ei pruugi töötada. Proovi ", kus kus" ja "LWH kus". Okei, proovime seda. kus kus. kus on kest sisseehitatud. Mäleta varem näidanud, et Bash ei ole kus. Kui kirjutad, kus Bash kesta, saate veateate. See on lihtsalt osa koore asemel, et eraldi käsk. Mis juhtub, kui ma tüüpi LWH otsin kus? Vaata, mis juhtub seal. Ran kus, kus on see väljund, ja siis üritas joosta Kas kui l, kus on kest sisseehitatud. kui on olemas, aga teised need ei eksisteeri. Ükski neist ei ole, tegelikult. Nii et alati ei tööta, ja see näitab ka, kuidas mõned asjad ei tee päris, mida te võib-olla arvasid. Lähme alla veidi edasi siin. See siin on Bash. See on ka käsk asendamise nagu backquote. Kuid erinevalt backquote, kasutab ta seda muutujat stiilis. On hulk väljendeid, mis algab dollari märk, ja kuigi need ei ole muutujad nad laenatud kasutamine dollari märk näidata väljend mingisugune. See saab olema ümbritsetud sulgudes või sulgudes või topelt sulgudes mis on teistsugune eesmärk. Single sulud siin on käsk asendamise nagu jutumärgid. Double Sulgudes on tegelikult aritmeetilise operatsiooni. On ka teisi syntaxes muid toiminguid. Backquote süntaks on saadaval Bash. Siiski, see üks eelistatav. See on palju lihtsam lugeda ja see võimaldab pesitsevate. Sul võib olla sees $ (käsk) teise käsu, midagi sellist - Ma saan nimekirja seal. See teeks kui mul oleks backquote ka. Mis siis, kui ma tahan teha midagi sellist - Sa ilmselt ei kasuta tegelikult seda käsku, aga see sisemine käsk asendamine kajab kõik failinimed, mis algavad, siis see üks töötab ls-l on need failid, ja siis see lihtsalt kajab väljund. Sa ilmselt ei tee seda, sa lihtsalt ei kaja või ls, kuid see näitab, kuidas pesitsevate käske töötab. Nii lihtsalt teine ​​funktsioon siin.  Ma mainisin seda varem, et kui sul on, kus C-shell, kirjuta tööde Bourne tüüpi kestad asukoha käske. Sisseehitatud käsud, just see, mida ma ütlesin seal. Käsud on osa kest, nagu kus. Kui kere täidab käsku nagu ls, siis otsib ta läbi tee, leiab, et mõnel kataloog kuhugi, loeb see mällu loob uue koorega loeb käsk ls või mis iganes keresse kus keskkonna muutujad on juba leitud, ja siis ta kannab täitmist ta. Sisseehitatud käsk, kood, et käsk on sees kest, nii shell lihtsalt hakkab täidesaatva osa oma kood. kus on selline käsk. See tegelikult saab kiiremini. See ei pea lugema midagi mällu, see on juba mällu. Sisseehitatud käsud alati ülimuslikud käske sama nime. Käsud, mis on katalooge tee võib olla sama nimi, käsud asuvad erinevates kataloogides, failid asuvad erinevates kataloogides. Üks, mis leiab aset varem, tee on üks saate. Kui on sisseehitatud käsk, et te saate alati seda. Ei ole nii, et anda see madalam tähtsam kui käsk tee. Kui sa tahad saada, et tee käsk, saate tippida täis failinimega. Kui oli käsk, kui teed kuskil, sa võiks tüüp / bin / kus ja sa saad selle. Kui sa ei taha, et kirjutad kogu failinimega, siis võiks määratleda alias. Tegelikult, kui sa andsid alias sama nimi sisseehitatud käsk, et see töötab sest alias määratlus hinnatakse enne kest teeb kindlaks, et see on sisseehitatud käsk, mida tuleb täita. Siis see muutub veidi keerulisem mõned käsud here. Kui mõned käsud on tegelikult sisseehitatud käsud ja teed. Üks neist on echo käsk Ma kasutasin natuke aega tagasi need näited. Echo on käsk tee ja see on iga kest. Nad ei pruugi kõik käituvad ühtemoodi. Algselt oli käsk ainult tee. See oli ehitatud karpidele hiljem. Sest seal on võimalusi, mis sõltuvad keskkond ja käsurea võtmeid, sisseehitatud käsud kanti toimida sama käsku, mis oli olnud tee see on ebatõenäoline, et nad on valmis nii kui käsk ei oleks juba kirjutatud tee. Seega see on kõrvaltoimed. Selle ajalugu on mõju siin. Seal on võimalused olemas. Seal on ka võimalus määratleda muutuja Tcsh nimetatakse echo_style. See on üks neid muutujaid, mida saab muuta nii, et echo teoseid. On ka teisi juhtumeid, kus saab määrata muutuja mis muudab seda, kuidas koor toimimist, sealhulgas sisseehitatud käsk toimib. See ei mõjuta midagi kuna teised käsud ei ole juurdepääsu kest muutujate ainult keskkonna muutujate kohta. Aga shell toiminguid saab lugeda kest muutujaid. See ei tööta csh. See on ainult Tcsh. See on üks lisaseadmeid. Parsimine on järjestused, kui ta hindab metacharacters, kui ta hindab muutujate varjunimed, ajalugu viited. Seal on teatud järjestuses need asjad. Kui see juhtub asju kindlas järjekorras ja saab midagi, mis väljendus omamoodi mida on juba hinnatud, siis ei hinnata uuesti. Kui see muutub, siis on see lihtsalt edasi tähemärki. Nii et kui hindamisel mõned väljendid nagu käsu asendamine või muutuva iganes tekitab väljend mis sa tahaksid, hinnatakse mis töötab ainult siis, kui hindamine toimub hiljem järjekorras. Ma loodan, et on selge, seal. See parsing jada operatsiooni C-shell, ei ole sama sisseehitatud käske, sest see on vähem sisseehitatud käske. Ma ei ole kindel, Bash seal. Näiteks, kui kest muutujas ajalugu viide see ilmselt ei lähe tagasi ajaloos. See oleks lihtsalt saada hüüumärk. Tegelikult me ​​lihtsalt proovime seda kohe. seatud = ja me peame panna see sinna. Oh, oota. Vabandust. Ma tegin seda Bash. Ma tahtsin seda teha siin. Vaata, et ta ei hinnanud, et ajalugu viide sest ta oli juba varem punkti hindamiseks ajalugu väljendid kui ta hindas muutuja. Nii et 1 mõju parsing. Ja jälle, sisseehitatud käske ei tehta ühtemoodi. Hea küll. Lähme järgmise siin. See on mõeldud 1 rida, kuid see muudab lugemise lihtsamaks. Mida see teeb? Nette et saaksime hinnata tärnide nagu failinimi metamärke ja on ka teisi failinime metamärke nagu küsimärk ja sulg väljendeid. Selline hindamine on nn globbing. määrata noglob alguses see käsk ütleb ära tee seda. väljalülitatud noglob ütleb minna tagasi tehes. Pange tähele, et komplekt universum ei ole seda mõju. Tavalise keele, määrata universum või väljalülitatud noglob tundub olevat samaväärne, kuid siin ei ole. See on väljalülitatud noglob. Nüüd Tset. tset seisis terminal komplekt. See ei ole kasutatud, et tihti nüüd, kuid enne aknasüsteemide vabanes ja siis tuli ühe terminali, siis võib-olla kindlaks, mis tüüpi. Ja kui midagi on tulemas üle Ethernet või võrgust, võiksite öelda, et see vt100. VT100 on selline standard terminali äri. Ta on pärit detsember terminal. Kui sa lihtsalt teha dialup - teate mis? See ulatub tagasi viisil, mis? Nii et kui me lihtsalt ei Tset siia, kui ma lihtsalt ei tset, see lähtestamine terminal, kuid sa ei näe midagi. See ei ole tõesti midagi muuta. -S Okei. setenv TERM xterm-color. Me juba teame, et mõiste loodi nii, et ei muutnud. See on viis, kuidas me tahaks seda teha. Aga teate, et see käsk, tset-s, vaid toodang need käsud. Ta ei jooksnud neid. Ta ei jooksnud neid käske, see väljund neile. Nii et see eesmärk on tekitada käskude, mis seejärel käivitada. Mäletad käsk selles failis ma just näitasin oli Q ta. Teeme seda. Q surub teatud toodangut, kuid see ei ole oluline siin, nagu näete. Ma teen, et teile näidata, et see ei ole oluline. See on backquote süntaks. Märkus backquote siin backquote siin. Ma jättes need asjad siin. Need on juhtumid, kus räägitakse seda, mida teha aastal Konkreetsete tüüpi terminalide - Ethernet võrgu, dialup, mida olete. See ei ole oluline siin, sest me tegelikult ei tee ühtegi neist asjadest. Ma lihtsalt illustreerib käsk. Kui ma seda teha backquote, mida ma nüüd saan? Märgata ka siin, et see sisaldas komplekt noglob ja väljalülitatud noglob, Nii et need on muutunud tarbetuks määratlemisel. See ei olnud alati tõsi olla, kuid nüüd nad on kantud selle käsu. Aga vaatame, mis juhtub, kui ma seda teen ja minge alguses kooskõlas kontrolli ja ma teen seda. Okei, määrata: command not found. See on omamoodi veider, kas pole? komplekt on tuntud käsk. See on osa kest. määratud: command not found? Miks see nii on? Hmm. Noh, mõtle seda. See töötab backquote käsu asendamine ja mis tekib teatud osa jada parsing käsk. Komplekt on sisseehitatud käsk. Nii et selleks ajaks see, et käsk asendamine see on juba saanud viimase punkti tuvastamiseks sisseehitatud käske. Nii ta kohtleb määrata, nagu see oleks käsk tee. Ütlematagi selge, et ta ei leia seda ja sa saad viga. Noh. Seal on näiteks parsing jada. Ja mida me teeme seda? Pange tähele, see on väga huvitav käsk siin eval. Ma ei tea, mida see teeb. Kui te vaatate käsitsi - ja olgem lihtsalt teha näidata, kuidas segane need juhendid on - mees tcsh segaduses manuaal, leida asju siin ei ole lihtne kas. Läksime, eval arg, et saaksime olla 1 või rohkem argumente ja seal on nimekiri asjadest seal. Kohtleb argumendid sisenditena koorega ja täidab saadud käske kontekstis praegune kest. See on tavaliselt kasutatakse täita käske genereeritakse tulemusena käsk või muutuja vahetusest sest parsing toimus enne asendust. Väga hea. Ja siin nad isegi viidata tset käsk proovi kasutada nagu ma just näitasin. Nüüd ma pean akna tagasi kasulik koht. Paneme siia ja me näeme, et eval kasutatakse vahetult enne seda. Vaatame, mis juhtub, kui me paneme - siin me läheme koos nooli, et käsk ja kontrolli algust, eval. Okei, nii et see töötab. Kui te seda teete eval, kulub mis tuleb pärast seda ja teeb selle käsu. See võimaldab teil põhimõtteliselt sõeluda see kaks korda. Lõik siin töötab see käsk sees jutumärgid, saab väljundi. Etendus peaks kulgema nagu need käsud here nagu need selles üks ja see üks. Nii need käsud on nüüd siin järjestus kuid need on sisseehitatud käsud ja see ei saa neid kohe. Läksime eval, eval korjab selle üles, hakkab kogu asi kõik jälle, ja see toimib. Näiteks nii backquoting, eval, parsing, tagajärjed parsing, ja käsk, mis on ilmselt väga vähe kasu teile tänapäeval. Okei. Olgu, umaski. Vaatame seda käsku siin umask 022. Ma ei tea, mida see teeb. Lihtsalt kirjuta umaski midagi pärast seda. 22. Okei. 022 ja seda uuesti teha. Nagu te võib-olla arvasid, umaski argumentidega ütleb praegune mask; umask argumentidega teeb ta seda, kuid see oli üks Mul oli juba. Mis 022 tähendab? Need on siin kaitse jaoks fail. Nad määravad kindlaks, kellel on lubatud lugeda või kirjutada või käivita fail. Kaitsmed nimetatakse ka õigused. R tähistab lugeda, W kirjutada, ja x, mis ei ole seal kohal tähistab täita. Seal on 3 kategooriat seal. Viimase 3 elemendid on kasutajate kategooria. Need kehtivad minu kasutaja. Need 3 siin kohaldata gruppi. Fail kuulub 1 grupp, kasutaja võib kuuluda mitmesse gruppi, kuid kui kasutaja on rühm, kuhu see fail kuulub, siis need kaitsed kohaldatakse kas ta ei ole kasutaja. Ja see on kõik teisedki. Need kategooriad on teineteist välistavad. Kasutaja kaitset kohaldatakse temale Kaitsed kohaldatakse rühma liikmed, kes ei ole kasutaja, ja teiste kaitset kohaldatakse ainult inimesed, kes ei ole kasutaja ja rühma liikmetele. Kui seal r või aw või x, see tähendab, et kaitse on antud. Kui seal on sidekriips, siis tähendab see, et ei ole. Ei tegelikult on ka teisi asju, mida saab panna siin peale nende, mida ma ei hakka nüüd. Umask määrab vaikimisi faile, mida loote. Ja nagu mask, põhiliselt see ütleb bitti, et sa ei seatud. Kuidas on see muutunud bitti? Kui sa arvad, et kõik need nagu kaheksand number, see on 1s bit on see 2s, see on 4s. Niisiis 0 kuni 7. kirjeldada milline kombinatsioon Ri, W ja X on sul neid 3 ja seejärel sama palju neid ja seejärel neid. Nii 022 tähendab 0 kõiki, 2 rühma, 2 alla. Kuid see on mask. Mask on, mida sa tegelikult ei ole. Vabandust. Ma andsin sulle asju vales järjekorras. See on esimene 3. Need 3 on alla need 3 on rühma, need 3 on muud. Vabandust, et ma andsin sulle need vales järjekorras. 0, mis on esimene neist, siis ei näita väärtus, aga kui number ei ole olemas, see on 0. See tähendab, et kõik 3 neist oleks lubatud. Pange tähele, et selles konkreetses üks x ei ole lubatud. Põhjuseks on see, et kest on võimalik kindlaks kas fail peab olema täidetud või mitte. Kuna see ei ole käivitatav fail, siis ei seadnud x. 2 tähendab, et kirjutada luba, teise kategooriasse siin, üks keskel, on keelatud. Nii et taas, need on asjad, mida ta eitas. Noh, x on lubatud, kuid see ei ole siin, sest see ei ole käivitatav ja sarnaselt teistele. Nii et see ühine umaski. Teine levinum on 700 - anda endale kõike ja keegi midagi. Ja seal on ka teisi võimalusi. Ma lähen tagasi sinna. Kasutades ajalugu võin otsida tagasi, et LWH sinna. Okei. Nii et siin on need kestad. Bash omanik, kes on süsteemis kontot saab teha kõike. Rühm ja kõik teised saavad teha lugeda või täitmisest, kuid mitte kirjutada. See üks isegi ei võimalda omanik kirjutada seda. Kui omanik tahtis kirjutada see süsteem konto ta oleks pidanud muutma kaitse esimene. Aga jälle, umaski seab default varjab seda, näidates bitti, mis ei ole määratud. See on tavaliselt ühe oma initsialiseerimise faile, mis on. Cshrc jaoks C-shell või. profiili Bourne tüüpi kestad. See võib olla mujal ka kui on muid initsialiseerimise faile süsteemi. Igatahes, see umaski. Midagi on pisut imelik siin ja see on, miks on ühe käsu selle eest? Kui ma kirjutan seda, ma teeks muutuja, umask = mingi väärtus. Miks on kogu käsk lihtsalt selleks? Põhjuseks on see lihtsalt läheb tagasi päritolu Unix. Unix oli lihtsalt mingi programmi projekti Bell Labs 1970-ndate alguses. Inimesed lihtsalt tulid kokku, et programmi. Nad ei ole kunagi soovinud saada maailma operatsioonisüsteemi. Erinevad inimesed kirjutasid erinevate osade mõtlemata väga palju kohta, kuidas nad kavatsevad kasutada - pigem pealiskaudsed. Ja see tuli koos niimoodi, ja see on ikka nii mõnes mõttes. Niisiis, mis peegeldab ajalugu, ja seal on veel neid vastuolusid ja kummaline elemente ta. Okei. Next siin. Nagu ma varem kirjutasin, C-shell ei ole tegelikult kasutatakse väga programmeerimine, kuigi see võib olla. See täidab aeglasemalt, uuesti kompromiss interaktiivseks kasutuseks mis on rohkem töötlemispaigad kui kiirus, mida saab teha ilma töötlemine. Lisafunktsioone lisatakse Bourne shell poolt Korn ja Bourne-jälle kestad ei tundu aeglustada neid, ja ma ei tea, miks see nii on. See võib lihtsalt olla parem kavandamine, aga ma ei ole võimeline seda teada. Speed ​​siin tegelikult ei ole nii suur asi, kuigi seda mainitakse. Põhjuseks on, et shelliskriptides tegelikult saada üsna kiiresti. Kui on palju käske nagu arvutusetappide programmi siis ilmselt ei teeks seda skripti. Toimingud on suhteliselt lihtne ja arusaadav. Need, mis ma olen kogenud, et on liiga aeglane kaasama korrata rakendusi aeglane käske. Ma mainisin varem stream editor sed. See käsk on aeglane. Kui teil täita sed mitu korda, saad aeglane script, kuid see ei kesta see aeglane. Running seda Bourne shell ei ole palju kiiremini kui töötab see C-shell, kuigi seal on võib-olla mõningaid eeliseid seal. Lisaprogrammeerimiskuludeta varustust, seevastu on olulised põhjused, miks soovid kasutada Bourne tüüpi kestad. C-shell on kummaline funktsioone see - see, et sa ei tea, kas muutuja on kest muutuja või keskkonnamuutuja. See võib olla väga eksitav. See ei ole nii lihtne kirjutada lihtsalt põhineb teie kogemused programmeerimise teistes keeltes. Ma arvan, et te võite leida Bourne tüüpi kestad rohkem kooskõlas oma kogemust. Mõned skriptid, kuigi võib olla tuhandeid ridu pikk. Need, mida ma olen näinud, mida kasutatakse lappimine operatsioonisüsteemid. Need võib täita väga aeglaselt, kuid sa ei jookse need väga sageli. See on ainult siis, kui sa teed lappimine, ja see on ainult süsteemi juht, kes teeb neid asju, nii see ei ole tõesti suur probleem. Need, kes on sadu ridu pikk tegelikult täidab üsna kiiresti. Viitavad siin, mis need parandusi? Olen juba maininud, mõned neist - massiivid, arvutused, $ () avaldis arvutused Bash koorega muud liiki käsk asendamine. On erinevaid testing käsud , mille abil saab teha tingimuslik testide olemasolu failis või muid asju. Viimane siin, see käsk siin. Mida see teeb, ja miks peaks keegi seda kasutada? printenv muutujaNimi. Me teame, mida printenv teeb. See ütleb meile, väärtus muutuja. Ja printenv muutujaNimi ei ütle meile väga palju, sest seal ei ole sellist muutuja. Blank. Kuid andkem see midagi olulist. See ei ole seal kas. Okei. Ma arvan, et ma ei ole kunagi defineeritud seda. Lihtsalt kontrollida oma keskkonda. See on veel üks käsk, mille abil saate kontrollida oma keskkonda. On vana hea toimetaja, nägime enne. Mida see teeb? Siin on meil backquote väljendus. Pea meeles, see on C-shell. Nii printenv TOIMETAJA annab meile väärtuse redaktor. See on vi. Ja siis ta loob selle väärtuse muutujale, set käsuga. Nüüd, kui ma echo $, saan vi. See ei tundu väga kasulik. Siiski on tegelik eesmärk. Kuna me ei tea, kas muutuja on kest muutuja või keskkonnamuutuja abil dollari märk hindamine süntaks, mida saame kasutada printenv veenduda, et see on keskkonnamuutuja. Nii et kui oli kest muutuja toimetaja, see ei oleks saanud seda. See töötab ainult keskkonnamuutuja. Kui esines koor muutuv ja ma tahtsin selle väärtust, Ma pean leidma mõne muu viis seda teha. Üks viis seda teha oleks tehes komplekt ja torustik. See on üks metacharacters, erimärgid. Ta saadab väljund seatud midagi muud. Vaatame, mida me võiksime leida seal. Mitte midagi. Okei. Vaatame, mis seal kõik koos. See oli echo_style, üks juba mainisin. Okei, teeme nii. Mäleta ütlesin, echo_style määrab, kuidas kaja käsk käivitada. BSD tähistab Berkeley Standard Distribution. See on Berkeley Unix alates 1970. See on üks viise, et kaja saab. Setting echo_style selle väärtus TC-kest tekitab kaja käituda niimoodi. Nii määratud teeb seda, kuid seatud ainult muutub kest muutujaid. Ta ei leia TOIMETAJA, mis ei kesta muutuja. Mitte midagi. Nii et üks võimalus eristada neid. Aga see, et sa pead läbima mõned kummaline käsk niimoodi eristada shell muutujate või keskkonna muutujad näitab selline ebapraktiline milline C-shell teatud otstarvetel. Ja nüüd, viimane ja võib-olla vähem, see on man-lehekülgi. Need, kes te teate, et mees on käsk lühike kasutusjuhend. Mees lehekülgi kestad on raske lugeda. Nad on väga pikk. Nad korraldatud nii, et võib raskendada leida, mida te otsite. Nii et kui te otsite midagi, mille eesmärk, sa ei tea, kas see eesmärk on kesta muutuja või midagi muud, nii et sa ei tea, kust otsida. Võite otsida erinevaid stringid, kuid niite sageli korrata. Nii et see on üldiselt raske lugeda. Me lihtsalt vaatasin TC-kest mees lehekülg veidi enne leida eval käsu. Mõned asjad lähevad kiiremini. Üks võimalus on otsida string. Võite kasutada piipar. Piipar on kaldkriipsuga otsima käsu või stringi sees piipar operatsioon. Man vaikimisi kasutab piiparid, kas rohkem või vähem. Ma ei tea, kas te olete juba tuttav neile, kuid need ei näita faile vähehaaval. Olen olnud kasutades vähem näidata nende konkreetsete failide meil siin. Võite otsida seal sees. Võite proovida kasutada erinevaid search strings. Ka mees lehekülgi erinevate operatsioonisüsteemide ei pruugi olla sama. Nad võivad olla eraldi lehekülgi csh ja Tcsh. Nad ei ole Mac, kuid nad võivad olla, kui need on eraldi käske. Kui SH tegelikult ei helista Bash, siis ilmselt oleks eraldi mees lehele. Mõned süsteemid on eraldi inimene lehekülge just C-shell sisseehitatud käske. Mõnikord, kui soovite lugeda kirjeldust sisseehitatud käsk see on ka tee, nagu kaja, pead lugema man-lehekülg, et käsk echo otsustada, kuidas see toimib nagu sisseehitatud käsu isegi kui sa ei helista sisseehitatud käsk. See on puuduseks operatsioonisüsteemi üldiselt mitte ainult kestad, kuigi kestad eriti man-lehekülgi on üsna pikk, osaliselt seetõttu, et nad lisanud kasulikke funktsioone neile, mis võib olla positiivne. Okei. Kas on küsimusi? Kõik teemad, mida soovite tuua? Midagi siin oluline? Noh, see on olnud väga tore sinuga rääkida kõik. Loodan, et teil on midagi sellest seminar mis on kasulik teile oma tulevikku püüab. [CS50.TV]