1 00:00:00,000 --> 00:00:02,320 >> [Seminar - Unix Shells, Environments] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Dette er CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Dagens tema er Unix shell. 5 00:00:12,770 --> 00:00:20,600 Jeg er Douglas Kline, ekspert, eller i det minste rimelig kompetent bruker, av skallet. 6 00:00:20,600 --> 00:00:25,280 Et skall er grensesnittet for brukeren til datamaskinens operativsystem. 7 00:00:25,280 --> 00:00:29,580 Navnet er misvisende som, i motsetning til et dyr er skallet, 8 00:00:29,580 --> 00:00:34,890 noe som er vanskelig og beskyttende, gjør det mulig for datamaskinen skall for kommunikasjon. 9 00:00:34,890 --> 00:00:39,120 Så porøs membran ville trolig være en bedre metafor. 10 00:00:39,120 --> 00:00:44,500 >> Den opprinnelige skallet for Unix er Bourne shell. 11 00:00:44,500 --> 00:00:46,450 Bourne er stavet B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne var en av de opprinnelige forfatterne av Unix, 13 00:00:49,770 --> 00:00:51,700 og så skallet er oppkalt etter ham. 14 00:00:51,700 --> 00:00:54,850 Navnet på at skallet som en kommando er bare rett og slett sh. 15 00:00:54,850 --> 00:00:57,400 Det er den kommandoen du kan utføre. 16 00:00:57,400 --> 00:01:00,810 Skallet starter ved innlogging. 17 00:01:00,810 --> 00:01:04,459 Når du logger deg på datamaskinen, skallet bare begynner å kjøre for deg, 18 00:01:04,459 --> 00:01:06,820 og det er det som tar dine kommandoer. 19 00:01:06,820 --> 00:01:09,790 Det kan begynne på andre tider også. 20 00:01:09,790 --> 00:01:16,780 Hvis du tar opp et vindu med ingen annen indikasjon, vil det starte et skall for deg. 21 00:01:16,780 --> 00:01:20,450 Det er sånn det er at du kan gå til et vindu og begynner å skrive kommandoer 22 00:01:20,450 --> 00:01:23,960 og så videre der selv om du ikke logget deg på til det vinduet. 23 00:01:23,960 --> 00:01:26,670 I tillegg, hvis du gjør en ekstern pålogging, 24 00:01:26,670 --> 00:01:30,250 så vil det starte et skall på den eksterne datamaskinen. 25 00:01:30,250 --> 00:01:44,310 Og det er mulig å kjøre kommandoer uten et interaktivt skall. 26 00:01:44,310 --> 00:01:48,990 Det kan bety innenfor din nåværende drift, 27 00:01:48,990 --> 00:01:50,700 og det kan også bety en ekstern drift. 28 00:01:50,700 --> 00:01:52,900 Du kan sende en kommando til en annen datamaskin, 29 00:01:52,900 --> 00:01:55,460 hvilken omfatter å starte opp et skall der. 30 00:01:55,460 --> 00:01:57,760 Faktisk har det å inkludere starte opp en shell der 31 00:01:57,760 --> 00:02:01,740 selv om det ikke er din endelige formål. 32 00:02:05,310 --> 00:02:12,350 Når noe begynner opp som dette, betyr det ikke nødvendigvis starte et nytt skall. 33 00:02:12,350 --> 00:02:17,430 Hvis du tar opp et nytt vindu, er det mulig å be den om å få opp en redaktør 34 00:02:17,430 --> 00:02:18,940 eller en annen kommando. 35 00:02:18,940 --> 00:02:20,560 I så fall, vil redaktøren starte fra scratch. 36 00:02:20,560 --> 00:02:22,930 Når redaktøren slutter, slutter vinduet. 37 00:02:22,930 --> 00:02:24,620 Dette er litt uvanlig, men det kan gjøres. 38 00:02:24,620 --> 00:02:27,140 I slike tilfeller vil det ikke være et skall. 39 00:02:27,140 --> 00:02:31,890 Så det er ikke nødvendigvis slik at et vindu eller noe slikt program vil få opp et skall. 40 00:02:31,890 --> 00:02:34,030 >> Shell analyserer kommandoer. 41 00:02:34,030 --> 00:02:40,900 Parsing innebærer å identifisere de ulike elementene og klassifisere dem. 42 00:02:40,900 --> 00:02:43,470 Innenfor en kommando, den komplette streng som du skriver, 43 00:02:43,470 --> 00:02:47,310 Det vil være en eller flere enkelt kommandoer som skal utføres. 44 00:02:47,310 --> 00:02:50,050 Andre elementer kan være argumenter. 45 00:02:50,050 --> 00:02:55,020 Det kan også være spesielle tegn som påvirker utførelsen av en kommando. 46 00:02:55,020 --> 00:02:59,710 De kan sende produksjonen et annet sted enn på skjermen 47 00:02:59,710 --> 00:03:01,750 hvis kommandoen vanligvis ville sende den til skjermen. 48 00:03:01,750 --> 00:03:04,390 Det kan omdirigere innspill, det kan gjøre andre ting også. 49 00:03:04,390 --> 00:03:08,120 Det finnes ulike andre symboler, tegn og så videre. 50 00:03:08,120 --> 00:03:13,600 Parsing innebærer registrering og fortolkning av disse tingene. 51 00:03:13,600 --> 00:03:19,560 >> Nå hvis det er noen flere spørsmål, noe som er ganske sannsynlig, siden det ikke er flere mennesker, 52 00:03:19,560 --> 00:03:24,620 vi vil gå videre til mitt neste side her. 53 00:03:24,620 --> 00:03:29,170 >> Jeg sa tidligere at Bourne shell er den første skallet. 54 00:03:29,170 --> 00:03:31,550 Det finnes andre. 55 00:03:31,550 --> 00:03:34,520 Den ene er den C-skall. Kommandoen er csh. 56 00:03:34,520 --> 00:03:36,830 Navnet C-skall er bare et ordspill. 57 00:03:36,830 --> 00:03:41,260 Denne granaten ble innført med Berkeley Unix på midten av 1970-tallet. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix var en banebrytende hendelse i utviklingen av Unix. 59 00:03:44,830 --> 00:03:48,770 Det var en stor omdreining, og med innføring av dette skall. 60 00:03:48,770 --> 00:03:50,790 Grunnen til at ordspill, C-skall, 61 00:03:50,790 --> 00:03:56,490 er at C-skallet har noen egenskaper i det som ligner på C-språk, 62 00:03:56,490 --> 00:03:59,740 som Bourne shell ikke har - 63 00:03:59,740 --> 00:04:02,140 eller det ikke hadde på den tiden. 64 00:04:02,140 --> 00:04:05,190 Det er også TC-skall. 65 00:04:05,190 --> 00:04:07,360 Dette er et supersett av C-skall. 66 00:04:07,360 --> 00:04:11,470 Det har flere funksjoner, hvorav mange er nyttig for interaktiv bruk, 67 00:04:11,470 --> 00:04:16,050 som minner om kommandoer i historien mekanismen, 68 00:04:16,050 --> 00:04:18,459 som jeg vil beskrive noe senere - 69 00:04:18,459 --> 00:04:23,120 på en enkel måte, modellert etter en redaktør. 70 00:04:23,120 --> 00:04:29,170 Det har også bindinger som gjør at du kan binde en kort taste streng til en lengre kommando. 71 00:04:29,170 --> 00:04:31,440 Vi kommer ikke til å være å få inn det i dag. 72 00:04:31,440 --> 00:04:33,650 Det har noen funksjoner som er nyttig for programmering. 73 00:04:33,650 --> 00:04:37,020 Imidlertid er den C-skallet ikke ofte brukt for skall-programmering. 74 00:04:37,020 --> 00:04:39,080 Shell-programmer, hvis du ikke allerede vet, 75 00:04:39,080 --> 00:04:41,690 er programmer som består av shell egenskaper. 76 00:04:41,690 --> 00:04:43,220 Du kan kjøre disse som programmer. 77 00:04:43,220 --> 00:04:46,760 Du skriver en haug med shell-kommandoer i en fil og kjøre filen. 78 00:04:46,760 --> 00:04:49,760 Du trenger ikke å kompilere den. Dette er en fortolkende språk. 79 00:04:49,760 --> 00:04:57,320 Uttrykket C-shell er nå tvetydig ettersom det kan referere kun til den opprinnelige C-skall, csh, 80 00:04:57,320 --> 00:05:01,200 eller til alle C-skjell, inkludert tcsh. Det er litt tvetydig. 81 00:05:01,200 --> 00:05:08,250 >> En senere skallet er den Korn skallet, ksh, oppkalt etter programmerer, Korn. 82 00:05:08,250 --> 00:05:14,160 Dette skallet forsøkt å innlemme i en shell 83 00:05:14,160 --> 00:05:16,960 fordelene ved den C-skall for interaktiv bruk 84 00:05:16,960 --> 00:05:19,230 og Bourne skall for programmering. 85 00:05:19,230 --> 00:05:25,440 Det har blitt brukt som et interaktivt skall av noen mennesker - en minoritet. 86 00:05:25,440 --> 00:05:32,050 Senere skjønt, det var en annen innledning, bash shell, BASH, 87 00:05:32,050 --> 00:05:35,290 igjen et ordspill, Bourne-Again Shell. 88 00:05:35,290 --> 00:05:43,830 Det er en forlengelse av Bourne shell. Korn skallet er også. Begge er. 89 00:05:43,830 --> 00:05:48,100 Den har de samme målene i Korn skallet for en sammenslåing av C-skallet 90 00:05:48,100 --> 00:05:50,980 og Bourne shell fortrinn i en shell. 91 00:05:50,980 --> 00:05:56,810 Mange av forbedringene i Korn skallet er også inkludert i Bash. 92 00:05:56,810 --> 00:06:00,710 Bash har imidlertid mer, og er derfor å foretrekke. 93 00:06:00,710 --> 00:06:05,180 The Bourne-Again Shell og Korn skallet kalles Bourne-type skjell 94 00:06:05,180 --> 00:06:07,730 fordi de inneholder Bourne shell egenskaper, 95 00:06:07,730 --> 00:06:11,180 som er inkompatible i noen henseender med C-skall. 96 00:06:11,180 --> 00:06:15,520 Det finnes andre skjell foruten disse, noen beregnet for begrenset bruk, 97 00:06:15,520 --> 00:06:20,670 kanskje begrenset til noen kommandoer, kanskje spesialiserte formål, ikke ofte brukt. 98 00:06:20,670 --> 00:06:24,240 >> Ok. Neste element her. 99 00:06:31,300 --> 00:06:38,970 Den Bash shell har blitt forbundet med ulike former for Linux. 100 00:06:38,970 --> 00:06:41,550 Jeg er ikke sikker på om det er sant for enhver form. 101 00:06:41,550 --> 00:06:43,280 Det finnes mange former der ute, og jeg har ikke brukt dem alle, 102 00:06:43,280 --> 00:06:46,870 men i de som jeg har brukt har det blitt forbundet med det. 103 00:06:46,870 --> 00:06:49,670 Så vidt jeg vet, er det ingenting om Bash 104 00:06:49,670 --> 00:06:52,210 som gjør det mer kompatibelt med Linux 105 00:06:52,210 --> 00:06:55,020 enn noen annen kombinasjon av skall-og driftssystem. 106 00:06:55,020 --> 00:06:59,690 Jeg tror dette sannsynligvis bare reflekterer tilbøyeligheter av programmerere. 107 00:06:59,690 --> 00:07:07,500 At det har blitt assosiert med Linux er en annen grunn til å foretrekke Bash til KSH 108 00:07:07,500 --> 00:07:11,820 siden ting er sannsynlig å være skrevet på det, og det er sannsynlig å spre seg. 109 00:07:11,820 --> 00:07:15,410 Jeg skal gi deg andre grunner til det senere. 110 00:07:15,410 --> 00:07:21,330 Bourne skall-skript skal kjøres under Korn skallet eller Bash. 111 00:07:21,330 --> 00:07:22,650 Hvis du skriver noe for Bourne shell, 112 00:07:22,650 --> 00:07:26,180 du kan sikkert kjøre det under ksh eller bash. 113 00:07:26,180 --> 00:07:30,610 Korn shell skript vil trolig kjøre under Bash, men jeg kan ikke garantere det. 114 00:07:30,610 --> 00:07:36,040 Senere på her, bør C-shell scripts kjøre under TC-skall. 115 00:07:38,850 --> 00:07:41,690 Den C-shell ble faktisk aldri mye brukt for skripting 116 00:07:41,690 --> 00:07:48,110 siden Bourne Shell og senere de Bourne-type skjell var å foretrekke for dette formålet. 117 00:07:48,110 --> 00:07:50,620 Så det er egentlig ikke så viktig. 118 00:07:50,620 --> 00:07:53,480 Det er ganske mye av Bourne shell skript som ble skrevet for lenge siden, 119 00:07:53,480 --> 00:07:56,860 før Korn skallet eller Bourne-again shell ble innført. 120 00:07:56,860 --> 00:07:59,300 De er fortsatt i bruk, en del av operativsystemene, 121 00:07:59,300 --> 00:08:01,590 og så vil du finne dem hvis du ser inn i operativsystemet 122 00:08:01,590 --> 00:08:03,760 eller noen gamle programmering pakker. 123 00:08:03,760 --> 00:08:12,840 >> Bash er til en viss grad bli en slags lingua franca for operativsystemer. 124 00:08:12,840 --> 00:08:17,580 Det er allerede blitt utvidet til Windows og til VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, i tilfelle du ikke vet, er et proprietært operativsystem 126 00:08:20,440 --> 00:08:25,480 av Digital Equipment Corporation som fortsatt er i bruk, i stor grad bak kulissene. 127 00:08:25,480 --> 00:08:29,250 Og hvis det kommer til å kjøre på flere ulike operativsystemer, 128 00:08:29,250 --> 00:08:31,110 sannsynlig fleste har en tendens til å skifte for det. 129 00:08:31,110 --> 00:08:33,840 Men denne utviklingen er relativt fersk. 130 00:08:33,840 --> 00:08:39,490 Det er bare begynnelsen, så jeg kan ikke spå om dette vil vise seg å virkelig være den slags lingua franca. 131 00:08:39,490 --> 00:08:43,539 Også fordi filen banenavn og biblioteker avvike 132 00:08:43,539 --> 00:08:46,210 mellom disse ulike operativsystemer, 133 00:08:46,210 --> 00:08:50,250 kan du ikke være i stand til å skrive en Bash script på ett operativsystem 134 00:08:50,250 --> 00:08:51,840 og deretter kjøre den på en annen. 135 00:08:51,840 --> 00:08:54,440 Du bør være i stand til å flytte den mellom forskjellige Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Mac OS-operativsystemer, men ikke nødvendigvis til Windows eller VMS. 137 00:08:59,020 --> 00:09:01,390 Du må kanskje endre fil banenavn beskrivelser, 138 00:09:01,390 --> 00:09:03,180 og enkelte bibliotekene kan være annerledes, 139 00:09:03,180 --> 00:09:05,230 som kan påvirke måten at noen kommandoer fungerer 140 00:09:05,230 --> 00:09:09,730 eller hvordan de behandler argumenter og lignende. 141 00:09:09,730 --> 00:09:19,230 I tillegg til at en annen forsiktighet her er at det er ingen garanti 142 00:09:19,230 --> 00:09:23,570 at alle de forskjellige skjellene jeg har nevnt - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn skallet, Bourne-again shell - vil være tilgjengelig under alle Unix 144 00:09:29,880 --> 00:09:33,750 eller Linux eller Mac OS datamaskin. 145 00:09:33,750 --> 00:09:35,620 De rett og slett ikke kan være der. 146 00:09:35,620 --> 00:09:38,300 Det er en av advarslene her. 147 00:09:38,300 --> 00:09:41,490 Det er en uheldig begrensning her siden du ønsker at ting skal fungere overalt, 148 00:09:41,490 --> 00:09:44,380 men dessverre kan du ikke stole på det. 149 00:09:44,380 --> 00:09:47,230 >> Ok. Neste en her. 150 00:09:50,280 --> 00:09:54,370 La oss si at du ønsker å skrive et shell script, 151 00:09:54,370 --> 00:09:57,170 et program som består av shell-kommandoer. 152 00:09:57,170 --> 00:10:01,200 Du skriver dine kommandoer, sette dem i en fil, og kjøre filen. 153 00:10:01,200 --> 00:10:04,230 Hva om du ønsker å inkludere argumenter? 154 00:10:04,230 --> 00:10:09,650 I tilfelle av skall operasjoner, er argumenter kalt parametere eller posisjonelle parametere 155 00:10:09,650 --> 00:10:15,940 og de vil bli oppringt av et dollartegn og tall, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Så hvis manuset har dette navnet, kanskje min første argumentet være argument 1 157 00:10:27,000 --> 00:10:30,540 og min andre kan være argument 2, 158 00:10:30,540 --> 00:10:34,110 og inne manuset mitt hvis jeg ønsker å referere til disse tingene - 159 00:10:34,110 --> 00:10:36,810 la oss slette denne siden jeg ikke egentlig tenkt å kjøre den - 160 00:10:36,810 --> 00:10:42,160 inni manuset mitt kanskje jeg har $ 1 for å referere til Arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, som kommer ut på den måten, arg2. 162 00:10:45,890 --> 00:10:50,080 Så disse symbolene er tilgjengelige for å referere til argumenter, 163 00:10:50,080 --> 00:10:52,390 og de som gjelder for alle de skjell. 164 00:10:52,390 --> 00:10:56,520 I tillegg er det andre tegn. 165 00:10:56,520 --> 00:11:01,700 $ * Refererer til hele argumentlisten, alle av dem. 166 00:11:01,700 --> 00:11:05,390 $ # Refererer til antall argumenter. 167 00:11:05,390 --> 00:11:07,910 Igjen gjelder dette til alle skjellene. 168 00:11:07,910 --> 00:11:15,540 Disse symbolene, * og #, kan brukes med de betydninger i andre steder også. 169 00:11:15,540 --> 00:11:17,940 Vi vil ikke være å få inn i den. 170 00:11:17,940 --> 00:11:20,460 >> Shell specifier linje. Hva er det for? 171 00:11:20,460 --> 00:11:27,760 La oss si at du har skrevet et manus, og det er for en bestemt skall og du ønsker å kjøre den. 172 00:11:27,760 --> 00:11:33,500 Hvordan vet du hva skall operativsystemet vil bruke til å kjøre skriptet? 173 00:11:33,500 --> 00:11:37,230 På ett punkt kan du anta at det ville kjøre den i Bourne shell 174 00:11:37,230 --> 00:11:39,440 hvis du ikke sier noe annet, 175 00:11:39,440 --> 00:11:41,730 men folk ikke skriver script i Bourne shell så mye lenger 176 00:11:41,730 --> 00:11:43,750 og du kan ikke engang stole på det lenger. 177 00:11:43,750 --> 00:11:48,740 Så her har vi et skall specifier linjen her. 178 00:11:48,740 --> 00:11:52,450 Som angir Bash. 179 00:11:52,450 --> 00:11:56,750 Legg merke til at den angir det i banenavnet, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Hvis en datamaskin har Bash shell, men ikke i bin-katalogen, / bin, dette vil ikke fungere. 181 00:12:02,870 --> 00:12:06,870 Det er en annen kvalifiseringskamp, ​​en annen forsiktighet her. 182 00:12:06,870 --> 00:12:09,500 Firkanttegn er kommentarlinje karakter. 183 00:12:09,500 --> 00:12:12,300 Det gjelder for alle skjell. 184 00:12:12,300 --> 00:12:18,610 Den spesielle saken her, #! i begynnelsen av et skript, er et spesielt tilfelle. 185 00:12:18,610 --> 00:12:23,410 Som angir skallet som å kjøre skriptet. 186 00:12:23,410 --> 00:12:30,230 Som jeg sa, kan det ikke være på samme sted / bin. 187 00:12:30,230 --> 00:12:34,880 I tillegg er det en annen ting her. 188 00:12:34,880 --> 00:12:41,250 Hvis du bare bruker firkanttegn uten utropstegn og banenavnet, 189 00:12:41,250 --> 00:12:44,640 som skal indikere en C-skall. 190 00:12:44,640 --> 00:12:48,300 Men jeg anbefaler ikke å gjøre det fordi jeg ikke er i stand til å garantere 191 00:12:48,300 --> 00:12:49,750 at det alltid vil fungere. 192 00:12:49,750 --> 00:12:52,220 Hvis du vil ha en C-skall, ville det være bedre å si det. 193 00:12:52,220 --> 00:12:58,450 Så det er noe ganske forvirrende her. 194 00:12:58,450 --> 00:13:03,940 Hvis du bruker et skall specifier linje som / bin / bash 195 00:13:03,940 --> 00:13:07,070 og at skallet er ikke tilgjengelig der, 196 00:13:07,070 --> 00:13:10,680 det finnes ikke noe slikt som / bin / bash på den aktuelle datamaskinen, 197 00:13:10,680 --> 00:13:14,330 enten fordi den ikke har Bash eller fordi det er på et annet sted, 198 00:13:14,330 --> 00:13:17,450 du får en feilmelding som forteller deg at skriptet du kjørte ikke eksisterer. 199 00:13:17,450 --> 00:13:21,510 Og selvfølgelig finnes skriptet, slik at feilmeldingen er forvirrende. 200 00:13:21,510 --> 00:13:24,810 Grunnen til at operativsystemet gir deg denne feilen 201 00:13:24,810 --> 00:13:28,370 eller, mer presist, at den interaktive skall der du kjører dette gir denne feilen, 202 00:13:28,370 --> 00:13:33,510 er at den rapporterer kommandoen du brukte, som er navnet på skriptet. 203 00:13:33,510 --> 00:13:36,920 At kommandoen effektivt kalt skallet av navnet på skriptet. 204 00:13:36,920 --> 00:13:39,330 Det er der du får den forvirrende feilmelding. 205 00:13:39,330 --> 00:13:42,980 En annen måte å ringe shell script 206 00:13:42,980 --> 00:13:45,910 er ved å spesifisere skallet på kommandolinjen, som her. 207 00:13:45,910 --> 00:13:52,510 Dette er en kommando. Dette sier kjøre Bash og deretter kjøre manuset mitt i Bash. 208 00:13:52,510 --> 00:13:55,680 Det vil gå foran en specifier linje, 209 00:13:55,680 --> 00:14:02,090 og dette har i fremtiden av slik at du kan sørge for varierende banenavn. 210 00:14:02,090 --> 00:14:04,840 Hvis du bare gi en kommando, vil operativsystemet se etter at kommando 211 00:14:04,840 --> 00:14:06,410 på ulike steder. 212 00:14:06,410 --> 00:14:08,820 Hvis det er tilgjengelig, bør den finne det. 213 00:14:08,820 --> 00:14:12,290 Datamaskinen vil finne Bash uansett hvor den er plassert og kjøre den, 214 00:14:12,290 --> 00:14:15,470 slik at du ikke trenger da å være bekymret for hvor den finner det. 215 00:14:15,470 --> 00:14:17,360 Det er potensielt andre bekymringer her, 216 00:14:17,360 --> 00:14:20,830 som om det er mer enn en versjon av Bash, noe som er mulig selv om usannsynlig. 217 00:14:20,830 --> 00:14:23,540 Så det er en annen måte å forholde seg til disse tingene. 218 00:14:23,540 --> 00:14:30,480 Specifier linjer kan ringe noen skall. 219 00:14:30,480 --> 00:14:34,480 De kan også ringe andre enn skjell ting. 220 00:14:34,480 --> 00:14:37,940 Eksempler jeg har her er sed, som er strømmen redaktør; 221 00:14:37,940 --> 00:14:39,900 awk, som er et mønster behandling språk; 222 00:14:39,900 --> 00:14:43,680 og perl, en meget høyt utviklet skriptspråk. 223 00:14:43,680 --> 00:14:47,570 Hvis du putter en specifier linje som indikerer en av disse programmene i begynnelsen, 224 00:14:47,570 --> 00:14:51,270 det vil gå direkte inn i dette programmet heller enn å starte et skall. 225 00:14:51,270 --> 00:14:54,030 Disse programmene har grenser for sine evner. 226 00:14:54,030 --> 00:14:58,790 Perl er svært dyktige. Sed er et redigeringsprogram. Det kan gjøre ting utover bare å redigere. 227 00:14:58,790 --> 00:15:03,300 Men det kan være vanskelig å programmere det. 228 00:15:03,300 --> 00:15:09,670 I tillegg passerer argumenter og ting å skriptet er enten umulig eller forvirrende. 229 00:15:09,670 --> 00:15:15,030 Så i disse tilfellene, med awk eller sed, er det, i hvert fall i min erfaring, 230 00:15:15,030 --> 00:15:18,910 foretrekke å skrive et shell script og samtale awk eller sed fra shell script 231 00:15:18,910 --> 00:15:24,660 snarere enn å ringe awk eller sed som manuset specifier linjen. 232 00:15:24,660 --> 00:15:26,980 Perl er et svært mangfoldig språk, som jeg sa. 233 00:15:26,980 --> 00:15:30,050 Du kan ikke kjøre interaktive kommandoer i perl, 234 00:15:30,050 --> 00:15:32,660 noe som betyr at du ikke kan teste deler av skript som du utvikler 235 00:15:32,660 --> 00:15:33,970 ved å kjøre dem interaktivt. 236 00:15:33,970 --> 00:15:36,160 Men det er en ekstremt dyktige språk 237 00:15:36,160 --> 00:15:40,960 og har utviklet seg til en svært mye brukt verktøy. 238 00:15:40,960 --> 00:15:45,720 Det er bare en liten bit av et parentes bemerkning om KONSULENTEN linjer. 239 00:15:45,720 --> 00:15:50,610 >> I alle eller de fleste former for Linux - igjen, jeg kan ikke være sikker på det er alt - 240 00:15:50,610 --> 00:15:57,900 og i Mac OS, hvis du skriver csh du får tcsh, 241 00:15:57,900 --> 00:16:00,570 og hvis du skriver sh du få bash. 242 00:16:00,570 --> 00:16:05,020 De prøvde der for å gi deg de mer avanserte versjoner av disse skjellene, 243 00:16:05,020 --> 00:16:07,940 men dette kan være forvirrende. 244 00:16:07,940 --> 00:16:16,720 Hvis du skriver et skript ved hjelp av tcsh eller Bash funksjoner mens ringer csh eller sh 245 00:16:16,720 --> 00:16:22,230 og deretter prøve å kjøre den på en datamaskin som ikke har tcsh eller Bash, 246 00:16:22,230 --> 00:16:25,050 du kan få noen feil hvis det er kommandoer i det 247 00:16:25,050 --> 00:16:27,970 som disse skjellene ikke gjenkjenner. 248 00:16:27,970 --> 00:16:34,120 I tillegg kan du ha kalt opp skallet på den lokale datamaskinen 249 00:16:34,120 --> 00:16:37,700 kaller det som sh eller csh og så får de mer avanserte skjell. 250 00:16:37,700 --> 00:16:41,440 Du kan ikke engang tenke på det faktum at du bruker de mer avanserte shell. 251 00:16:41,440 --> 00:16:45,670 Så dette er en potensiell fallgruve. 252 00:16:45,670 --> 00:16:50,290 Hvordan er det fastslått at hvis du skriver sh du får Bash, 253 00:16:50,290 --> 00:16:55,580 hvis du skriver csh du får tsch? 254 00:16:55,580 --> 00:16:59,940 Det er ting i disse datamaskinene kalt koblinger 255 00:16:59,940 --> 00:17:06,460 som kan koble til filnavn for å referere til det samme. 256 00:17:06,460 --> 00:17:12,180 Det kan enten være to navn på samme fil eller en fil som har til formål å referere til en annen fil. 257 00:17:12,180 --> 00:17:17,550 De kalles harde og symbolske lenker. Vi vil ikke gå inn i det lenger i dag. 258 00:17:17,550 --> 00:17:21,619 Det kan også være egne filer - en fil sh, en fil Bash - 259 00:17:21,619 --> 00:17:23,880 men de begge kjører Bash. 260 00:17:23,880 --> 00:17:29,350 Så er det en annen kvalifiseringskamp her. 261 00:17:29,350 --> 00:17:42,640 Hvis du ringer ett av disse skjellene med ett navn, 262 00:17:42,640 --> 00:17:46,640 du kanskje tror du ville få samme funksjonalitet som å kalle det med et annet navn. 263 00:17:46,640 --> 00:17:49,700 Vel, som faktisk er ikke nødvendigvis sant. 264 00:17:49,700 --> 00:17:55,020 Disse kommandoene kan undersøke navn etter de ble kalt 265 00:17:55,020 --> 00:18:00,020 og de kan, på grunnlag av dette navnet, oppfører seg forskjellig. 266 00:18:00,020 --> 00:18:02,740 Det kan være problemer med å prøve å samsvare med en standard. 267 00:18:02,740 --> 00:18:06,060 Noen av dere har kanskje hørt om POSIX-standarden eller en annen, 268 00:18:06,060 --> 00:18:08,730 kanskje andre funksjoner. 269 00:18:08,730 --> 00:18:14,520 Dette kan velges noen ganger av kommandolinjeargumenter 270 00:18:14,520 --> 00:18:17,310 eller ved å sette skall-variabler. 271 00:18:17,310 --> 00:18:22,170 Kaller det som sh eller bash kan faktisk føre til en annen utførelse 272 00:18:22,170 --> 00:18:25,300 selv om det er den samme filen som du utfører. 273 00:18:25,300 --> 00:18:31,800 En annen ting å vurdere er at selv om en annen datamaskin har tcsh eller Bash, 274 00:18:31,800 --> 00:18:35,310 hvis de ikke er lenket til slik de er på din lokale maskin 275 00:18:35,310 --> 00:18:37,990 hvis du har et Linux eller Mac OS lokal datamaskin, 276 00:18:37,990 --> 00:18:45,630 så igjen vil du få skallet som du kaller sh eller csh, ikke den som du kanskje foretrekke. 277 00:18:50,430 --> 00:19:01,130 Den nåværende Bourne skallet har forbedringer mindre enn de i Bash 278 00:19:01,130 --> 00:19:06,100 men forbi de i den opprinnelige Bourne skallet. 279 00:19:06,100 --> 00:19:09,690 Som et resultat av dette, selv dagens Bourne skall, sh, 280 00:19:09,690 --> 00:19:14,560 selv når det ikke er Bash, ligner på C-språk mer enn C-shell gjør. 281 00:19:14,560 --> 00:19:20,460 Det var ikke sant da C-skallet først ble opprettet, men det har utviklet den måten. 282 00:19:20,460 --> 00:19:26,560 Du legger kanskje merke her at alle disse skall navn unntatt for Bourne shell 283 00:19:26,560 --> 00:19:30,640 har noe å indikere hvilket skall de er - csh, bash - 284 00:19:30,640 --> 00:19:32,550 men Bourne skall er bare sh. 285 00:19:32,550 --> 00:19:34,910 Hvorfor? Det var det opprinnelige skall. 286 00:19:34,910 --> 00:19:37,770 Det var skallet da, ikke et skall, 287 00:19:37,770 --> 00:19:41,090 og siden det var skallet, var det ingen grunn til å skille det fra et annet skall. 288 00:19:41,090 --> 00:19:45,030 Så det er derfor det har det navnet og gjør det fremdeles. 289 00:19:50,630 --> 00:19:58,990 >> Denne toppen her er en linje fra en passorddatabasen for en konto jeg har det 290 00:19:58,990 --> 00:20:01,680 på en annen datamaskin. 291 00:20:01,680 --> 00:20:08,300 Jeg kommer til å prøve å få det navnet, slik at du kan se at en del på slutten, skallet. 292 00:20:09,720 --> 00:20:15,450 Passordet database inneholder påloggings egenskaper for alle brukerne. 293 00:20:15,450 --> 00:20:20,330 I begynnelsen er brukernavnet, som du kan se de siste to bokstavene av meg nå. 294 00:20:20,330 --> 00:20:23,970 Feltene her er atskilt med kolon. 295 00:20:23,970 --> 00:20:28,210 Den siste feltet, som du kan se, er bin / tcsh, skallet. 296 00:20:28,210 --> 00:20:30,230 Det er skallet angivelse. 297 00:20:30,230 --> 00:20:33,240 Det er noe interessant her. 298 00:20:33,240 --> 00:20:36,950 Når Unix ble først utviklet, var det bare ett skall, 299 00:20:36,950 --> 00:20:38,350 så det var ikke noe valg der. 300 00:20:38,350 --> 00:20:45,570 Så hvorfor gjorde de tillater et felt i passorddatabasen for å angi et skall? 301 00:20:45,570 --> 00:20:47,920 Jeg vet ikke, men det er heldig at de gjorde. 302 00:20:47,920 --> 00:20:52,030 Det er ganske vanskelig å gjøre endringer i passorddatabasen format 303 00:20:52,030 --> 00:20:54,420 fordi mange programmer refererer til sitt format 304 00:20:54,420 --> 00:20:57,720 og måtte skrives om. 305 00:20:57,720 --> 00:21:04,130 Det er en treffende eller tilfeldig utvikling at de inkluderte dette feltet. 306 00:21:04,130 --> 00:21:12,780 Den slags passord fillinjen brukes på alle Unix-og Linux-maskiner, så vidt jeg vet. 307 00:21:12,780 --> 00:21:14,650 Mac har sitt eget system. 308 00:21:14,650 --> 00:21:17,810 Den har faktisk en passordfilen med linjene i dette formatet, 309 00:21:17,810 --> 00:21:21,060 men det er ikke der bruksegenskaper er definert. 310 00:21:21,060 --> 00:21:24,200 En annen parentes bemerkning der. 311 00:21:36,470 --> 00:21:46,020 >> Hvis du ringer et skall, kan du kalle det som en sub-skall av dine eksisterende skjell. 312 00:21:46,020 --> 00:21:50,480 Så hvis jeg går her, la oss bli kvitt disse tingene. 313 00:21:50,480 --> 00:21:53,350 Her er jeg i C-skall. 314 00:21:56,830 --> 00:22:01,200 Den variabelen, som nøyaktig identifiserer skallet mitt, 315 00:22:01,200 --> 00:22:04,300 faktisk er ikke alltid en pålitelig måte å avgjøre hva skall du kjører, 316 00:22:04,300 --> 00:22:06,220 men i dette tilfellet er det. 317 00:22:06,220 --> 00:22:08,040 Hva hvis jeg bare skriver - 318 00:22:09,970 --> 00:22:12,470 Nå er jeg i Bash. 319 00:22:12,470 --> 00:22:19,540 Noen ting kommer til å være den samme. ls forteller meg mine kommandoer. 320 00:22:19,540 --> 00:22:24,500 Hvis jeg en suspendere tilbake til min C-skall, ls, samme. Høyre? 321 00:22:24,500 --> 00:22:28,890 fg, forgrunn, tilbake til min Bash shell. 322 00:22:28,890 --> 00:22:38,290 pwd, gjeldende katalog, tilbake til C-skall. 323 00:22:38,290 --> 00:22:43,180 pwd, annen katalog - faktisk ikke en annen katalog i dette tilfellet. 324 00:22:43,180 --> 00:22:45,110 Det er den samme katalogen. 325 00:22:45,110 --> 00:22:50,000 La oss si at jeg vil kalle en kommando her: Hvor ls. 326 00:22:50,000 --> 00:22:52,140 Hva gjør det? 327 00:22:52,140 --> 00:22:53,670 Det forteller meg hvor ls kommando, 328 00:22:53,670 --> 00:22:56,670 den som gir meg en katalogoppføring, ligger i ls. 329 00:22:56,670 --> 00:23:01,460 La oss gå tilbake til Bash shell. La oss prøve det samme. 330 00:23:01,460 --> 00:23:05,830 Hmm, interessant det der: kommando ikke funnet. 331 00:23:05,830 --> 00:23:07,400 Hvorfor er det? 332 00:23:07,400 --> 00:23:11,570 Den der kommando er innebygd i C-skall. 333 00:23:11,570 --> 00:23:15,630 Dette er ikke en kommando som må leses inn i minnet fra et annet sted og henrettet. 334 00:23:15,630 --> 00:23:20,310 Den C-shell går det ved å overføre utførelsen til en del av sin egen kode 335 00:23:20,310 --> 00:23:22,790 og det er ikke i Bash shell. 336 00:23:22,790 --> 00:23:25,710 Så Bash, ikke å ha en slik innebygd kommando, ser for det, ikke finner det, 337 00:23:25,710 --> 00:23:27,720 og vi får en feilmelding. 338 00:23:27,720 --> 00:23:32,290 Så der har vi et bash shell som kjører under et C-shell, og vi kaller det en sub-skall. 339 00:23:32,290 --> 00:23:38,480 Og bare i tilfelle du er nysgjerrig, har Bash shell sin egen måte å finne kommandoer. 340 00:23:38,480 --> 00:23:42,590 utydeliggjort refererer til det faktum at den kan kjøres hurtigere, 341 00:23:42,590 --> 00:23:44,960 blir funnet raskere. 342 00:23:44,960 --> 00:23:48,610 Det er en av forbedringene er innebygd i noen av disse skjellene. 343 00:23:50,220 --> 00:23:54,200 >> Bourne-type skjell er å foretrekke for programmering. 344 00:23:54,200 --> 00:23:57,300 De har kontrollstrukturer som loops, betinget utsagn, 345 00:23:57,300 --> 00:24:00,240 slags kommandoer som du kan bruke i programmeringsspråk som C 346 00:24:00,240 --> 00:24:04,190 eller hva språk. Kanskje du programmere i Java eller hva. 347 00:24:04,190 --> 00:24:06,460 Skjell har dem også. 348 00:24:06,460 --> 00:24:11,790 De Bourne-type skjell, spesielt Bash, har mer 349 00:24:11,790 --> 00:24:15,730 og de er utformet med større fleksibilitet. 350 00:24:15,730 --> 00:24:20,700 The Bash skallet har arrays. Den opprinnelige Bourne shell ikke. 351 00:24:20,700 --> 00:24:26,130 Slik som kan være betydelig fordel for programmering. 352 00:24:26,130 --> 00:24:29,810 Den C-shell faktisk ikke har arrays, men har ikke mange av disse andre funksjoner. 353 00:24:29,810 --> 00:24:33,450 De Bourne-type skjell vil kjøre fortere 354 00:24:33,450 --> 00:24:36,520 hvis de ikke har de egenskaper som er ment for interaktiv bruk. 355 00:24:36,520 --> 00:24:39,340 Du laster ned ting for ett formål, og dette laster dem ned for et annet formål. 356 00:24:39,340 --> 00:24:41,520 Det er som trade-off der. 357 00:24:41,520 --> 00:24:44,510 De funksjoner som er beregnet for interaktiv bruk 358 00:24:44,510 --> 00:24:46,920 egentlig er av liten eller ingen bruk for skripting. 359 00:24:46,920 --> 00:24:52,160 Det er mulig å bruke en interaktiv sub-skall akkurat som den jeg startet der 360 00:24:52,160 --> 00:24:57,780 å teste ut kommandoer som du har tenkt å bruke i et skript. 361 00:24:57,780 --> 00:25:01,180 Det er det du ikke kan gjøre med perl. Du kan gjøre det med skjell. 362 00:25:01,180 --> 00:25:04,850 Selv de strukturer som for loops og så videre kan kjøres interaktivt. 363 00:25:04,850 --> 00:25:07,000 De er tidvis nyttig å kjøre interaktivt, 364 00:25:07,000 --> 00:25:10,180 men mer sannsynlig at du bruker dem til å utvikle et manus. 365 00:25:15,690 --> 00:25:17,400 >> Aliaser. 366 00:25:17,400 --> 00:25:21,630 Dette kommer til å være om C-skall. 367 00:25:23,270 --> 00:25:27,570 Historie mekanisme hvor du kommer tilbake til tidligere kommandoer 368 00:25:27,570 --> 00:25:30,340 eller deler av dem som du har allerede kjørt. 369 00:25:30,340 --> 00:25:33,680 Igjen, om C-skall, Bourne Shell og Korn skallet har disse tingene, 370 00:25:33,680 --> 00:25:35,620 men jeg har ikke tenkt å komme inn i dem. 371 00:25:35,620 --> 00:25:40,340 Så her er noen nyttige aliaser som jeg har. 372 00:25:43,100 --> 00:25:44,880 I stedet for å skrive ls - det er en felles kommando - 373 00:25:44,880 --> 00:25:47,620 bare skriv l og spare deg selv en karakter. 374 00:25:47,620 --> 00:25:50,600 ls med ulike alternativer, alle dem arbeid. 375 00:25:50,600 --> 00:25:54,460 Vær oppmerksom på at disse definisjonene har anførselstegn rundt dem. 376 00:25:54,460 --> 00:25:57,520 I disse tilfellene, sitatene er ikke nødvendig. 377 00:25:57,520 --> 00:26:00,100 Hvis du kan definere disse aliaser uten anførselstegn, vil det fortsatt fungere. 378 00:26:00,100 --> 00:26:02,910 De er anbefalt. 379 00:26:02,910 --> 00:26:04,900 Det finnes situasjoner der du ikke kan bruke sitatet 380 00:26:04,900 --> 00:26:08,050 fordi du vil at noe skal skje som sitatet ville forhindre. 381 00:26:08,050 --> 00:26:11,210 Noen ganger kan du sitere en del av definisjonen, men ikke alle av det. 382 00:26:11,210 --> 00:26:17,010 Det er også generelt anbefalt å bruke apostrof i stedet for anførselstegn. 383 00:26:17,010 --> 00:26:19,750 Anførselstegn ha effekter på variabeldefinisjoner, 384 00:26:19,750 --> 00:26:22,950 særlig slik at de skal evalueres i stedet for å stoppe det. 385 00:26:22,950 --> 00:26:25,910 Hvorfor skulle vi ønske å stoppe evalueringen? 386 00:26:25,910 --> 00:26:28,710 Og hvordan gjør sitater gjøre det for oss? 387 00:26:28,710 --> 00:26:32,600 >> Her er en kommando som du kan finne interessant. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, som du sikkert vet, er et wildcard uttrykk 390 00:26:37,640 --> 00:26:40,290 for alle filnavn som begynner med g. 391 00:26:40,290 --> 00:26:46,410 Hvis jeg bare skrive inn en kommando ls g *, vil jeg få en liste over alle disse navnene i min nåværende katalog. 392 00:26:46,410 --> 00:26:50,870 Hvis jeg definerer som alias som det er her med sitater, 393 00:26:50,870 --> 00:26:56,990 det vil kjøre denne kommandoen i din nåværende katalog hvor du kjører den. 394 00:26:56,990 --> 00:27:01,250 Men hvis du kjører alias definisjon uten anførselstegn, 395 00:27:01,250 --> 00:27:09,620 det vil evaluere wildcard g * når det går denne definere kommando. 396 00:27:09,620 --> 00:27:14,400 Så definisjonen av aliaset vil bli ls etterfulgt av en liste over filer i katalogen 397 00:27:14,400 --> 00:27:16,310 hvori alias kommandoen utføres, 398 00:27:16,310 --> 00:27:19,180 uavhengig av hvor du faktisk har tenkt å kjøre kommandoen. 399 00:27:19,180 --> 00:27:26,360 Dette er ikke for mye bruk, og de apostrof hindre evalueringen av stjernen. 400 00:27:26,360 --> 00:27:30,780 Så får du bare definisjonen vesen ls g *. 401 00:27:30,780 --> 00:27:35,510 Så når du kjører alias, LGS, så sier det det ut. 402 00:27:35,510 --> 00:27:40,490 Nå er det ingen sitater, og det vil evaluere stjerne når du kjører alias kommandoen. 403 00:27:40,490 --> 00:27:43,900 Så det er en ting. 404 00:27:43,900 --> 00:27:46,590 Anførselstegn ville ha den samme effekten her, 405 00:27:46,590 --> 00:27:50,580 men det er andre tilfeller der anførselstegn ikke ville fungere så godt. 406 00:27:50,580 --> 00:27:52,450 >> Her er en annen. 407 00:27:52,450 --> 00:27:54,270 Du kjenner kanskje den grep kommandoen. 408 00:27:54,270 --> 00:28:02,110 Den grep kommandoen kan brukes til å skanne en fil for linjer som har visse strenger. 409 00:28:02,110 --> 00:28:10,350 Så la oss gå over her, og jeg vil gå ut fra min Bourne shell. 410 00:28:23,570 --> 00:28:25,450 Ok. Her er en fil. 411 00:28:25,450 --> 00:28:31,490 La oss si det er grep abc strenger. Det er det. 412 00:28:31,490 --> 00:28:37,930 Hvis jeg gjør grep zddd, jeg får ingenting. Ok. 413 00:28:37,930 --> 00:28:40,960 Så den finner en streng, den rapporterer, det finner ikke, betyr det ikke rapportere det. 414 00:28:40,960 --> 00:28:44,930 Det utganger alle linjer som har som streng på det. 415 00:28:44,930 --> 00:28:49,080 Det er alle slags alternativer her som du finner i dokumentasjonen. 416 00:28:49,080 --> 00:28:52,160 Her er én måte å gjøre det. 417 00:28:52,160 --> 00:29:03,290 Hva med denne, alias grabc 'grep abc'? 418 00:29:03,290 --> 00:29:09,000 Det kommer til å inkludere en argument når alias er definert. 419 00:29:09,000 --> 00:29:26,300 Så hvis jeg gjør det her, nå hvis jeg gjør grabc, 420 00:29:26,300 --> 00:29:30,620 nå aliaset omfatter mer enn den enkle kommandoen. Det har også argumentet. 421 00:29:30,620 --> 00:29:32,190 Så langt som fungerer. 422 00:29:32,190 --> 00:29:38,590 Jeg har en annen kommando her, denne, så de er forskjellige strenger i det 423 00:29:38,590 --> 00:29:46,790 og viser at dette ikke finne noe der siden det ikke samsvarer. 424 00:29:46,790 --> 00:29:56,180 >> Hva om jeg ønsker å inkludere i definisjonen av kallenavnet filen som jeg kommer til å søke 425 00:29:56,180 --> 00:30:02,970 og jeg ønsker å gi som et argument til alias strengen som jeg leter etter? 426 00:30:02,970 --> 00:30:08,040 Jeg vil kanskje si abc som argument til mitt alias, 427 00:30:08,040 --> 00:30:10,870 men aliaset allerede bestemt filen. 428 00:30:10,870 --> 00:30:15,710 Og det er der dette uttrykket kommer i. 429 00:30:20,430 --> 00:30:25,270 Legg merke til her vi har grep akkurat som før. 430 00:30:25,270 --> 00:30:28,130 Vi har filen her, strenger. 431 00:30:28,130 --> 00:30:35,610 \! ^, Slag av en merkelig uttrykk, antar jeg, hvis du ikke har sett dette før. 432 00:30:35,610 --> 00:30:39,920 Utropstegn er en del av C-shell historie mekanisme. 433 00:30:39,920 --> 00:30:45,220 Det kan huske tidligere kommandoer, kan det minnes argumenter til disse kommandoer og så videre. 434 00:30:46,760 --> 00:31:01,570 Historien mekanismen brukes som en del av aliasing. 435 00:31:01,570 --> 00:31:07,390 Hvis du angir en linje etter utropstegn, vil det vise til den linjen i loggen, 436 00:31:07,390 --> 00:31:11,910 som vi ikke vil få inn nå siden det er et helt annet tema. 437 00:31:11,910 --> 00:31:16,280 Det er mulig å angi del av en linje. 438 00:31:16,280 --> 00:31:22,950 So! 03:02 ville være den andre argumentet kommando nummer tre. 439 00:31:22,950 --> 00:31:30,430 Cirkumflekstegnet her i dette uttrykket står for det første argumentet. 440 00:31:30,430 --> 00:31:34,410 Hvis du ikke gir det en indikasjon på hvilken kommando du refererer til, 441 00:31:34,410 --> 00:31:37,300 det refererer til den umiddelbart foregående kommando 442 00:31:37,300 --> 00:31:41,990 og cirkumflekstegnet er et symbol for det første argumentet. 443 00:31:41,990 --> 00:31:46,820 Fordi det er cirkumflekstegnet og ikke antall, trenger du ikke å bruke kolon, 444 00:31:46,820 --> 00:31:52,660 så! ^ betyr det første argumentet til forrige kommando. 445 00:31:52,660 --> 00:31:55,020 Litt blandet opp her. 446 00:31:55,020 --> 00:31:58,450 I dette tilfellet, når du bruker dette som et alias definisjon, 447 00:31:58,450 --> 00:32:04,650 historien referanse refererer tilbake til kommandoene hvori alias brukes. 448 00:32:04,650 --> 00:32:08,470 Så dette kommer tilbake en kommando som en historie drift, 449 00:32:08,470 --> 00:32:11,810 men som et alias operasjon det refererer til den kommandoen som du ville skrive, 450 00:32:11,810 --> 00:32:14,780 si, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Vi har sitatene her i det. Hva er backslash for? 452 00:32:20,240 --> 00:32:30,810 I dette tilfellet, som andre steder, vi ønsker ikke å kjøre historien mekanisme 453 00:32:30,810 --> 00:32:33,680 mens definere alias. 454 00:32:33,680 --> 00:32:37,900 Hvis vi ikke har den backslash der, ville skallet trekke i det første argumentet 455 00:32:37,900 --> 00:32:41,870 av kommandoen rett før den kjørte denne alias kommandoen, som vi ikke ønsker. 456 00:32:41,870 --> 00:32:47,520 Vi ønsker at dette skal bli bygget inn i alias kommandoen til å kalle inn et argument senere. 457 00:32:47,520 --> 00:32:53,550 Apostrof rømmer ikke et utropstegn, historien referanse. 458 00:32:53,550 --> 00:32:57,450 Kanskje du kjenner uttrykket flukt betyr å endre betydningen av noe. 459 00:32:57,450 --> 00:33:00,260 I dette tilfelle betyr den til å slutte noe fra å ha en spesiell betydning. 460 00:33:00,260 --> 00:33:03,030 Utropstegn er spesiell betydning er historie. 461 00:33:03,030 --> 00:33:05,790 Escape og det har ikke det betydning. 462 00:33:05,790 --> 00:33:08,080 Sitater ikke gjør det, backslash gjør. 463 00:33:08,080 --> 00:33:11,900 Så vi faktisk bruker to nivåer av rømmer her. 464 00:33:23,500 --> 00:33:29,620 Jeg kommer til å flytte denne kommandoen inn i det andre vinduet uten å skrive det 465 00:33:29,620 --> 00:33:35,210 ved å bruke disse redigeringsoperasjonene, som du kan finne nyttig. 466 00:33:40,620 --> 00:33:42,460 Noe annet her skal jeg vise deg. 467 00:33:42,460 --> 00:33:46,730 Hvis du bare skriver alias uten argumenter, forteller den deg alle dine argumenter. 468 00:33:46,730 --> 00:33:48,640 Dette er en gjeng med aliaser jeg allerede hadde her 469 00:33:48,640 --> 00:33:53,400 foruten de som jeg har brukt her i dag. 470 00:33:53,400 --> 00:34:00,220 Men hvis jeg bare skriver med navnet på et alias, forteller det meg hva det betyr. 471 00:34:00,220 --> 00:34:03,390 Legg merke til at anførselstegn er borte og backslash er borte. 472 00:34:03,390 --> 00:34:08,620 Denne strengen her er et resultat av at alias definisjon 473 00:34:08,620 --> 00:34:12,199 og nå har det bare! ^ i det. 474 00:34:12,199 --> 00:34:19,150 Dette kommer til å se i filen strenger for noe. 475 00:34:19,150 --> 00:34:34,900 Så hvis jeg gjør grstrings_file strenger, det gjorde jeg ikke gi det noe å se etter det, 476 00:34:34,900 --> 00:34:37,429 men det ser i strenger. 477 00:34:37,429 --> 00:34:42,330 Det fant ikke ordet strenger i filen strenger, men det finne abc. 478 00:34:42,330 --> 00:34:46,770 Og den ikke finner det. 479 00:34:46,770 --> 00:34:52,330 Så her gir vi et argument som treffer inn i definisjonen av alias, 480 00:34:52,330 --> 00:34:55,530 som er satt inn i den. 481 00:34:55,530 --> 00:34:58,540 Det er der dette uttrykket kommer fra. 482 00:34:58,540 --> 00:35:00,240 Du kan bruke mer enn en. 483 00:35:00,240 --> 00:35:03,170 Cirkumflekstegnet er et symbol for det første argumentet. 484 00:35:03,170 --> 00:35:07,510 Hvis du ønsker å bruke et annet argument, ville du da si: to. 485 00:35:07,510 --> 00:35:11,250 Det er ingen spesiell symbol for det andre argumentet. 486 00:35:11,250 --> 00:35:14,790 Og fordi du bruker et tall, ville du må bruke kolon. 487 00:35:14,790 --> 00:35:17,220 Det er imidlertid et annet valg her. 488 00:35:17,220 --> 00:35:21,220 Dollartegnet står for det siste argumentet. 489 00:35:21,220 --> 00:35:23,320 Og fordi dette er et symbol, kan du utelate kolon. 490 00:35:23,320 --> 00:35:25,870 Så det ville være det siste argumentet i listen. 491 00:35:25,870 --> 00:35:27,900 Og det er også den. 492 00:35:27,900 --> 00:35:31,380 Asterisk betyr alt, så dette er den komplette argumentlisten, 493 00:35:31,380 --> 00:35:35,150 og igjen, kan du utelate kolon fordi det er ikke et tall. 494 00:35:36,970 --> 00:35:39,950 Jeg håper dere alle observere alt dette. 495 00:35:39,950 --> 00:35:54,100 >> Historien mekanismen kan gå tilbake til tidligere linjer i loggen. 496 00:35:54,100 --> 00:36:01,370 Du kan gjøre dette i et alias definisjon. 497 00:36:01,370 --> 00:36:02,950 Jeg har aldri sett dette gjort. 498 00:36:02,950 --> 00:36:05,840 Det ville ha effekt av å trekke ut tidligere kommandoer fra loggen 499 00:36:05,840 --> 00:36:08,130 når du utfører alias, som kan være forskjellige kommandoer 500 00:36:08,130 --> 00:36:11,240 avhengig av når og hvor du kjøre den. 501 00:36:11,240 --> 00:36:14,020 Muligens kan det være lurt å trekke ut en slik henvisning 502 00:36:14,020 --> 00:36:15,900 bare for å vite hva en tidligere kommando var. 503 00:36:15,900 --> 00:36:17,280 Jeg har aldri sett dette skje. 504 00:36:17,280 --> 00:36:19,970 Jeg antar at noen kanskje vil, men dette er svært usannsynlig. 505 00:36:19,970 --> 00:36:26,480 Det er en annen ting her. 506 00:36:26,480 --> 00:36:33,060 Hvis du bruker denne historien-typen referanse, 507 00:36:33,060 --> 00:36:38,190 deretter bare argumentene til hvor det er en slik henvisning er brukt. 508 00:36:38,190 --> 00:36:42,180 Hvis du har et alias definisjon som ikke bruker en historie-typen referanse, 509 00:36:42,180 --> 00:36:44,060 hvis det bare blir begynnelsen av kommandoen 510 00:36:44,060 --> 00:36:46,520 og du har flere argumenter, så alt du skriver etter at 511 00:36:46,520 --> 00:36:48,450 vil bli lagt til kommandoen. 512 00:36:48,450 --> 00:36:52,040 I dette tilfellet er et eksempel I ga bare der, benyttet vi det første argumentet; 513 00:36:52,040 --> 00:36:54,610 vi brukte ikke alle andre. 514 00:36:54,610 --> 00:36:57,960 Hvis andre argumenter hadde blitt gitt på kommandolinjen, ville de ikke brukes. 515 00:36:57,960 --> 00:37:04,630 Så hvis du bruker historien referansen i det hele tatt, så du må bruke den til å få noe argument. 516 00:37:04,630 --> 00:37:11,310 >> Det er en annen ting her jeg vil bare nevne, delvis i parentes, 517 00:37:11,310 --> 00:37:15,250 nemlig at denne historien mekanismen med utropstegn 518 00:37:15,250 --> 00:37:18,010 går tilbake til den opprinnelige C-skall. 519 00:37:18,010 --> 00:37:27,060 Den tcsh innført historie operasjoner 520 00:37:27,060 --> 00:37:30,910 som bruker den slags kommandoer og strenger fra redaktørene, 521 00:37:30,910 --> 00:37:33,650 enten Emacs eller vi. 522 00:37:33,650 --> 00:37:36,430 Min personlige mening er Emacs er mye enklere å bruke til dette formålet 523 00:37:36,430 --> 00:37:39,390 selv om du bruker vi for din vanlige redigering. 524 00:37:39,390 --> 00:37:43,900 Det finnes ulike kommandoene i Emacs som er nå tilrettelagt for historie. 525 00:37:43,900 --> 00:37:46,410 Kontroll P får den forrige linje i loggen. 526 00:37:46,410 --> 00:37:48,840 En annen kontroll P får du den før det. 527 00:37:48,840 --> 00:37:50,540 Opp-pilen gjør det samme. 528 00:37:50,540 --> 00:37:54,190 Kontroll N blir neste kommando hvis du allerede har rullet tilbake noen måter. 529 00:37:54,190 --> 00:37:55,880 Ned-pilen gjør det også. 530 00:37:55,880 --> 00:38:00,480 Du kan gå til venstre til høyre med piler og diverse andre ting. 531 00:38:00,480 --> 00:38:02,390 Dette kan gjøre bruk av historien mekanisme 532 00:38:02,390 --> 00:38:05,070 mye enklere enn å bruke utropstegn syntaks, 533 00:38:05,070 --> 00:38:07,930 men du ville ikke bruke det i et alias definisjon. 534 00:38:17,780 --> 00:38:20,020 Vi vil gå over det en annen gang. 535 00:38:24,300 --> 00:38:25,810 >> Variabler. 536 00:38:26,880 --> 00:38:29,510 Du vet hva variabler er i programmeringsspråk. 537 00:38:29,510 --> 00:38:31,680 Skallene har dem også. 538 00:38:31,680 --> 00:38:37,350 Den C-shell benytter kommandoen setter å tildele variabler 539 00:38:37,350 --> 00:38:41,360 slik som angir den variable et til verdien av b - 540 00:38:41,360 --> 00:38:46,390 som jeg sa, en ubrukelig definisjon, men en illustrasjon på hvordan dette blir brukt. 541 00:38:48,790 --> 00:38:52,410 Settet kommandoen vil opprette en variabel hvis den ikke finnes allerede. 542 00:38:55,270 --> 00:39:02,490 Posisjon parametere for skall-skript kan betraktes variabler, 543 00:39:02,490 --> 00:39:10,750 men bruken av dem og reglene for dem er noe annerledes. 544 00:39:10,750 --> 00:39:14,320 Du kan ikke tilordne en verdi til $ 1 i løpet av et skript. 545 00:39:14,320 --> 00:39:18,340 Du må definere en ny variabel for dette formålet hvis noen av dere ville. 546 00:39:23,000 --> 00:39:28,470 Skriv satt uten argumenter, og du får en liste over alle definerte variabler. 547 00:39:28,470 --> 00:39:34,220 Og la oss komme over til min andre shell her og se hva vi får hvis vi gjør det. 548 00:39:34,220 --> 00:39:37,110 Ganske lang liste der, ikke sant? 549 00:39:37,110 --> 00:39:40,990 Bla opp litt. Se på alt det. 550 00:39:40,990 --> 00:39:44,330 Noe av dette er definert automatisk av skallet. 551 00:39:44,330 --> 00:39:49,320 Skallet oppretter variabelen og gir det en verdi. 552 00:39:49,320 --> 00:39:52,730 Noen av dem er definert av skallet, men deretter omdefinert av brukeren 553 00:39:52,730 --> 00:39:54,820 ifølge hans preferanser. 554 00:39:54,820 --> 00:39:59,110 Og noen av dem er opprettet av brukeren avhengig av hva han gjør den dagen. 555 00:39:59,110 --> 00:40:01,880 Det er bare satt med noen argumenter. 556 00:40:06,920 --> 00:40:10,050 Det er en merkelig funksjon her på denne tingen. 557 00:40:10,050 --> 00:40:17,980 Det må enten være noen mellomrom mellom likhetstegnet og variabelnavnet 558 00:40:17,980 --> 00:40:23,700 og verdien eller områder på begge sider av likhetstegnet, 559 00:40:23,700 --> 00:40:28,940 som i denne. 560 00:40:35,620 --> 00:40:41,340 Dette vil ikke fungere, og dette faktisk er en gyldig kommando 561 00:40:41,340 --> 00:40:43,390 men det vil ikke gjøre hva du har tenkt. 562 00:40:43,390 --> 00:40:50,070 At kommandoen vil fungere fordi hvis du bare si satt og et variabelnavn 563 00:40:50,070 --> 00:40:54,890 med ingen likhetstegnet eller satt og et variabelnavn med et likhetstegn og ingen verdi, 564 00:40:54,890 --> 00:40:57,770 det vil sette variabelen til en nullverdi. 565 00:40:57,770 --> 00:41:00,120 Så satt en = er en gyldig kommando. 566 00:41:00,120 --> 00:41:04,370 Settet kommandoen kan definere mer enn en variabel på samme linje. 567 00:41:04,370 --> 00:41:11,240 Så denne kommandoen her har effekten av å definere både a og b til null-verdier. 568 00:41:11,240 --> 00:41:13,470 Sannsynligvis ikke hva du ønsker. 569 00:41:13,470 --> 00:41:17,940 Denne her, som nevnt tidligere, vil føre til en feil 570 00:41:17,940 --> 00:41:21,270 fordi = b er ikke et gyldig uttrykk. 571 00:41:21,270 --> 00:41:23,680 Et variabelnavn kan ikke begynne med likhetstegnet. 572 00:41:26,760 --> 00:41:29,080 Og det er disse ytterligere ting her. 573 00:41:29,080 --> 00:41:36,820 Kolon ble brukt til å velge argumenter fra historielinjer, 574 00:41:36,820 --> 00:41:41,210 og de kan brukes - og jeg fikk ikke gå inn før - for å endre disse tingene. 575 00:41:41,210 --> 00:41:44,480 De kan også brukes til å modifisere skall-variabler. 576 00:41:44,480 --> 00:41:49,050 Denne her, $ a har en verdi. 577 00:41:49,050 --> 00:41:55,040 : R vil ta av en utvidelse. 578 00:41:55,040 --> 00:41:57,200 En utvidelse vil være noe etter en prikk, 579 00:41:57,200 --> 00:41:59,200 en prikk og alt etter den på slutten av en fil, 580 00:41:59,200 --> 00:42:03,230 bare på slutten av listen etter den siste skråstreken. 581 00:42:03,230 --> 00:42:05,480 Så jeg har det her. 582 00:42:05,480 --> 00:42:10,730 en er det. Det vil slippe. O. 583 00:42:10,730 --> 00:42:16,510 Hvis det er ingen forlengelse, bare de banenavn etter den siste skråstreken, vil det ikke ha noen effekt. 584 00:42:16,510 --> 00:42:27,480 a: h, som variabel uttrykk, vil ta av det siste elementet i en katalogliste, 585 00:42:27,480 --> 00:42:29,660 igjen, kun etter at den siste skråstreken. 586 00:42:29,660 --> 00:42:33,160 Så / a / b / c blir / a / b, 587 00:42:33,160 --> 00:42:38,870 men dette endres fordi elementet etter at listen er null. 588 00:42:38,870 --> 00:42:43,070 Her er det noe som også jeg ønsker å understreke. 589 00:42:43,070 --> 00:42:46,770 Disse kvalifiseringskamper ikke søke etter forekomster av disse filene. 590 00:42:46,770 --> 00:42:48,910 De bare ser for strykere. 591 00:42:48,910 --> 00:42:54,520 Disse er ment å manipulere filnavn, banenavn, 592 00:42:54,520 --> 00:42:57,520 men de kan brukes på en hvilken som helst streng, selv om det ikke er et filnavn. 593 00:42:57,520 --> 00:42:58,920 Og de ser ikke for eksistensen, 594 00:42:58,920 --> 00:43:03,550 så hvis det ikke finnes en slik fil, / a / b / c, dette vil fortsatt fungere. 595 00:43:03,550 --> 00:43:06,930 Enten det er til noen nytte er et annet spørsmål, men det vil fortsatt fungere. 596 00:43:06,930 --> 00:43:12,850 Variabler er forskjellige i de Bourne skall. Vi får til det senere. 597 00:43:12,850 --> 00:43:18,240 Dollartegn kan rømt akkurat som utropstegn og stjernen. 598 00:43:18,240 --> 00:43:21,760 Dollartegn kan settes inn en omvendt skråstrek eller apostrof. 599 00:43:21,760 --> 00:43:24,790 Anførselstegn har odde effekt i alle skjell 600 00:43:24,790 --> 00:43:28,690 for å tvinge evalueringen av et dollartegn variabel uttrykk. 601 00:43:28,690 --> 00:43:31,960 Så hvis det blir rømt én måte, kan de doble anførselstegnene ha effekt 602 00:43:31,960 --> 00:43:34,380 av dette til å bli vurdert uansett. 603 00:43:34,380 --> 00:43:37,090 Dette er litt forvirrende. 604 00:43:37,090 --> 00:43:43,740 Hvis det finnes flere nivåer av rømme, for eksempel apostrof inne doble anførselstegn 605 00:43:43,740 --> 00:43:46,770 eller doble anførselstegn inni apostrof, bør du teste for å se hva som vil skje 606 00:43:46,770 --> 00:43:49,520 til en variabel hvis du bruker en. 607 00:43:49,520 --> 00:43:53,410 De to situasjoner - dobbel innsiden av singel, singel innsiden av dobbelt - 608 00:43:53,410 --> 00:43:55,980 ikke nødvendigvis gi deg samme resultat. 609 00:44:02,520 --> 00:44:05,600 Miljøvariabler, bundet C-skall-variabler. 610 00:44:05,600 --> 00:44:08,340 Miljøvariabler er også variabler i C-skall, 611 00:44:08,340 --> 00:44:11,250 og de er også variable i andre skjell også. 612 00:44:11,250 --> 00:44:15,230 I C-skall, er de forskjellige settene. 613 00:44:15,230 --> 00:44:18,130 De tingene jeg sa før er om skall-variabler. 614 00:44:18,130 --> 00:44:21,300 Miljøvariabler er et distinkt sett av variabler 615 00:44:21,300 --> 00:44:28,650 med unntak av en rekke variable som vi kaller bundet variabler 616 00:44:28,650 --> 00:44:30,640 som er svært viktig, og vi vil komme inn i de senere. 617 00:44:30,640 --> 00:44:34,950 Miljøvariabler blir automatisk sendt videre 618 00:44:34,950 --> 00:44:41,800 til skjell eller kommandoer som kjøres fra skallet ditt. 619 00:44:41,800 --> 00:44:46,220 De andre tingene er ikke. De skall-variabler, aliasene ikke. Miljøvariabler er. 620 00:44:46,220 --> 00:44:48,630 Det er derfor vi kaller dem miljøvariabler, 621 00:44:48,630 --> 00:44:55,030 tanken er at miljøet strekker seg forbi nettopp din nåværende skall. 622 00:44:55,030 --> 00:45:00,510 De kan brukes til å definere ting for kommandoer. 623 00:45:00,510 --> 00:45:05,470 Her er et eksempel. SKRIVER, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Begge disse variablene kan definere en skriver som en kommando vil bruke til å skrive ut ting. 625 00:45:12,270 --> 00:45:16,500 Hvis du har flere skrivere rundt, kan det være lurt å sette den du liker. 626 00:45:16,500 --> 00:45:21,320 Grunnen til at vi har to variabler er at ulike sett av kommandoer ble skrevet 627 00:45:21,320 --> 00:45:23,870 ved hjelp av disse ulike variablene. 628 00:45:23,870 --> 00:45:25,910 Du kan gi dem forskjellige verdier. 629 00:45:25,910 --> 00:45:28,860 Mest sannsynlig vil du gi dem begge samme verdi. 630 00:45:28,860 --> 00:45:35,840 Disse tingene fungerer fordi de kommandoer som gjør utskrift 631 00:45:35,840 --> 00:45:40,740 ble programmert til å undersøke verdiene av disse variablene. 632 00:45:42,200 --> 00:45:46,150 Hvis et program ikke ble skrevet på den måten, hvis det ble skrevet for å gjøre noe annet, 633 00:45:46,150 --> 00:45:48,280 variabelen ville være irrelevant. 634 00:45:48,280 --> 00:45:52,530 Slik at operativsystemet ikke er på utkikk etter disse variablene 635 00:45:52,530 --> 00:45:55,210 hver gang du refererer til en skriver. 636 00:45:55,210 --> 00:45:59,090 En kommando som gjør utskriften er ute etter disse variablene hvis den er programmert på den måten. 637 00:46:11,030 --> 00:46:15,240 Disse variablene er ofte definert i dine klargjøringsfilene 638 00:46:15,240 --> 00:46:19,440 , men ikke nødvendigvis. 639 00:46:19,440 --> 00:46:21,050 Du kan definere dem på kommandolinjen. 640 00:46:21,050 --> 00:46:24,090 De kan defineres i en kommando. 641 00:46:24,090 --> 00:46:28,740 En kommando som kjører noe kan ha sitt eget utvalg av variabler - 642 00:46:28,740 --> 00:46:32,390 variabler som er unik for en bestemt programvarepakke, for eksempel. 643 00:46:32,390 --> 00:46:36,740 De vil bli definert når du kjører den pakken. 644 00:46:39,690 --> 00:46:42,680 Hvordan er disse variablene gått til en sub-shell? 645 00:46:42,680 --> 00:46:48,210 Når en sub-skall er skrevet, betyr det ikke skrive inn i det området. 646 00:46:48,210 --> 00:46:53,260 Arealet av sub-skall som er viet til miljøvariabler 647 00:46:53,260 --> 00:46:56,450 er ikke skrevet av den sub-skallet, det er skrevet av kopiering. 648 00:46:56,450 --> 00:47:00,530 Når du kjører en vanlig kommando, slik som disse kommandoene til å skrive ut eller hva, 649 00:47:00,530 --> 00:47:03,840 de starter med å lage et nytt skall. 650 00:47:03,840 --> 00:47:06,190 Skallet skaper et skall, og deretter overskriver en del av det 651 00:47:06,190 --> 00:47:08,800 med den kommandoen du kjører, noe som er litt forvirrende, 652 00:47:08,800 --> 00:47:10,740 men det er hvordan disse kommandoene får miljøvariablene 653 00:47:10,740 --> 00:47:14,890 at de deretter referere til senere. 654 00:47:21,920 --> 00:47:28,010 Kommandoen her for å definere den variable setenv. 655 00:47:28,010 --> 00:47:36,470 Det er hvordan du definerer det. Det er tre elementer: setenv, variabel, verdi. 656 00:47:36,470 --> 00:47:44,710 Hvis du bare trenger setenv uten argumenter, hva får du? 657 00:47:47,220 --> 00:47:48,810 En liste over alle disse variablene. 658 00:47:48,810 --> 00:47:53,190 Igjen, det er en fin lang liste, og i dette tilfellet, som i de andre, 659 00:47:53,190 --> 00:47:57,320 disse variablene er definert i stor grad av mitt login drift av skallet selv 660 00:47:57,320 --> 00:47:59,740 snarere enn av noe jeg gjorde. 661 00:47:59,740 --> 00:48:03,580 Det er en annen kommando her, printenv. 662 00:48:07,520 --> 00:48:10,340 Det skriver også ut i miljøet. 663 00:48:10,340 --> 00:48:15,240 Legg merke til denne siste tingen her, redaktør = vi. 664 00:48:15,240 --> 00:48:21,120 Som sier at hvis jeg bruker noe som kaller en redaktør 665 00:48:21,120 --> 00:48:25,530 og jeg ikke angir en redaktør, og det gjør meg valget, kan det gi meg vi. 666 00:48:25,530 --> 00:48:37,280 Hva hvis jeg gjør printenv EDITOR? Det forteller meg hva det er. 667 00:48:37,280 --> 00:48:41,340 Rett før det, det var en variabel, MINST. 668 00:48:41,340 --> 00:48:46,040 Dette er dine mislighold alternativer når jeg kjører jo mindre kommando, 669 00:48:46,040 --> 00:48:49,360 som viser filer. 670 00:48:49,360 --> 00:48:55,910 Så hvis jeg gjør det, kan printenv ta en argument eller 0 argumenter, 671 00:48:55,910 --> 00:48:58,070 ikke mer enn en. 672 00:49:01,800 --> 00:49:05,690 Det er andre kommandoer også, men vi kommer ikke til å komme inn i alt som i dag. 673 00:49:05,690 --> 00:49:11,010 Husk at det var de modifikatorer for skall-variabler som: h, 674 00:49:11,010 --> 00:49:14,350 som vil slippe det siste elementet av et banenavn, 675 00:49:14,350 --> 00:49:17,950 eller: r, som vil slippe en forlengelse. 676 00:49:17,950 --> 00:49:23,110 De som nå gjelder for miljøvariablene også. De gjorde ikke vant til. 677 00:49:23,110 --> 00:49:24,960 Det pleide å være at de ikke kunne bli endret. Nå kan de være. 678 00:49:24,960 --> 00:49:29,190 Det er en av de fremskritt med utviklingen av skjellene i løpet av årene. 679 00:49:29,190 --> 00:49:35,620 Jeg sa at skjellene som en del av de miljøene 680 00:49:35,620 --> 00:49:43,040 og skall-variabler i C-shell er, med noen unntak, forskjellige sett. 681 00:49:43,040 --> 00:49:46,790 Du kan opprette en miljøvariabel og et skall variabel med samme navn. 682 00:49:46,790 --> 00:49:49,220 De vil være forskjellige variable, de kan ha forskjellige verdier. 683 00:49:49,220 --> 00:49:53,090 Å endre verdien av en ikke vil endre verdien av den andre. 684 00:49:53,090 --> 00:49:58,070 Disse variablene er alle vurdert med dollartegnet - $ a, $ uansett. 685 00:49:58,070 --> 00:50:02,340 Så hva om du har dette? Vet du hvilken du får? 686 00:50:02,340 --> 00:50:04,520 I mine tester fikk jeg skallet variabel, 687 00:50:04,520 --> 00:50:07,240 men dette er ikke dokumentert, og du kan ikke stole på det. 688 00:50:07,240 --> 00:50:10,270 Så jeg spør dere, er å skape skall og miljøvariabler 689 00:50:10,270 --> 00:50:13,490 med samme navn en god idé? Nei Ok. 690 00:50:13,490 --> 00:50:17,460 Hva er de viktigste unntakene i hvilke miljø-og skall-variabler 691 00:50:17,460 --> 00:50:19,860 er knyttet til hverandre? 692 00:50:19,860 --> 00:50:27,470 Det er disse fire. 693 00:50:32,030 --> 00:50:35,510 Forbokstav TERM miljøvariabelen, 694 00:50:35,510 --> 00:50:41,540 shell variabel sikt i små bokstaver, type terminalemulering. 695 00:50:41,540 --> 00:50:47,430 Jeg skal bare gå over her, og jeg kommer til å gjøre ekko, en nyttig kommando her, 696 00:50:47,430 --> 00:50:52,560 $ TERM $ sikt. Og der. 697 00:50:52,560 --> 00:51:00,570 xterm er en terminaltype for vinduer vises i X Window System. 698 00:51:00,570 --> 00:51:04,330 xterm-farge er en variant av det som gjør at ulike farger. 699 00:51:04,330 --> 00:51:06,580 Hvorfor vi definerer disse? Hva er dette godt for? 700 00:51:06,580 --> 00:51:09,740 Kommandoer som omorganisere skjermen som redaktør 701 00:51:09,740 --> 00:51:13,680 sende bestemte sekvenser, kalt escape-sekvenser, 702 00:51:13,680 --> 00:51:18,160 til en terminal eller et vindu for å ordne det, og så videre. 703 00:51:18,160 --> 00:51:20,990 Disse sekvenser er forskjellige for forskjellige typer av terminaler. 704 00:51:20,990 --> 00:51:23,100 Dette forteller det hvilke du vil bruke. 705 00:51:23,100 --> 00:51:25,900 Noen ganger er det problemer der. 706 00:51:25,900 --> 00:51:28,600 Du ønsker kanskje å endre det. 707 00:51:28,600 --> 00:51:30,780 Hvis ting ikke fungerer, noen ganger terminaltype er satt feil, 708 00:51:30,780 --> 00:51:36,440 du kan være i stand til å fikse det ved å redefinere begrepet variabel. 709 00:51:36,440 --> 00:51:43,420 I disse tilfellene, endre én variabel, miljøvariabelen eller skallet variabel, 710 00:51:43,420 --> 00:51:45,970 skal forandre den andre. 711 00:51:45,970 --> 00:51:50,970 Jeg har oppdaget gjennom erfaring at endring TERM med blokkbokstaver 712 00:51:50,970 --> 00:51:54,060 endres ikke alltid skall variabel sikt i små bokstaver. 713 00:51:54,060 --> 00:51:55,550 Dette er en bug. 714 00:51:55,550 --> 00:51:59,400 Jeg vet ikke om det er alltid sant. Mesteparten av tiden er det ikke sant, men det kan være. 715 00:51:59,400 --> 00:52:02,490 Så hvis du gjør en endring, bare sjekk det ut. 716 00:52:02,490 --> 00:52:05,830 Det er ikke ofte at du må endre denne verdien, men en gang i en mens du gjør. 717 00:52:05,830 --> 00:52:08,260 Miljø variabel BRUKER. 718 00:52:08,260 --> 00:52:12,070 Igjen, miljø variabel i store bokstaver, shell variabel i små bokstaver. 719 00:52:12,070 --> 00:52:13,710 Dette er ditt brukernavn. 720 00:52:13,710 --> 00:52:16,730 Det er bare under helt spesielle omstendigheter 721 00:52:16,730 --> 00:52:18,420 at du ønsker å endre på det. 722 00:52:18,420 --> 00:52:22,350 Hvis brukernavnet ditt er noen andre, kan det kaste alle slags ting av. 723 00:52:22,350 --> 00:52:26,040 Hjemmekatalog, brukerens hjemmekatalog. 724 00:52:26,040 --> 00:52:28,060 Igjen, ville du ikke ønsker å endre det. 725 00:52:28,060 --> 00:52:32,260 Legg merke til i alle disse tilfellene, og en som vi er i ferd med å dekke, banen variabel, 726 00:52:32,260 --> 00:52:37,070 miljøvariabelen er i store bokstaver, og det bundne shell variabelen er i små bokstaver. 727 00:52:37,070 --> 00:52:39,240 Dersom du endrer en, bør du endre den andre. 728 00:52:39,240 --> 00:52:45,960 Denne typen binding kan ikke etableres som du ikke kan binde to variabler, 729 00:52:45,960 --> 00:52:50,570 andre enn disse fire, og bindingen i disse variablene kan ikke omgjøres, 730 00:52:50,570 --> 00:52:52,090 du kan ikke skille dem. 731 00:52:52,090 --> 00:52:55,820 Så disse fire parene av variablene er bundet. 732 00:52:55,820 --> 00:52:59,020 De alltid vil være. Ingen andre vil være. 733 00:52:59,020 --> 00:53:05,720 I tillegg vil det være mulig å lage variablene med de samme navnene 734 00:53:05,720 --> 00:53:07,780 av de motsatte typer. 735 00:53:07,780 --> 00:53:11,600 Du kan lage et skall variabel sikt i små bokstaver 736 00:53:11,600 --> 00:53:14,990 eller en miljøvariabel begrep i store bokstaver. 737 00:53:14,990 --> 00:53:19,040 Disse variable vil være uavhengig av disse sammenkoblede variablene 738 00:53:19,040 --> 00:53:20,780 og de kan være uavhengige av hverandre. 739 00:53:20,780 --> 00:53:23,780 Jeg kan ikke forestille meg hvorfor du ville gjøre det med mindre du ønsker å forvirre folk. 740 00:53:24,600 --> 00:53:29,730 Denne her, bane variabel, er dette en veldig viktig en. 741 00:53:29,730 --> 00:53:35,550 En annen ting her er at det kan være tilfeller 742 00:53:35,550 --> 00:53:40,430 av variablene med lignende parede navn som ikke er bundet til hverandre. 743 00:53:40,430 --> 00:53:45,000 Det kan være variabler, Shell og skallet, i store og små bokstaver. 744 00:53:45,000 --> 00:53:48,300 Basert på det navnet, vet du ikke om at variabelen er et skall variabel 745 00:53:48,300 --> 00:53:51,580 eller et miljø variabel, og de er ikke bundet til hverandre. 746 00:53:51,580 --> 00:53:55,300 Så den slags sammenkoblede navnene betyr ikke bundet variabler. 747 00:53:55,300 --> 00:53:58,830 Stien variabel, som jeg ble vist før, 748 00:53:58,830 --> 00:54:01,880 er en liste over banenavn hvor skallet ser for kommandoer. 749 00:54:01,880 --> 00:54:12,320 La oss komme over til dette vinduet her, og vi vil gjøre echo $ PATH, store bokstaver - 750 00:54:12,320 --> 00:54:20,230 miljøvariabelen - echo $ banen, små bokstaver - shell variabel. 751 00:54:20,230 --> 00:54:24,980 Legg merke til at listen over kataloger er den samme. Disse er bundet. 752 00:54:24,980 --> 00:54:26,590 Endre en, endrer du den andre. 753 00:54:26,590 --> 00:54:32,970 I miljøvariabelen elementene er atskilt med kolon. Legg merke til det. 754 00:54:32,970 --> 00:54:35,130 De skall-variabler er atskilt med mellomrom. 755 00:54:35,130 --> 00:54:38,760 Denne miljøvariabelen er et enkelt streng. 756 00:54:38,760 --> 00:54:41,480 Skallet variabelen er en matrise. 757 00:54:41,480 --> 00:54:43,490 The Bourne shell hadde ikke arrays. 758 00:54:43,490 --> 00:54:46,600 Bash gjør, men dette er allerede en fast del av skallet. 759 00:54:46,600 --> 00:54:48,660 Dette er en enkelt snor, og ikke en matrise. 760 00:54:48,660 --> 00:54:50,420 Den C-shell alltid hatt arrays. 761 00:54:50,420 --> 00:54:52,630 Arrays er mye lettere å jobbe med. 762 00:54:52,630 --> 00:54:54,400 Du kan referere til deler av den. 763 00:54:54,400 --> 00:55:02,350 Så echo $ bane [1] og jeg får / usr / bin, det første elementet. 764 00:55:02,350 --> 00:55:09,950 Igjen, husk dollartegn står for det siste elementet i historien listen. 765 00:55:09,950 --> 00:55:16,850 Hva skjer der? Den prøvde å finne dollartegn som en variabel symbol. 766 00:55:16,850 --> 00:55:20,850 Jeg unnslippe det. Oops. Det ville ikke ta det heller. 767 00:55:20,850 --> 00:55:23,690 Noen av disse tingene ikke fungerer så godt. 768 00:55:23,690 --> 00:55:28,140 Kanskje vi skal bare la det ut. 769 00:55:28,140 --> 00:55:36,980 Stjernen refererer til hele greia, men det er hva du får hvis du ikke angir et element. 770 00:55:36,980 --> 00:55:46,170 En annen måte som matrisevariabler kan manipuleres, 771 00:55:46,170 --> 00:55:49,500 antall elementer der, 7 elementer. 772 00:55:49,500 --> 00:55:53,410 Her kan vi legge firkanttegn før variabelnavnet. 773 00:55:53,410 --> 00:55:58,280 Her er en annen en. Satt et spørsmålstegn der. 774 00:55:58,280 --> 00:56:03,170 Det er en logisk verdi. Det indikerer at variabelen eksisterer. 775 00:56:03,170 --> 00:56:05,160 Det er en annen måte å jobbe med variabler. 776 00:56:05,160 --> 00:56:06,660 Det, forresten, ikke behøver å være en matrise variabel. 777 00:56:06,660 --> 00:56:08,210 Det kan være noe variabel. 778 00:56:08,210 --> 00:56:11,840 Og hvis jeg gjør det, er det ingen slik variabel, og jeg får en 0. 779 00:56:11,840 --> 00:56:14,990 En annen liten ting der om variable evalueringer. 780 00:56:23,670 --> 00:56:32,950 Tilbake til dette her, hvis noen grunn du ønsket å jobbe med dette 781 00:56:32,950 --> 00:56:37,990 snarere enn å jobbe med matrisen, skallet variabel, 782 00:56:37,990 --> 00:56:41,470 Det er kommandoer som kan skille ut dette basert på tykktarmen. 783 00:56:41,470 --> 00:56:44,080 Faktisk, hvis du kommer til å gjøre dette i bash shell muligens, 784 00:56:44,080 --> 00:56:47,110 noen form for et skript, vil dette være nok hvordan du vil gjøre det. 785 00:56:47,110 --> 00:56:50,350 Men i C-skallet er det mye enklere å bruke matrisen. 786 00:56:50,350 --> 00:56:58,250 I Bourne skall, er variabler tildelt av et enkelt uttrykk som dette, 787 00:56:58,250 --> 00:57:01,760 liker måten du kan tilordne en variabel i et programmeringsspråk, 788 00:57:01,760 --> 00:57:05,110 og her må det være noen mellomrom. 789 00:57:05,110 --> 00:57:09,110 Det er nødvendig at det er bare en streng. 790 00:57:09,110 --> 00:57:14,980 I Bourne-type skjell, alle variabler er skall-variabler. 791 00:57:14,980 --> 00:57:19,250 Miljøvariabler er en undergruppe av skall-variabler. 792 00:57:19,250 --> 00:57:24,060 De skiller seg fra de ikke-miljøvariabler ved å eksportere. 793 00:57:24,060 --> 00:57:28,860 Kommandoen for å gjøre det på er eksport, som eksport SKRIVER. 794 00:57:28,860 --> 00:57:34,930 Hvis vi definerer en slik variabel, 795 00:57:34,930 --> 00:57:38,480 hvis vi ønsket en utskrift kommando for å finne det, måtte det være en miljøvariabel, 796 00:57:38,480 --> 00:57:40,730 og det er hvordan vi gjør det en. 797 00:57:40,730 --> 00:57:42,090 Her er det noe slags forvirrende. 798 00:57:42,090 --> 00:57:50,430 Dette uttrykket, eksport til miljøet, stammer fra denne Bourne shell-konseptet, 799 00:57:50,430 --> 00:57:54,520 og likevel at uttrykket er brukt i beskrivelsen av den C-skall, 800 00:57:54,520 --> 00:57:57,920 der det ikke er noen slik kommando som eksport. 801 00:57:57,920 --> 00:58:06,200 Hvis du bare si eksport av seg selv, får du en liste over eksporteres - 802 00:58:06,200 --> 00:58:10,620 Så hvis jeg bare eksporterer her, ikke noe slikt. 803 00:58:13,620 --> 00:58:15,200 Ok, det vi går. 804 00:58:15,200 --> 00:58:17,010 Disse tingene, forresten, er også definert av skallet. 805 00:58:17,010 --> 00:58:19,400 Jeg gjorde ikke definere noen av disse ved meg selv. 806 00:58:19,400 --> 00:58:23,550 Skallet gjør alle slags ting av seg selv. 807 00:58:23,550 --> 00:58:26,650 Det bør gjøre ting automatisk. 808 00:58:30,240 --> 00:58:36,880 I Bash eller Korn-skall, kan du kjøre en kommando som dette, 809 00:58:36,880 --> 00:58:42,000 som både vil gi en variabel en verdi og eksportere den i en kommando. 810 00:58:42,000 --> 00:58:46,150 I Bourne shell må de være separate kommandoer som eksport en. 811 00:58:46,150 --> 00:58:48,410 Her er et annet aspekt som er forvirrende. 812 00:58:48,410 --> 00:58:52,220 Settet kommandoen i C-skall definerer variabler 813 00:58:52,220 --> 00:58:55,550 og uten argumenter forteller deg hva variablene verdigrunnlag. 814 00:58:55,550 --> 00:59:01,140 I Bash shell, gjør set-kommandoen uten argumenter det samme, 815 00:59:01,140 --> 00:59:03,580 men med argumenter gjør det noe helt annet. 816 00:59:03,580 --> 00:59:06,200 Så dette er de ulike argumentene her. 817 00:59:06,200 --> 00:59:10,460 Noen av disse er variabler, noen av dem er skall-variabler. 818 00:59:10,460 --> 00:59:13,200 Alle av dem er skall-variabler egentlig. Noen av disse er miljøvariabler. 819 00:59:15,690 --> 00:59:23,920 Settet kommando med argumenter kan brukes til å betjene 820 00:59:23,920 --> 00:59:28,220 på de posisjonelle parametre til et skript, 821 00:59:28,220 --> 00:59:33,910 som er en måte å få dem alle samtidig. 822 00:59:33,910 --> 00:59:36,150 Vi kan egentlig ikke gå inn på det i dag. 823 00:59:36,150 --> 00:59:39,580 Den kan også brukes til å endre skall oppførsel. 824 00:59:39,580 --> 00:59:46,700 Spesielt i Bash det er variabler som vil avgjøre hvordan skallet oppfører seg. 825 00:59:46,700 --> 00:59:51,310 Da også bare denne ene kommando som du kan se, denne kommandoen. 826 00:59:51,310 --> 00:59:59,050 Skrivne fulgt av variabler og variabeltyper brukes i Korn og Bash skjell. 827 00:59:59,050 --> 01:00:04,970 Det er ikke obligatorisk, men den kan brukes til å begrense verdiene av variablene 828 01:00:04,970 --> 01:00:08,400 noe som kan være nyttig for å unngå feil, og det er ganske vanlig. 829 01:00:08,400 --> 01:00:11,640 Så jeg bare nevne at dersom du ser den et sted. 830 01:00:17,290 --> 01:00:19,160 Den der kommandoen. 831 01:00:19,160 --> 01:00:22,490 Husker jeg nevnte tidligere hvor kommandoen i C-skall, 832 01:00:22,490 --> 01:00:28,750 som kan fortelle deg plasseringen av en kommando banenavn. 833 01:00:28,750 --> 01:00:32,580 Her er kommando substitusjon. 834 01:00:32,580 --> 01:00:41,900 Du bør finne på tastaturet et sted et tegn som ser ut som dette. 835 01:00:41,900 --> 01:00:44,910 Plasseringen på tastaturet kommer til å variere. 836 01:00:44,910 --> 01:00:47,050 Vi har kalt det backquote. Det er omtrent på størrelse med et sitat. 837 01:00:47,050 --> 01:00:48,720 Det går fra øvre venstre til nedre høyre. 838 01:00:48,720 --> 01:00:52,690 Her på min Mac tastatur det er i øvre venstre hjørne. 839 01:00:52,690 --> 01:00:58,150 Det karakter kan brukes for å utføre en kommando i en kommando. 840 01:00:58,150 --> 01:01:03,400 Hvis du har et uttrykk inne backquotes, 841 01:01:03,400 --> 01:01:07,080 at uttrykket er en kommando, det kjøres. 842 01:01:07,080 --> 01:01:09,010 Utgangssignalet fra den kommandoen 843 01:01:09,010 --> 01:01:11,980 blir deretter byttet ut med hele backquote ekspresjon 844 01:01:11,980 --> 01:01:16,110 inne i en lengre kommando som kjører deretter med at produksjonen 845 01:01:16,110 --> 01:01:22,010 som en del av sin rekke argumenter og så videre. 846 01:01:22,010 --> 01:01:28,640 Her er en kommando som bruker det. 847 01:01:28,640 --> 01:01:32,340 La oss demonstrere operasjonen her. 848 01:01:44,980 --> 01:01:49,090 La oss gå opp her, ta ut backquotes. 849 01:01:49,090 --> 01:01:54,410 Kontroll En får meg til begynnelsen av linjen med Emacs redigering syntaks. 850 01:01:54,410 --> 01:02:00,380 Så langt banenavn er hva der gjør, 851 01:02:00,380 --> 01:02:05,040 men når jeg gjør det slik, så plugger den i den listen over banenavn 852 01:02:05,040 --> 01:02:08,750 i stedet for hele denne backquote uttrykk og kjører ls-l på dem. 853 01:02:08,750 --> 01:02:11,120 Slags praktisk, ikke sant? 854 01:02:11,120 --> 01:02:14,860 Så det er en fin ting. Det er slik backquotes fungerer. 855 01:02:14,860 --> 01:02:17,560 Nå la oss gå ned litt lenger. 856 01:02:17,560 --> 01:02:22,050 Dette er aliaser. Jeg faktisk bruker disse. 857 01:02:22,050 --> 01:02:26,410 Jeg skal prøve å få dette inn med en redigeringsoperasjon. 858 01:02:34,900 --> 01:02:36,900 Ok. 859 01:02:36,900 --> 01:02:39,630 La oss nå se hvordan disse definisjonene kom ut. 860 01:02:39,630 --> 01:02:44,930 alias LHB fortelle meg hvordan det er definert. 861 01:02:44,930 --> 01:02:51,210 Legg merke til det er nettopp dette, men de ytre sitater har blitt tatt av 862 01:02:51,210 --> 01:02:53,750 og utropstegnet er tatt av. 863 01:02:53,750 --> 01:02:58,940 ! *, Komplett liste over alle argumentene. 864 01:02:58,940 --> 01:03:03,580 I et alias definisjon vil det gjelde tilbake til der jeg bruker dette. 865 01:03:03,580 --> 01:03:10,620 LHB ksh bash. Ok. 866 01:03:10,620 --> 01:03:13,960 Se hvordan det fungerer? Det sparer meg noen skrive. 867 01:03:13,960 --> 01:03:16,440 La oss gå opp litt bare for å nevne noe annet her. 868 01:03:19,150 --> 01:03:23,120 Legg merke til her disse ulike skjell. Jeg burde ha nevnt dette før. 869 01:03:23,120 --> 01:03:36,060 Den csh har en to over her og det gjør / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Vi kunne etablere på andre måter at de er faktisk den samme filen. 871 01:03:39,870 --> 01:03:43,150 Husker jeg sa hvis du skriver sh du få bash. 872 01:03:43,150 --> 01:03:47,390 Skriv inn denne og du får dette. 873 01:03:47,390 --> 01:03:51,730 Men de som ikke er koblet sammen. De har enkle som er der. 874 01:03:51,730 --> 01:03:54,910 Og dette er ikke den type fil som kan kalle en annen. 875 01:03:54,910 --> 01:03:59,460 Så de er separate filer, C-skall som er den samme filen. 876 01:03:59,460 --> 01:04:03,640 Tilbake her nede, den andre her, dette aliaset, 877 01:04:03,640 --> 01:04:09,090 merk som kjører denne kommandoen, fil. 878 01:04:09,090 --> 01:04:13,810 At alias går det. Filen forteller deg hvilken type en fil. 879 01:04:13,810 --> 01:04:20,330 Så FWH ksh bash. Ok. 880 01:04:20,330 --> 01:04:23,230 Det er resultatet av filen kommandoen. 881 01:04:23,230 --> 01:04:24,630 Jeg vet ikke om du vet hva dette betyr her, 882 01:04:24,630 --> 01:04:26,750 Mach-O Universal Binary med to arkitekturer. 883 01:04:26,750 --> 01:04:30,470 Det finnes to mulige typer prosessor i Mac, 884 01:04:30,470 --> 01:04:34,780 og enkelte programmer ble skrevet for å være i stand til å kjøre med begge, 885 01:04:34,780 --> 01:04:37,950 og filen kommandoen kan bestemme det, så det er hva dette betyr. 886 01:04:37,950 --> 01:04:40,660 Begge disse filene ble skrevet på den måten. 887 01:04:40,660 --> 01:04:43,760 Så vi ser hvordan alias fungerer, ser vi hvordan backquote fungerer, 888 01:04:43,760 --> 01:04:48,640 vi se hvordan selve filen ls eller fil fungerer. 889 01:04:52,050 --> 01:04:57,000 Dette kan ikke fungere. Prøv "der hvor" og "LHB der". Ok, la oss prøve det. 890 01:04:57,000 --> 01:05:01,040 der hvor. 891 01:05:01,040 --> 01:05:03,500 der er et skall innebygd. 892 01:05:03,500 --> 01:05:06,970 Husker vi viste at Bash ikke hadde der. 893 01:05:06,970 --> 01:05:10,080 Hvis du skriver hvor i Bash shell, får du en feilmelding. 894 01:05:10,080 --> 01:05:12,540 Det er bare en del av skallet i stedet for å være en separat kommando. 895 01:05:12,540 --> 01:05:20,000 Hva skjer hvis jeg skriver LHB leter etter der? Se hva som skjer der. 896 01:05:20,000 --> 01:05:22,850 Ran hvor der, fikk denne utgangen, og deretter prøvde å kjøre ls 897 01:05:22,850 --> 01:05:25,600 som l på hvor er et skall innebygd. 898 01:05:25,600 --> 01:05:28,790 hvor er det, men de andre som ikke eksisterer. 899 01:05:28,790 --> 01:05:32,090 Ingen av disse eksisterer, faktisk. 900 01:05:32,090 --> 01:05:35,560 Så det fungerer ikke alltid, og det også illustrerer hvordan noen ting 901 01:05:35,560 --> 01:05:39,580 gjør ikke helt hva du kanskje har trodd. 902 01:05:40,930 --> 01:05:43,010 La oss gå ned litt lenger her. 903 01:05:44,890 --> 01:05:54,760 Dette her er i Bash. Det er også kommandoen substitusjon som backquote. 904 01:05:54,760 --> 01:06:05,280 Men i motsetning til backquote, bruker den denne variabelen stil. 905 01:06:05,280 --> 01:06:09,860 Det finnes en rekke uttrykk som begynner med et dollartegn, 906 01:06:09,860 --> 01:06:16,070 og mens disse er ikke variabler, lånte de bruk av dollartegn 907 01:06:16,070 --> 01:06:19,570 å indikere et uttrykk av noe slag. 908 01:06:19,570 --> 01:06:23,550 Det kan være omgitt av parenteser eller braketter eller doble parenteser, 909 01:06:23,550 --> 01:06:26,320 som har et annet formål. 910 01:06:26,320 --> 01:06:29,500 Enkelt parentes her er en kommando substitusjon akkurat som backquotes. 911 01:06:29,500 --> 01:06:32,720 Doble parentes er faktisk en aritmetisk operasjon. 912 01:06:32,720 --> 01:06:35,380 Det er andre syntaks, andre operasjoner. 913 01:06:35,380 --> 01:06:41,520 Backquote syntaks er tilgjengelig i Bash. 914 01:06:41,520 --> 01:06:46,780 Dette er imidlertid en foretrukket. Det er mye lettere å lese, og det gjør at hekkende. 915 01:06:46,780 --> 01:06:51,300 Du kan ha inne $ (kommando) en annen kommando, 916 01:06:51,300 --> 01:06:54,590 noe sånt som - 917 01:07:14,560 --> 01:07:18,210 Jeg får en liste der. 918 01:07:18,210 --> 01:07:21,670 Det ville fungere hvis jeg hadde backquote også. 919 01:07:32,050 --> 01:07:38,470 Hva om jeg ønsker å gjøre noe sånt - 920 01:08:03,390 --> 01:08:06,430 Du har sannsynligvis ikke ville faktisk bruke denne kommandoen, 921 01:08:06,430 --> 01:08:14,160 men denne interne kommando substitusjon ekko navnene på alle filer som begynner med en, 922 01:08:14,160 --> 01:08:18,229 så dette går ls-l på disse filene, 923 01:08:18,229 --> 01:08:20,500 og deretter dette bare ekko utgang. 924 01:08:21,729 --> 01:08:24,479 Du har sannsynligvis ikke ville gjøre dette, du vil bare gjøre ekkoet eller ls, 925 01:08:24,479 --> 01:08:29,450 men dette illustrerer hvordan hekkende av kommandoer fungerer. 926 01:08:29,450 --> 01:08:34,380 Så bare en annen funksjon her. 927 01:08:34,380 --> 01:08:37,450  Jeg nevnte dette tidligere, at når du har der i C-skall, 928 01:08:37,450 --> 01:08:42,770 skriver fungerer i Bourne-type skjell for å finne kommandoer. 929 01:08:48,939 --> 01:08:52,270 Innebygde kommandoer, akkurat hva jeg sa der. 930 01:08:52,270 --> 01:08:54,640 Kommandoer er en del av skallet, som hvor. 931 01:08:54,640 --> 01:08:59,880 Når skallet utfører en kommando som ls, finner den det gjennom banen, 932 01:08:59,880 --> 01:09:03,029 finner den i en katalog et sted, 933 01:09:03,029 --> 01:09:05,800 lesninger som i minnet, skaper et nytt skall, 934 01:09:05,800 --> 01:09:08,960 leser kommandoen ls eller hva i skallet 935 01:09:08,960 --> 01:09:11,450 hvor miljøvariabler er allerede plassert, 936 01:09:11,450 --> 01:09:14,000 og da er det overfører kjøringen til det. 937 01:09:14,000 --> 01:09:18,319 Innebygd kommando, er koden for den kommandoen inne i skallet, 938 01:09:18,319 --> 01:09:21,460 slik at skallet bare begynner å utføre en del av sin egen kode. 939 01:09:21,460 --> 01:09:24,569 der er en slik kommando. Det blir faktisk raskere. 940 01:09:24,569 --> 01:09:28,380 Det trenger ikke å lese noe i minnet, det er allerede i minnet. 941 01:09:28,380 --> 01:09:32,460 Innebygde kommandoer alltid gå foran kommandoer med samme navn. 942 01:09:32,460 --> 01:09:36,050 Kommandoer som er i kataloger i banen kan ha samme navn, 943 01:09:36,050 --> 01:09:39,090 kommandoer i ulike kataloger, filer i ulike kataloger. 944 01:09:39,090 --> 01:09:41,740 Den ene som oppstår tidligere i banen er det du får. 945 01:09:41,740 --> 01:09:43,770 Hvis det er en innebygd kommando, får du alltid det. 946 01:09:43,770 --> 01:09:47,890 Det er ingen måte å gi den en lavere prioritet enn en kommando i banen. 947 01:09:47,890 --> 01:09:54,140 Hvis du ønsker å få den veien kommando, kan du skrive inn fullstendig bane. 948 01:09:54,140 --> 01:09:55,850 Hvis det var en kommando hvor i banen et sted, 949 01:09:55,850 --> 01:09:58,440 du kan skrive / bin / hvor og du vil få det. 950 01:09:58,440 --> 01:10:01,800 Hvis du ikke ønsker å skrive hele banenavnet, kan du definere et alias. 951 01:10:01,800 --> 01:10:06,310 Faktisk, hvis du ga aliaset det samme navnet som den innebygde kommandoen, ville det fungere 952 01:10:06,310 --> 01:10:08,790 fordi definisjonen av kallenavnet evalueres 953 01:10:08,790 --> 01:10:13,220 før skallet fastslår at det er en innebygd kommando som skal utføres. 954 01:10:18,810 --> 01:10:23,440 Så dette blir litt mer komplisert med noen kommandoer her. 955 01:10:23,440 --> 01:10:29,880 Tilfellet med noen kommandoer er faktisk innebygde kommandoer og i banen. 956 01:10:29,880 --> 01:10:34,140 En av dem er ekko, kommandoen jeg bare brukt en liten stund siden i disse eksemplene. 957 01:10:34,140 --> 01:10:37,410 Echo er en kommando i banen, og det er i hvert skall. 958 01:10:37,410 --> 01:10:40,580 De trenger ikke nødvendigvis alle oppfører seg på samme måte. 959 01:10:40,580 --> 01:10:42,970 Det var opprinnelig en kommando bare i banen. 960 01:10:42,970 --> 01:10:45,280 Den ble bygget i til skjellene senere. 961 01:10:45,280 --> 01:10:48,080 Fordi det finnes alternativer som er avhengig av miljøet 962 01:10:48,080 --> 01:10:52,970 og kommandolinjealternativene, de innebygde kommandoer 963 01:10:52,970 --> 01:10:57,030 ble skrevet for å virke på samme måte som kommandoen som hadde vært i banen 964 01:10:57,030 --> 01:10:59,670 det er usannsynlig at de ville ha blitt skrevet på den måten 965 01:10:59,670 --> 01:11:01,720 hvis kommandoen ikke allerede hadde blitt skrevet for banen. 966 01:11:01,720 --> 01:11:06,180 Så dette har bivirkninger. Dens historie har effekter her. 967 01:11:06,180 --> 01:11:08,380 Det finnes alternativer der. 968 01:11:14,280 --> 01:11:23,060 Det er også et alternativ definert av en variabel i tcsh kalt echo_style. 969 01:11:23,060 --> 01:11:27,700 Det er en av disse variablene som kan endre måten som ekko fungerer. 970 01:11:27,700 --> 01:11:30,910 Det finnes andre tilfeller hvor du kan tilordne en variabel 971 01:11:30,910 --> 01:11:36,290 som endrer måten at skallet operasjon, inkludert en innebygd kommando, virker. 972 01:11:36,290 --> 01:11:38,130 Det vil ikke påvirke noe annet 973 01:11:38,130 --> 01:11:40,640 siden andre kommandoer ikke har tilgang til de skall-variabler, 974 01:11:40,640 --> 01:11:42,090 bare miljøvariabler. 975 01:11:42,090 --> 01:11:45,360 Men skall operasjoner kan lese skall-variabler. 976 01:11:45,360 --> 01:11:50,710 Det vil ikke fungere for csh. Det er bare tcsh. Det er en av forbedringene. 977 01:11:58,540 --> 01:12:04,620 Parsing har sekvenser når det evaluerer metategn, 978 01:12:04,620 --> 01:12:08,140 når det evaluerer variabler, aliaser, historie referanser. 979 01:12:08,140 --> 01:12:11,830 Det er en bestemt sekvens for disse tingene. 980 01:12:11,830 --> 01:12:13,730 Hvis den gjør ting i en bestemt rekkefølge 981 01:12:13,730 --> 01:12:16,080 og får til noe som er et uttrykk for en slags 982 01:12:16,080 --> 01:12:20,650 som allerede har blitt evaluert, vil det ikke vurdere det på nytt. 983 01:12:20,650 --> 01:12:24,520 Hvis det blir det, så vil det bare passere på tegnene. 984 01:12:24,520 --> 01:12:29,920 Så hvis evaluering av noen uttrykk som kommando substitusjon 985 01:12:29,920 --> 01:12:36,850 eller variabel eller hva gir opphav til et uttrykk 986 01:12:36,850 --> 01:12:39,240 som du ønsker å bli vurdert, 987 01:12:39,240 --> 01:12:42,510 som vil arbeide bare hvis det evalueringen skjer senere i sekvensen. 988 01:12:42,510 --> 01:12:45,010 Jeg håper jeg blir klar der. 989 01:12:45,010 --> 01:12:50,460 Det parsing sekvens, en operasjon i C-skall, 990 01:12:50,460 --> 01:12:56,490 er ikke det samme for innebygde kommandoer som det er for ikke-innebygde kommandoer. 991 01:12:56,490 --> 01:12:58,890 Jeg er ikke sikker på om Bash der. 992 01:12:58,890 --> 01:13:02,450 For eksempel produseres hvis et skall variabel tidligere referanse, 993 01:13:02,450 --> 01:13:04,230 det sannsynligvis ikke ville gå tilbake i historien. 994 01:13:04,230 --> 01:13:06,010 Det ville bare få utropstegn. 995 01:13:06,010 --> 01:13:08,840 Faktisk kan vi bare prøve det ut akkurat nå. 996 01:13:09,720 --> 01:13:18,240 satt et = og vi må sette dette i det. 997 01:13:30,690 --> 01:13:34,580 Oh, vent. Unnskyld. Jeg gjorde dette i Bash. Jeg ønsket å gjøre det her. 998 01:13:53,470 --> 01:13:56,080 Se, så det gjorde ikke vurdere at historien referanse 999 01:13:56,080 --> 01:14:00,520 fordi det var allerede forbi punktet med å evaluere historie uttrykk 1000 01:14:00,520 --> 01:14:02,720 når det vurderes variabelen. 1001 01:14:02,720 --> 01:14:05,550 Så det er en effekt av parsing. 1002 01:14:05,550 --> 01:14:08,760 Og igjen, er innebygde kommandoer ikke gjort på samme måte. 1003 01:14:08,760 --> 01:14:11,230 OK. La oss gå til den neste her. 1004 01:14:11,230 --> 01:14:16,060 Dette er ment å være en linje, men det gjør det lettere å lese. 1005 01:14:19,130 --> 01:14:21,530 Hva gjør det? 1006 01:14:21,530 --> 01:14:28,640 Du husker kanskje at vi kan evaluere stjernene som filnavn jokertegn, 1007 01:14:28,640 --> 01:14:33,890 og det er andre filnavn wildcards som spørsmålstegn og brakettuttrykk. 1008 01:14:33,890 --> 01:14:39,000 Den slags evaluering kalles jokertegn. 1009 01:14:39,000 --> 01:14:46,290 satt noglob i begynnelsen av denne kommandoen sier ikke gjør det. 1010 01:14:46,290 --> 01:14:53,370 unset noglob sier gå tilbake til å gjøre det. 1011 01:14:53,370 --> 01:14:56,440 Vær oppmerksom på at settet glob ville ikke ha den effekten. 1012 01:14:56,440 --> 01:15:00,800 I vanlig språk, ville sette glob eller unset noglob synes å være tilsvarende, 1013 01:15:00,800 --> 01:15:03,290 men her er det ikke. Det er unset noglob. 1014 01:15:05,120 --> 01:15:07,910 Nå tset. tset sto for terminal sett. 1015 01:15:07,910 --> 01:15:11,840 Det er ikke brukt så ofte nå, men før owing systemer ble tilgjengelig 1016 01:15:11,840 --> 01:15:15,760 og du hadde en enkelt terminal, må du kanskje finne ut hvilken type. 1017 01:15:15,760 --> 01:15:18,700 Og hvis noe skulle komme over et Ethernet eller fra nettverket, 1018 01:15:18,700 --> 01:15:21,120 vil du kanskje si at det er en VT100. 1019 01:15:21,120 --> 01:15:26,630 VT100 er en slags standard i terminalen virksomheten. Den kommer fra desember terminal. 1020 01:15:26,630 --> 01:15:35,270 Hvis du bare gjøre oppringt - Legg merke til at? Dette går tilbake et stykke, ikke sant? 1021 01:15:35,270 --> 01:15:39,520 Så hvis vi bare gjør tset over her, 1022 01:15:39,520 --> 01:15:45,250 hvis jeg bare gjøre tset, er det tilbakestille min terminal, men du fikk ikke se noe. 1023 01:15:45,250 --> 01:15:47,340 Det gjorde egentlig ikke endre noe. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Ok. 1026 01:15:51,480 --> 01:15:53,350 setenv TERM xterm-farge. 1027 01:15:53,350 --> 01:15:57,080 Vi vet allerede at begrepet ble satt på den måten, så det ikke ble endret. 1028 01:15:57,080 --> 01:15:58,860 Det er slik vi ønsker å gjøre det. 1029 01:15:58,860 --> 01:16:07,080 Men legg merke til at denne kommandoen, tset-s, bare utgang disse kommandoene. Det gjorde ikke kjøre dem. 1030 01:16:07,080 --> 01:16:09,770 Det gjorde ikke kjøre disse kommandoene, det utgang dem. 1031 01:16:09,770 --> 01:16:13,650 Så dette er ment for å produsere kommandoer som vil bli kjørt. 1032 01:16:13,650 --> 01:16:16,360 Du husker kommandoen i den filen jeg bare viste du hadde en Q i den. 1033 01:16:16,360 --> 01:16:18,910 Så la oss gjøre det. 1034 01:16:18,910 --> 01:16:23,750 Q undertrykker noen utgang, men det spiller ingen rolle her, som du kan se. 1035 01:16:23,750 --> 01:16:27,980 Jeg bare gjør det for å vise deg at det ikke spilte noen rolle. 1036 01:16:27,980 --> 01:16:31,870 Dette er i backquote syntaks. 1037 01:16:31,870 --> 01:16:35,340 Legg merke til backquote her, backquote her. 1038 01:16:35,340 --> 01:16:37,680 Jeg utelate disse tingene her. 1039 01:16:37,680 --> 01:16:39,570 Dette er tilfeller av å fortelle den hva den skal gjøre 1040 01:16:39,570 --> 01:16:42,050 i tilfelle av visse typer terminaler - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, nettverk, oppringt, hva har du. 1042 01:16:45,400 --> 01:16:48,050 Det spiller ingen rolle her fordi vi ikke faktisk gjør noen av disse tingene. 1043 01:16:48,050 --> 01:16:49,720 Jeg bare illustrerer kommandoen. 1044 01:16:49,720 --> 01:16:55,170 Hvis jeg gjør dette med backquote, hva jeg kommer til å få? 1045 01:16:55,170 --> 01:17:00,210 Legg også merke til her at dette inkluderte settet noglob og usatt noglob, 1046 01:17:00,210 --> 01:17:02,630 Så de er nå overflødige i definisjonen. 1047 01:17:02,630 --> 01:17:05,380 Det var ikke alltid sant, men nå er de tatt med i denne kommandoen. 1048 01:17:05,380 --> 01:17:08,890 Men la oss se hva som skjer hvis jeg gjør det 1049 01:17:08,890 --> 01:17:12,570 og gå til begynnelsen av linjen med kontroll A og jeg gjør det. 1050 01:17:14,380 --> 01:17:18,040 Ok, satt: Kommando ikke funnet. Det er slags merkelig, er det ikke? 1051 01:17:18,040 --> 01:17:20,570 sett er en velkjent kommando. Det er en del av skallet. 1052 01:17:20,570 --> 01:17:24,040 satt: Kommando ikke funnet? Hvorfor er det? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Vel, la oss tenke på dette. 1054 01:17:26,790 --> 01:17:31,100 Det er en backquote kommando substitusjon kjører, 1055 01:17:31,100 --> 01:17:37,430 og som oppstår ved en viss del av sekvensen for analysering av kommandoen. 1056 01:17:37,430 --> 01:17:40,360 sett er en innebygd kommando. 1057 01:17:40,360 --> 01:17:43,900 Så da det gjør at kommando substitusjon, 1058 01:17:43,900 --> 01:17:48,280 det er allerede kommet forbi det punktet av å identifisere innebygde kommandoer. 1059 01:17:48,280 --> 01:17:51,900 Så det behandler satt som om det var en kommando i banen. 1060 01:17:51,900 --> 01:17:55,440 Unødvendig å si, det gjør ikke det, og du får en feilmelding. 1061 01:17:55,440 --> 01:17:59,300 Vel. Det er et eksempel på parsing sekvens. 1062 01:17:59,300 --> 01:18:01,460 Og hva gjør vi med det? 1063 01:18:01,460 --> 01:18:04,800 Legg merke dette veldig interessant kommandoen her, eval. 1064 01:18:04,800 --> 01:18:06,530 Jeg lurer på hva som gjør. 1065 01:18:06,530 --> 01:18:08,760 Hvis du ser på manualen - og la oss bare gjøre det 1066 01:18:08,760 --> 01:18:12,000 å vise hvor forvirrende disse håndbøkene er - 1067 01:18:12,000 --> 01:18:19,400 Mannen tcsh, forvirret manuell, finne ting her er ikke lett heller. 1068 01:18:19,400 --> 01:18:31,850 Here we go, eval arg, slik at vi kan ha en eller flere argumenter 1069 01:18:31,850 --> 01:18:34,090 og det er en liste over ting der. 1070 01:18:34,090 --> 01:18:37,730 Behandler argumenter som innganger til skallet 1071 01:18:37,730 --> 01:18:43,600 og utfører de resulterende kommandoer i forbindelse med den aktuelle skall. 1072 01:18:43,600 --> 01:18:46,900 Dette er vanligvis brukt til å utføre kommandoer generert som følge kommando 1073 01:18:46,900 --> 01:18:51,310 eller variabel substitusjon fordi parsing skjer før disse erstatningene. 1074 01:18:51,310 --> 01:18:52,580 Veldig bra. 1075 01:18:52,580 --> 01:18:54,740 Og her de selv henviser til tset kommandoen for en prøvebruk 1076 01:18:54,740 --> 01:18:57,700 som den jeg bare viste deg. 1077 01:18:57,700 --> 01:19:00,440 Nå må jeg få vinduet tilbake til et nyttig sted. 1078 01:19:03,150 --> 01:19:07,800 La oss komme over her og vi vil se at eval brukes like før det. 1079 01:19:07,800 --> 01:19:14,010 Så la oss se hva som skjer hvis vi legger - her går vi opp med pilene til den kommandoen 1080 01:19:14,010 --> 01:19:20,940 og kontroll A til begynnelsen EVAL. 1081 01:19:20,940 --> 01:19:22,850 Ok, så det fungerer. 1082 01:19:22,850 --> 01:19:26,440 Når du gjør eval, det tar hva som kommer etter det, og gjør det til en kommando. 1083 01:19:26,440 --> 01:19:29,460 Dette gjør at du kan egentlig analysere det to ganger. 1084 01:19:29,460 --> 01:19:33,710 Seksjonen her kjører denne kommandoen inne backquotes, 1085 01:19:33,710 --> 01:19:36,210 blir utgangseffekten. 1086 01:19:36,210 --> 01:19:42,850 Output er ment for å kjøres som disse kommandoene her som disse 1087 01:19:42,850 --> 01:19:45,890 på dette, og denne. 1088 01:19:45,890 --> 01:19:50,100 Så disse kommandoene er nå her i denne sekvensen, 1089 01:19:50,100 --> 01:19:58,950 men disse er innebygde kommandoer, og det kan ikke få dem med en gang. 1090 01:19:58,950 --> 01:20:06,440 Så vi går til eval, plukker eval det opp, starter det hele på nytt, og det fungerer. 1091 01:20:06,440 --> 01:20:18,460 Et eksempel både av backquoting, eval, parsing, konsekvenser av parsing, 1092 01:20:18,460 --> 01:20:21,910 og en kommando som sannsynligvis er av svært liten nytte for deg i dag. 1093 01:20:21,910 --> 01:20:25,540 Ok. Greit, umask. 1094 01:20:25,540 --> 01:20:32,160 La oss se på denne kommandoen her, umask 022. Jeg lurer på hva som gjør. 1095 01:20:32,160 --> 01:20:38,420 La oss bare skriv umask med ingenting etter det. 22. Ok. 1096 01:20:38,420 --> 01:20:44,350 022 og gjøre det igjen. 1097 01:20:44,350 --> 01:20:48,580 Som du kanskje har gjettet, forteller umask uten argumenter du gjeldende maske; 1098 01:20:48,580 --> 01:20:51,760 umask med argumenter gjør det det, men det var den jeg allerede hadde. 1099 01:20:51,760 --> 01:20:53,800 Hva betyr 022 bety? 1100 01:21:01,650 --> 01:21:07,080 Disse er her de beskyttelse for en fil. 1101 01:21:07,080 --> 01:21:11,440 De avgjør hvem som får lov til å lese eller skrive eller kjøre filen. 1102 01:21:11,440 --> 01:21:16,560 Gjerder er også kalt tillatelser. 1103 01:21:16,560 --> 01:21:21,390 R står for read, w for skriving, 1104 01:21:21,390 --> 01:21:25,500 og x, som ikke er til stede der, står for utføre. 1105 01:21:25,500 --> 01:21:27,260 Det er tre kategorier der. 1106 01:21:27,260 --> 01:21:33,540 De siste tre elementene er i kategorien for brukeren. De gjelder for meg, brukeren. 1107 01:21:33,540 --> 01:21:36,870 Disse tre her gjelder for gruppen. 1108 01:21:36,870 --> 01:21:41,590 Filen tilhører en gruppe, kan brukeren høre til flere grupper, 1109 01:21:41,590 --> 01:21:47,150 men hvis brukeren er i gruppen som denne filen tilhører, 1110 01:21:47,150 --> 01:21:51,090 da disse beskyttelsene vil gjelde for ham hvis han ikke er brukeren. 1111 01:21:51,090 --> 01:21:54,230 Og dette er alle andre. 1112 01:21:55,540 --> 01:21:57,690 Disse kategoriene er gjensidig utelukkende. 1113 01:21:57,690 --> 01:21:59,750 Bruker beskyttelse gjelder for ham, 1114 01:21:59,750 --> 01:22:03,780 beskyttelsen gruppen gjelder medlemmer av gruppen andre enn brukeren, 1115 01:22:03,780 --> 01:22:08,110 og de andre beskyttelsene bare gjelde for andre enn brukeren og gruppemedlemmene folk. 1116 01:22:08,110 --> 01:22:12,320 Hvis det er en r eller aw eller en x, betyr det at beskyttelse er gitt. 1117 01:22:12,320 --> 01:22:13,950 Hvis det er en bindestrek, betyr det at det er det ikke. 1118 01:22:13,950 --> 01:22:16,690 Det faktisk er andre ting som kan settes inn her i tillegg til disse, 1119 01:22:16,690 --> 01:22:18,350 som jeg vil ikke komme inn nå. 1120 01:22:18,350 --> 01:22:24,450 Umask definerer en standard for filer som du oppretter. 1121 01:22:24,450 --> 01:22:28,580 Og som en maske, i utgangspunktet står det biter som du ikke satt. 1122 01:22:28,580 --> 01:22:30,450 Hvordan har dette blitt bits? 1123 01:22:30,450 --> 01:22:33,240 Hvis du tenker på hver av disse som et oktaltall, 1124 01:22:33,240 --> 01:22:42,120 dette er den 1s litt, dette er de 2s, dette er de 4s. 1125 01:22:42,120 --> 01:22:45,840 Så 0 til 7 1126 01:22:45,840 --> 01:22:51,770 vil beskrive hvilken kombinasjon av R-er, w-tallet, og x-er du har for disse tre 1127 01:22:51,770 --> 01:22:53,710 og deretter et tilsvarende antall for disse og deretter for disse. 1128 01:22:53,710 --> 01:23:12,030 Så 022 betyr 0 for andre, to for gruppen, to for brukeren. 1129 01:23:12,030 --> 01:23:15,870 Men dette er en maske. Masken er det du ikke har. 1130 01:23:19,380 --> 01:23:20,610 Jeg beklager. Jeg bare ga deg ting i feil rekkefølge. 1131 01:23:20,610 --> 01:23:25,620 Det er den første tre. Disse tre er at brukeren, disse 3 er gruppen, disse 3 er den andre. 1132 01:23:25,620 --> 01:23:27,970 Beklager at jeg ga deg disse i feil rekkefølge. 1133 01:23:27,970 --> 01:23:31,910 Når 0-, som er den første av disse, ikke viser verdien, 1134 01:23:31,910 --> 01:23:35,430 men hvis et tall er ikke der, det er en 0. 1135 01:23:35,430 --> 01:23:38,370 Det betyr at alle tre av disse ville bli tillatt. 1136 01:23:38,370 --> 01:23:41,550 Legg merke til at i denne spesielle én x er ikke tillatt. 1137 01:23:41,550 --> 01:23:44,090 Grunnen er at skallet er i stand til å avgjøre 1138 01:23:44,090 --> 01:23:46,260 om en fil skal utføres eller ikke. 1139 01:23:46,260 --> 01:23:49,800 Siden dette ikke er en kjørbar fil, det gjorde ikke sette x. 1140 01:23:49,800 --> 01:23:54,000 De to virkemidler som skriver tillatelse, den andre kategorien her, 1141 01:23:54,000 --> 01:23:56,500 den ene i midten, er avslått. 1142 01:23:56,500 --> 01:23:58,500 Så igjen, dette er ting som det avslått. 1143 01:23:58,500 --> 01:24:02,080 Vel, er x tillatt, men det er ikke her fordi det er ikke kjørbar 1144 01:24:02,080 --> 01:24:04,260 og tilsvarende for de andre. 1145 01:24:04,260 --> 01:24:08,880 Så det er en felles umask. 1146 01:24:08,880 --> 01:24:14,630 En annen vanlig en er 700 - gi deg selv alt og ingen andre noe. 1147 01:24:14,630 --> 01:24:17,040 Og det finnes andre muligheter. 1148 01:24:21,340 --> 01:24:27,110 Jeg skal gå tilbake til det. Bruke historien jeg kan søke tilbake for det, LHB til det. 1149 01:24:27,110 --> 01:24:30,210 Ok. Så her er det disse skjellene. 1150 01:24:30,210 --> 01:24:36,020 Bash, eieren som er systemkonto, kan gjøre alt. 1151 01:24:36,020 --> 01:24:41,210 Gruppe og alle andre kan gjøre lese eller utføre, men ikke skrive. 1152 01:24:41,210 --> 01:24:44,570 Dette man ikke engang tillater eieren å skrive til den. 1153 01:24:44,570 --> 01:24:46,460 Hvis eieren ønsket å skrive til den, systemkontoen, 1154 01:24:46,460 --> 01:24:48,020 han ville ha til å endre beskyttelsen først. 1155 01:24:48,020 --> 01:24:53,940 Men igjen, setter umask standard ved å maskere det, 1156 01:24:53,940 --> 01:24:57,160 ved å antyde biter som ikke vil bli satt. 1157 01:24:57,160 --> 01:25:04,380 Dette er typisk i en av initialiserings-filer, som er den. Cshrc for C-shell 1158 01:25:04,380 --> 01:25:07,500 eller. profil for Bourne-type skjell. 1159 01:25:07,500 --> 01:25:12,520 Det kan være andre steder også hvis det er andre initialisering filer på systemet. 1160 01:25:12,520 --> 01:25:14,610 Uansett, det er umask. 1161 01:25:14,610 --> 01:25:18,180 Det er noe slags merkelig her, 1162 01:25:18,180 --> 01:25:22,800 og det er, hvorfor er det en enkel kommando for dette? 1163 01:25:22,800 --> 01:25:28,690 Hvis jeg skulle skrive dette, ville jeg gjøre det til en variabel, umask = noen verdi. 1164 01:25:28,690 --> 01:25:31,100 Hvorfor er det en hel kommando bare for dette formålet? 1165 01:25:31,100 --> 01:25:34,560 Årsaken er dette bare går tilbake til opprinnelsen til Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix var bare noen programmeringsprosjekt ved Bell Labs i 1970-årene. 1167 01:25:41,050 --> 01:25:42,610 Folk bare kom sammen til programmet. 1168 01:25:42,610 --> 01:25:45,290 De har aldri ment det å bli en verdensomspennende operativsystem. 1169 01:25:45,290 --> 01:25:47,250 Ulike folk skrev ulike deler uten å tenke veldig mye 1170 01:25:47,250 --> 01:25:49,790 av hvordan de skulle brukes - heller sketchy. 1171 01:25:49,790 --> 01:25:53,290 Og det kom sammen sånn, og det er fortsatt sånn i noen henseender. 1172 01:25:53,290 --> 01:25:57,930 Så det gjenspeiler historien, og det er fortsatt disse inkonsekvenser og odde elementer av det. 1173 01:25:57,930 --> 01:26:00,750 Ok. Neste en her. 1174 01:26:08,170 --> 01:26:11,000 Som jeg skrev tidligere, er det C-shell egentlig ikke brukt veldig mye for programmering, 1175 01:26:11,000 --> 01:26:12,420 Selv om det kan være. 1176 01:26:12,420 --> 01:26:15,080 Det utfører saktere, igjen trade-off mellom interaktiv bruk, 1177 01:26:15,080 --> 01:26:17,820 som har mer behandling involvert enn fart, 1178 01:26:17,820 --> 01:26:20,710 noe som kan gjøre uten behandling. 1179 01:26:20,710 --> 01:26:28,320 De ekstra funksjoner lagt til Bourne skall av Korn og Bourne-again skjell 1180 01:26:28,320 --> 01:26:32,120 synes ikke å bremse dem ned, og jeg vet ikke hvorfor det er. 1181 01:26:32,120 --> 01:26:36,310 Det kan bare bli bedre programmering, men jeg er ikke i en posisjon til å vite. 1182 01:26:36,310 --> 01:26:40,420 Hastighet her faktisk ikke er en så big deal, selv om det er nevnt. 1183 01:26:40,420 --> 01:26:43,690 Årsaken er at skallskript faktisk få ganske fort. 1184 01:26:43,690 --> 01:26:46,450 Hvis det er mye av kommandoer som i en calculational program, 1185 01:26:46,450 --> 01:26:49,110 du sannsynligvis ikke ville gjøre det i et skall skript. 1186 01:26:49,110 --> 01:26:51,450 Operasjonene er ganske enkel og grei. 1187 01:26:51,450 --> 01:26:53,960 De som jeg har opplevd som er for treg 1188 01:26:53,960 --> 01:26:57,110 bære gjentatte anvendelser av langsomme kommandoer. 1189 01:26:57,110 --> 01:27:00,480 Tidligere nevnte jeg stream redaktør sed. At kommandoen er treg. 1190 01:27:00,480 --> 01:27:03,760 Hvis du utfører sed mange ganger, vil du få en treg script, men det er ikke skallet som er treg. 1191 01:27:03,760 --> 01:27:07,920 Kjører den i Bourne shell vil ikke være mye raskere enn å kjøre den i C-skall, 1192 01:27:07,920 --> 01:27:10,070 selv om det er kanskje noen fordeler der. 1193 01:27:10,070 --> 01:27:12,760 De ytterligere programmeringsmuligheter, på den annen side, 1194 01:27:12,760 --> 01:27:17,920 er betydelige grunner til at du ville bruke de Bourne-type skjell. 1195 01:27:17,920 --> 01:27:21,390 C-skallet har odde funksjoner til det - 1196 01:27:21,390 --> 01:27:25,250 det faktum at du ikke vet om en variabel er et skall variabel eller en miljøvariabel. 1197 01:27:25,250 --> 01:27:27,440 Det kan være veldig forvirrende. 1198 01:27:27,440 --> 01:27:32,170 Det er ikke så lett å skrive 1199 01:27:32,170 --> 01:27:35,930 bare basert på din erfaring med programmering i andre språk. 1200 01:27:35,930 --> 01:27:41,350 Jeg tror du kan finne de Bourne-type skjell mer i samsvar med din erfaring. 1201 01:27:43,730 --> 01:27:49,270 Noen skript, men kan være tusenvis av linjer i lengde. 1202 01:27:49,270 --> 01:27:52,450 De som jeg har sett er brukt for patching operativsystemer. 1203 01:27:52,450 --> 01:27:55,450 De kan kjøre veldig sakte, men du trenger ikke kjøre dem veldig ofte. 1204 01:27:55,450 --> 01:27:57,180 Det er bare når du gjør patching, 1205 01:27:57,180 --> 01:27:59,450 og det er bare systemet manager som gjør disse tingene, 1206 01:27:59,450 --> 01:28:01,840 så det er egentlig ikke mye av et problem. 1207 01:28:01,840 --> 01:28:06,980 De som er hundrevis av linjer lang faktisk kjøre ganske raskt. 1208 01:28:06,980 --> 01:28:10,540 Nevne dette her, hva er de forbedringer? 1209 01:28:10,540 --> 01:28:13,170 Jeg har allerede nevnt noen av dem - arrays, beregninger, 1210 01:28:13,170 --> 01:28:20,540 de $ () uttrykk for beregninger i Bash shell, 1211 01:28:20,540 --> 01:28:23,050 den andre typen kommando substitusjon. 1212 01:28:23,050 --> 01:28:25,360 Det finnes forskjellige typer testing kommandoer 1213 01:28:25,360 --> 01:28:29,350 som du kan gjøre betingede tester på eksistensen av en fil eller andre ting. 1214 01:28:29,350 --> 01:28:34,790 Vare her, denne kommandoen her. 1215 01:28:34,790 --> 01:28:38,480 Hva gjør dette, og hvorfor skulle noen bruke det? 1216 01:28:51,170 --> 01:28:52,990 printenv variabelnavn. 1217 01:28:52,990 --> 01:28:56,130 Vi vet hva printenv gjør. Det forteller oss at verdien av en variabel. 1218 01:28:56,130 --> 01:29:00,850 Og printenv variabel vil ikke fortelle oss veldig mye fordi det er ingen slik variabel. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Men la oss gi den noe meningsfylt. 1221 01:29:13,420 --> 01:29:16,800 Det er ikke der heller. Ok. Jeg tror jeg aldri definert det. 1222 01:29:16,800 --> 01:29:18,020 La oss bare sjekke mine omgivelser. 1223 01:29:18,020 --> 01:29:20,900 Dette er en annen kommando som du kan inspisere ditt miljø. 1224 01:29:20,900 --> 01:29:24,470 Det er gode gamle redaktør, den vi så før. 1225 01:29:42,360 --> 01:29:44,120 Hva gjør det? 1226 01:29:44,120 --> 01:29:48,050 Her har vi en backquote uttrykk. 1227 01:29:48,050 --> 01:29:50,370 Husk dette er C-skall. 1228 01:29:50,370 --> 01:29:54,850 Så printenv EDITOR vil gi oss en verdi av editor. Det er vi. 1229 01:29:54,850 --> 01:29:59,790 Og så vil det sette denne verdien til variabelen a, sett kommandoen. 1230 01:29:59,790 --> 01:30:02,860 Så nå hvis jeg gjør echo $ a, jeg får vi. 1231 01:30:02,860 --> 01:30:05,850 Det virker ikke veldig nyttig. 1232 01:30:05,850 --> 01:30:08,080 Men det gjør faktisk har en hensikt. 1233 01:30:08,080 --> 01:30:12,260 Siden vi ikke vet om en variabel er et skall variabel eller en miljøvariabel 1234 01:30:12,260 --> 01:30:16,280 ved å bruke dollartegnet evaluering syntaks, kan vi bruke printenv 1235 01:30:16,280 --> 01:30:19,460 å sørge for at det er en miljøvariabel. 1236 01:30:19,460 --> 01:30:22,550 Så hvis det var et skall variabel redaktør, dette ville ikke ha fått det. 1237 01:30:22,550 --> 01:30:25,640 Dette fungerer bare med miljøvariabelen. 1238 01:30:25,640 --> 01:30:28,370 Hvis det var et skall variabel og jeg ønsket sin verdi, 1239 01:30:28,370 --> 01:30:29,980 Jeg måtte finne en annen måte å gjøre det. 1240 01:30:29,980 --> 01:30:33,530 En måte å gjøre det ville være ved å gjøre settet og piping. 1241 01:30:33,530 --> 01:30:36,130 Dette er en av de metategn, spesialtegn. 1242 01:30:36,130 --> 01:30:38,370 Det sender resultatet av settet til noe annet. 1243 01:30:38,370 --> 01:30:40,650 La oss se hva vi kan finne der. 1244 01:30:40,650 --> 01:30:49,340 Ingenting. Ok. La oss bare se hva som er der alle sammen. 1245 01:30:49,340 --> 01:30:53,580 Det var echo_style, den jeg nevnte tidligere. Ok, la oss gjøre det. 1246 01:31:02,460 --> 01:31:06,230 Husker jeg nevnte tidligere, echo_style 1247 01:31:06,230 --> 01:31:08,410 bestemmer hvordan ekkoet kommandoen vil kjøre. 1248 01:31:08,410 --> 01:31:10,940 bsd står for Berkeley Standard Distribution. 1249 01:31:10,940 --> 01:31:13,200 Dette er Berkeley Unix fra 1970-tallet. 1250 01:31:13,200 --> 01:31:16,630 Det er en av måtene som ekko kan kjøre. 1251 01:31:16,630 --> 01:31:22,310 Innstilling echo_style til at verdien i TC-shell vil føre ekko å oppføre seg på den måten. 1252 01:31:22,310 --> 01:31:27,670 Så sett gjør det, men satt bare får skall-variabler. 1253 01:31:27,670 --> 01:31:35,430 Det ville ikke finne EDITOR, som ikke er et skall variabel. 1254 01:31:36,870 --> 01:31:38,050 Ingenting. 1255 01:31:38,050 --> 01:31:39,660 Så det er en måte å skille dem. 1256 01:31:39,660 --> 01:31:42,000 Men det faktum at du må gå gjennom noen merkelige kommando sånn 1257 01:31:42,000 --> 01:31:45,500 å skille mellom skall-variabler eller miljøvariabler 1258 01:31:45,500 --> 01:31:49,970 viser den type upraktisk arten av den C-skall for enkelte formål. 1259 01:31:52,290 --> 01:31:57,960 Og nå, sist, og kanskje minst, er dette mannen sidene. 1260 01:31:57,960 --> 01:32:03,190 De av som du kanskje vet, er mannen kommandoen kort for manuell. 1261 01:32:03,190 --> 01:32:08,610 Manual-sidene for skjellene er vanskelig å lese. De er veldig lang. 1262 01:32:08,610 --> 01:32:14,060 De er organisert på en måte som kan gjøre det vanskelig å finne det du leter etter. 1263 01:32:14,060 --> 01:32:15,980 Så hvis du leter etter noe med en hensikt, 1264 01:32:15,980 --> 01:32:20,050 du kan ikke vite om at formålet er et skall variabel eller noe annet, 1265 01:32:20,050 --> 01:32:21,630 så du kan ikke vite hvor du skal lete etter den. 1266 01:32:21,630 --> 01:32:25,030 Du kan søke etter ulike strenger, men strengene er ofte gjentas. 1267 01:32:25,030 --> 01:32:27,640 Så det er generelt vanskelig å lese. 1268 01:32:27,640 --> 01:32:33,810 Vi bare så på TC-shell mannen siden litt før for å finne den eval kommando. 1269 01:32:33,810 --> 01:32:36,610 Noen ting går raskere. 1270 01:32:36,610 --> 01:32:38,860 En tilnærming er å søke etter en streng. 1271 01:32:38,860 --> 01:32:40,360 Du kan bruke personsøker. 1272 01:32:40,360 --> 01:32:49,080 Personsøker har skråstreken for å se etter en kommando eller en streng inne i en personsøker operasjon. 1273 01:32:49,080 --> 01:32:52,830 Man som standard vil bruke personsøkere, enten være mer eller mindre. 1274 01:32:52,830 --> 01:32:56,560 Jeg vet ikke om du er kjent med dem, men de kan vise filer litt etter litt. 1275 01:32:56,560 --> 01:33:00,550 Jeg har brukt mindre å vise akkurat disse filene vi har fått her. 1276 01:33:00,550 --> 01:33:03,300 Du kan søke inni der. 1277 01:33:03,300 --> 01:33:04,880 Du kan prøve å bruke ulike søkestrenger. 1278 01:33:04,880 --> 01:33:08,420 Også manulene i ulike operativsystemer kan ikke være det samme. 1279 01:33:08,420 --> 01:33:11,130 De kan være egne sider for csh og tcsh. 1280 01:33:11,130 --> 01:33:14,500 De er ikke på Mac, men de kan være hvis de er separate kommandoer. 1281 01:33:14,500 --> 01:33:19,000 Hvis sh ikke egentlig kalle Bash, det sannsynligvis ville være en egen mann side. 1282 01:33:19,000 --> 01:33:25,820 Noen systemer har egne man-sidene bare for C-skall innebygde kommandoer. 1283 01:33:25,820 --> 01:33:30,250 Noen ganger hvis du ønsker å lese en beskrivelse av en innebygd kommando 1284 01:33:30,250 --> 01:33:35,350 det er også i banen, som ekko, må du lese man-siden på den kommandoen på ekko 1285 01:33:35,350 --> 01:33:37,610 å bestemme hvordan den vil fungere som en innebygd kommando 1286 01:33:37,610 --> 01:33:39,760 selv om du ikke kaller den innebygde kommandoen. 1287 01:33:41,630 --> 01:33:46,090 Det er en ulempe av operativsystemet generelt, ikke bare for skjell, 1288 01:33:46,090 --> 01:33:50,710 selv for skjell i særdeleshet mannen sidene er ganske lang, 1289 01:33:50,710 --> 01:33:56,180 dels fordi de har lagt nyttige funksjoner til dem, noe som kan være en positiv. 1290 01:33:56,180 --> 01:34:00,290 Ok. Er det noen spørsmål? Eventuelle emner du ønsker å ta opp? 1291 01:34:00,290 --> 01:34:03,390 Noe relevant her? 1292 01:34:04,540 --> 01:34:07,100 Vel, det har vært veldig hyggelig å snakke med dere alle. 1293 01:34:07,100 --> 01:34:09,690 Jeg håper du fikk noe ut av dette seminaret 1294 01:34:09,690 --> 01:34:13,080 som vil være nyttig for deg i din fremtidige bestrebelser. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]