1 00:00:00,000 --> 00:00:02,320 >> [Seminarium - Unix Shells, Miljöer] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Det här är CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Dagens ämne är Unix shell. 5 00:00:12,770 --> 00:00:20,600 Jag är Douglas Kline, sakkunnig, eller åtminstone någorlunda kompetent användare av skalet. 6 00:00:20,600 --> 00:00:25,280 Ett skal är gränssnittet för användaren att datorns operativsystem. 7 00:00:25,280 --> 00:00:29,580 Namnet är vilseledande eftersom, till skillnad från ett djurs skal, 8 00:00:29,580 --> 00:00:34,890 vilket är svårt och skyddande, gör att datorn skal för kommunikation. 9 00:00:34,890 --> 00:00:39,120 Så poröst membran skulle förmodligen vara en bättre metafor. 10 00:00:39,120 --> 00:00:44,500 >> Den ursprungliga skal för Unix är Bourne-skal. 11 00:00:44,500 --> 00:00:46,450 Bourne stavas B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne var en av de ursprungliga författarna av Unix, 13 00:00:49,770 --> 00:00:51,700 och så skalet är uppkallad efter honom. 14 00:00:51,700 --> 00:00:54,850 Namnet på det skal som ett kommando är bara helt enkelt sh. 15 00:00:54,850 --> 00:00:57,400 Det är det kommando du kan köra. 16 00:00:57,400 --> 00:01:00,810 Skalet börjar vid inloggning. 17 00:01:00,810 --> 00:01:04,459 När du loggar in på datorn, skalet börjar att köra för dig, 18 00:01:04,459 --> 00:01:06,820 och det är det som tar dina kommandon. 19 00:01:06,820 --> 00:01:09,790 Det kan börja på andra tider också. 20 00:01:09,790 --> 00:01:16,780 Om du tar upp ett fönster med inga andra uppgifter, kommer den att starta ett skal för dig. 21 00:01:16,780 --> 00:01:20,450 Det är så det är att du kan gå till ett fönster och börjar skriva kommandon 22 00:01:20,450 --> 00:01:23,960 och så vidare där även om du inte logga in på det fönstret. 23 00:01:23,960 --> 00:01:26,670 Dessutom, om du gör en fjärrinloggning, 24 00:01:26,670 --> 00:01:30,250 då det kommer att starta ett skal på fjärrdatorn. 25 00:01:30,250 --> 00:01:44,310 Och det är möjligt att köra kommandon utan ett interaktivt skal. 26 00:01:44,310 --> 00:01:48,990 Det kan betyda inom din nuvarande verksamhet, 27 00:01:48,990 --> 00:01:50,700 och det kan också innebära en fjärrstyrning. 28 00:01:50,700 --> 00:01:52,900 Du kan skicka ett kommando till en annan dator, 29 00:01:52,900 --> 00:01:55,460 vilket innefattar att starta ett skal där. 30 00:01:55,460 --> 00:01:57,760 I själva verket har det för att inkludera att starta ett skal där 31 00:01:57,760 --> 00:02:01,740 även om det inte är din slutliga syfte. 32 00:02:05,310 --> 00:02:12,350 När något börjar såhär, inte nödvändigtvis starta ett nytt skal. 33 00:02:12,350 --> 00:02:17,430 Om du tar upp ett nytt fönster, är det möjligt att tala om för den att ta upp en redaktör 34 00:02:17,430 --> 00:02:18,940 eller något annat kommando. 35 00:02:18,940 --> 00:02:20,560 I det fallet kommer editorn börja från början. 36 00:02:20,560 --> 00:02:22,930 När redaktören slutar, ändar i fönstret. 37 00:02:22,930 --> 00:02:24,620 Det är lite ovanligt, men det kan göras. 38 00:02:24,620 --> 00:02:27,140 I dessa fall kommer det inte vara ett skal. 39 00:02:27,140 --> 00:02:31,890 Så det är inte nödvändigtvis så att ett fönster eller en sådan ansökan kommer att ta upp ett skal. 40 00:02:31,890 --> 00:02:34,030 >> Shell tolkar kommandon. 41 00:02:34,030 --> 00:02:40,900 Parsning innebär att identifiera de olika elementen och klassificera dem. 42 00:02:40,900 --> 00:02:43,470 Inom ett kommando, den fullständiga sträng som du skriver, 43 00:02:43,470 --> 00:02:47,310 kommer det att finnas en eller flera enkla kommandon som ska exekveras. 44 00:02:47,310 --> 00:02:50,050 Andra element kan vara argument. 45 00:02:50,050 --> 00:02:55,020 Det kan också vara specialtecken som påverkar utförandet av ett kommando. 46 00:02:55,020 --> 00:02:59,710 De kan skicka produktionen någon annanstans än skärmen 47 00:02:59,710 --> 00:03:01,750 om kommandot normalt skulle sända den till skärmen. 48 00:03:01,750 --> 00:03:04,390 Det kan omdirigera ingång, det kan göra andra saker också. 49 00:03:04,390 --> 00:03:08,120 Det finns flera andra symboler, tecken och så vidare. 50 00:03:08,120 --> 00:03:13,600 Parsning innebär att upptäcka och tolka dessa saker. 51 00:03:13,600 --> 00:03:19,560 >> Nu om det inte finns några fler frågor, vilket är ganska troligt eftersom det inte finns några fler människor, 52 00:03:19,560 --> 00:03:24,620 Vi kommer att gå vidare till min nästa sida här. 53 00:03:24,620 --> 00:03:29,170 >> Jag sade tidigare att Bourne-skal är den ursprungliga skalet. 54 00:03:29,170 --> 00:03:31,550 Det finns andra. 55 00:03:31,550 --> 00:03:34,520 En är den C-skalet. Kommandot är csh. 56 00:03:34,520 --> 00:03:36,830 Namnet C-skalet är bara en lek med ord. 57 00:03:36,830 --> 00:03:41,260 Detta skal introducerades med Berkeley Unix i mitten av 1970-talet. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix var en nyskapande händelse i utvecklingen av Unix. 59 00:03:44,830 --> 00:03:48,770 Det var en stor revolution och ingår införandet av detta skal. 60 00:03:48,770 --> 00:03:50,790 Anledningen till att ordlek, C-skalet, 61 00:03:50,790 --> 00:03:56,490 är att den C-skal har vissa egenskaper i det som liknar C-språket, 62 00:03:56,490 --> 00:03:59,740 som Bourne-skalet inte har - 63 00:03:59,740 --> 00:04:02,140 eller det inte hade på den tiden. 64 00:04:02,140 --> 00:04:05,190 Det finns även TC-skalet. 65 00:04:05,190 --> 00:04:07,360 Detta är ett superset av C-skalet. 66 00:04:07,360 --> 00:04:11,470 Den har ytterligare funktioner, av vilka många är användbara för interaktiv användning, 67 00:04:11,470 --> 00:04:16,050 till exempel påminna kommandon i historien mekanismen, 68 00:04:16,050 --> 00:04:18,459 som jag ska beskriva något senare - 69 00:04:18,459 --> 00:04:23,120 på ett enkelt sätt, modellerad efter en redaktör. 70 00:04:23,120 --> 00:04:29,170 Det har också bindningar som gör att du kan binda en kort nyckel sträng till en längre kommando. 71 00:04:29,170 --> 00:04:31,440 Vi kommer inte att komma in i det i dag. 72 00:04:31,440 --> 00:04:33,650 Den har vissa funktioner som är användbara för programmering. 73 00:04:33,650 --> 00:04:37,020 Dock är C-skalet inte ofta för skalprogrammering. 74 00:04:37,020 --> 00:04:39,080 Shell-program, om du inte redan vet, 75 00:04:39,080 --> 00:04:41,690 är program som består av skal egenskaper. 76 00:04:41,690 --> 00:04:43,220 Du kan köra dessa som program. 77 00:04:43,220 --> 00:04:46,760 Du skriver en massa skalkommandon i en fil och köra filen. 78 00:04:46,760 --> 00:04:49,760 Du behöver inte kompilera det. Detta är en tolkande språk. 79 00:04:49,760 --> 00:04:57,320 Frasen C-shell är nu osäkert, eftersom det bara kan hänvisa till den ursprungliga C-skalet, csh, 80 00:04:57,320 --> 00:05:01,200 eller till alla C-skal, inklusive tcsh. Det är lite tvetydigt. 81 00:05:01,200 --> 00:05:08,250 >> En senare skalet är Korn-skalet, ksh, uppkallad efter programmerare, Korn. 82 00:05:08,250 --> 00:05:14,160 Detta skal försökt att i 1 skal 83 00:05:14,160 --> 00:05:16,960 fördelarna med den C-skal för interaktiv användning 84 00:05:16,960 --> 00:05:19,230 och Bourne shell för programmering. 85 00:05:19,230 --> 00:05:25,440 Den har använts som ett interaktivt skal av vissa människor - en minoritet. 86 00:05:25,440 --> 00:05:32,050 Senare dock, det fanns en annan introduktion, Bash skal, BASH, 87 00:05:32,050 --> 00:05:35,290 återigen en ordlek, Bourne-again shell. 88 00:05:35,290 --> 00:05:43,830 Det är en förlängning av Bourne-skal. Korn-skalet finns också. Båda är. 89 00:05:43,830 --> 00:05:48,100 Den har samma mål för Korn-skalet av en sammanslagning av C-skalet s 90 00:05:48,100 --> 00:05:50,980 och Bourne shell fördelar i 1 skal. 91 00:05:50,980 --> 00:05:56,810 Många av de förbättringar av Korn-skalet är också inkluderade i pucklar. 92 00:05:56,810 --> 00:06:00,710 Våldsamt slag har dock mer och är därför att föredra. 93 00:06:00,710 --> 00:06:05,180 The Bourne-again skal och Korn-skalet kallas Bourne-typ skal 94 00:06:05,180 --> 00:06:07,730 eftersom de innehåller Bourne shell egenskaper, 95 00:06:07,730 --> 00:06:11,180 som är oförenliga i vissa avseenden med C-skal. 96 00:06:11,180 --> 00:06:15,520 Det finns andra skal än de som, en del är avsedda för begränsad användning, 97 00:06:15,520 --> 00:06:20,670 kanske begränsad till vissa kommandon, kanske specialiserade ändamål, inte används ofta. 98 00:06:20,670 --> 00:06:24,240 >> Okej. Nästa punkt här. 99 00:06:31,300 --> 00:06:38,970 Bash-skalet har blivit förknippade med olika former av Linux. 100 00:06:38,970 --> 00:06:41,550 Jag är inte säker på om det är sant i alla former. 101 00:06:41,550 --> 00:06:43,280 Det finns många former där ute och jag har inte använt dem alla, 102 00:06:43,280 --> 00:06:46,870 men de som jag har använt det har blivit associerade med det. 103 00:06:46,870 --> 00:06:49,670 Så vitt jag vet finns det ingenting om Bash 104 00:06:49,670 --> 00:06:52,210 vilket gör den mer kompatibel med Linux 105 00:06:52,210 --> 00:06:55,020 än någon annan kombination av skal och operativsystem. 106 00:06:55,020 --> 00:06:59,690 Jag tror att det nog bara återspeglar böjelser programmerare. 107 00:06:59,690 --> 00:07:07,500 Att det har blivit förknippad med Linux är ett annat skäl att föredra Bash att ksh 108 00:07:07,500 --> 00:07:11,820 eftersom saker kommer sannolikt att skrivas på det och det är sannolikt att sprida sig. 109 00:07:11,820 --> 00:07:15,410 Jag ska ge er andra skäl för det senare. 110 00:07:15,410 --> 00:07:21,330 Bourne shell-skript ska köras under Korn-skalet eller Bash. 111 00:07:21,330 --> 00:07:22,650 Om du skriver något för Bourne-skal, 112 00:07:22,650 --> 00:07:26,180 du kan nog köra den under ksh eller bash. 113 00:07:26,180 --> 00:07:30,610 Korn skalskript kommer förmodligen att köras under Bash, men jag kan inte garantera det. 114 00:07:30,610 --> 00:07:36,040 Senare här, bör C-skalskript köras under TC-skalet. 115 00:07:38,850 --> 00:07:41,690 I C-skalet var faktiskt aldrig flitigt för skript 116 00:07:41,690 --> 00:07:48,110 eftersom Bourne shell och senare var att föredra för detta ändamål de Bourne-typ skal. 117 00:07:48,110 --> 00:07:50,620 Så det är verkligen inte så viktigt. 118 00:07:50,620 --> 00:07:53,480 Det finns en hel del Bourne skalskript som skrevs för länge sedan, 119 00:07:53,480 --> 00:07:56,860 innan Korn-skalet eller Bourne-again shell infördes. 120 00:07:56,860 --> 00:07:59,300 De är fortfarande i bruk, en del av operativsystem, 121 00:07:59,300 --> 00:08:01,590 och så att du hittar dem om du tittar i operativsystemet 122 00:08:01,590 --> 00:08:03,760 eller några gamla programmering paket. 123 00:08:03,760 --> 00:08:12,840 >> Pucklar är till viss del på att bli ett slags lingua franca för operativsystem. 124 00:08:12,840 --> 00:08:17,580 Det har redan utvidgats till Windows och till VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, om du inte vet, är ett egenutvecklat operativsystem 126 00:08:20,440 --> 00:08:25,480 av Digital Equipment Corporation, som fortfarande är i bruk, till stor del bakom kulisserna. 127 00:08:25,480 --> 00:08:29,250 Och om det kommer att köras på flera olika operativsystem, 128 00:08:29,250 --> 00:08:31,110 sannolikt de människor tenderar att flytta för det. 129 00:08:31,110 --> 00:08:33,840 Men denna utveckling är relativt ny. 130 00:08:33,840 --> 00:08:39,490 Det är bara början, så jag kan inte förutsäga om det kommer att visa sig verkligen vara den typen av lingua franca. 131 00:08:39,490 --> 00:08:43,539 Också, eftersom fil sökvägar och bibliotek skiljer sig 132 00:08:43,539 --> 00:08:46,210 mellan dessa olika operativsystem, 133 00:08:46,210 --> 00:08:50,250 du kanske inte att kunna skriva en bash skript på ett operativsystem 134 00:08:50,250 --> 00:08:51,840 och sedan köra den på en annan. 135 00:08:51,840 --> 00:08:54,440 Du ska kunna flytta den mellan olika Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Mac OS-operativsystem, men inte nödvändigtvis till Windows eller VMS. 137 00:08:59,020 --> 00:09:01,390 Du kanske måste byta fil sökvägen beskrivningar, 138 00:09:01,390 --> 00:09:03,180 och vissa bibliotek kan vara annorlunda, 139 00:09:03,180 --> 00:09:05,230 vilket kan påverka hur vissa kommandon fungerar 140 00:09:05,230 --> 00:09:09,730 eller hur de behandlar argument och liknande. 141 00:09:09,730 --> 00:09:19,230 I tillägg till detta, är en annan försiktighet här att det inte finns någon garanti 142 00:09:19,230 --> 00:09:23,570 att alla olika skal jag har nämnt - Bourne shell, C-skal, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn-skalet, Bourne-again shell - kommer att finnas tillgängligt under någon Unix 144 00:09:29,880 --> 00:09:33,750 eller Linux eller Mac OS-dator. 145 00:09:33,750 --> 00:09:35,620 De helt enkelt inte kan vara där. 146 00:09:35,620 --> 00:09:38,300 Det är en av de varningar här. 147 00:09:38,300 --> 00:09:41,490 Det är en olycklig begränsning här eftersom du vill att saker och ting att fungera överallt, 148 00:09:41,490 --> 00:09:44,380 men tyvärr kan man inte lita på det. 149 00:09:44,380 --> 00:09:47,230 >> Okej. Nästa man här. 150 00:09:50,280 --> 00:09:54,370 Låt oss säga att du vill skriva ett skalskript, 151 00:09:54,370 --> 00:09:57,170 ett program som består av skalkommandon. 152 00:09:57,170 --> 00:10:01,200 Du skriver dina kommandon, lägg dem i en fil, och köra filen. 153 00:10:01,200 --> 00:10:04,230 Vad händer om du vill inkludera argument? 154 00:10:04,230 --> 00:10:09,650 Vid skal verksamhet, argument kallas parametrar eller positionsparametrar 155 00:10:09,650 --> 00:10:15,940 och de kommer att kallas av ett dollartecken och siffran, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Så om skriptet har detta namn, skulle min första argumentet vara argument 1 157 00:10:27,000 --> 00:10:30,540 och min andra kan vara argument 2, 158 00:10:30,540 --> 00:10:34,110 och inne i mitt manus om jag vill hänvisa till dessa saker - 159 00:10:34,110 --> 00:10:36,810 låt oss ta bort det eftersom jag inte riktigt kommer att köra den - 160 00:10:36,810 --> 00:10:42,160 i mitt manus jag kanske har $ 1 för att hänvisa till arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, som kommer att komma ut på det sättet, arg2. 162 00:10:45,890 --> 00:10:50,080 Så dessa symboler är tillgängliga för att hänvisa till argument, 163 00:10:50,080 --> 00:10:52,390 och de gäller för alla skalen. 164 00:10:52,390 --> 00:10:56,520 Dessutom finns det andra tecken. 165 00:10:56,520 --> 00:11:01,700 $ * Avser hela argumentlistan, alla av dem. 166 00:11:01,700 --> 00:11:05,390 $ # Refererar till det antal argument. 167 00:11:05,390 --> 00:11:07,910 Återigen, detta gäller alla skalen. 168 00:11:07,910 --> 00:11:15,540 Dessa symboler, * och # kan användas med de betydelser på andra ställen också. 169 00:11:15,540 --> 00:11:17,940 Vi kommer inte att komma in i det. 170 00:11:17,940 --> 00:11:20,460 >> Shell föreskrivaren linje. Vad är det för? 171 00:11:20,460 --> 00:11:27,760 Låt oss säga att du har skrivit ett manus och det är för ett visst skal och du vill köra det. 172 00:11:27,760 --> 00:11:33,500 Hur vet du vad skal operativsystemet använder för att köra skriptet? 173 00:11:33,500 --> 00:11:37,230 Vid ett tillfälle kunde man anta att det skulle köra det i Bourne-skal 174 00:11:37,230 --> 00:11:39,440 om du inte säger något annat, 175 00:11:39,440 --> 00:11:41,730 men folk inte skriver manus i Bourne-skalet så mycket längre 176 00:11:41,730 --> 00:11:43,750 och du kan inte ens lita på det längre. 177 00:11:43,750 --> 00:11:48,740 Så här har vi ett skal specifice linje här. 178 00:11:48,740 --> 00:11:52,450 Det anger Bash. 179 00:11:52,450 --> 00:11:56,750 Observera att det anger det i sökvägen, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Om en dator har Bash skalet men inte i katalogen bin, / bin, detta kommer inte att fungera. 181 00:12:02,870 --> 00:12:06,870 Det är ett annat kval, en annan försiktighet här. 182 00:12:06,870 --> 00:12:09,500 Pundet tecken är kommentarsrad karaktär. 183 00:12:09,500 --> 00:12:12,300 Det gäller alla skal. 184 00:12:12,300 --> 00:12:18,610 Den särskilda fallet här, #! i början av ett skript, är ett specialfall. 185 00:12:18,610 --> 00:12:23,410 Som anger skalet på sig att köra skriptet. 186 00:12:23,410 --> 00:12:30,230 Som jag sa, kan det inte vara på samma plats / bin. 187 00:12:30,230 --> 00:12:34,880 Dessutom finns det en annan sak här. 188 00:12:34,880 --> 00:12:41,250 Om du bara använder nummertecken utan utropstecken och sökväg, 189 00:12:41,250 --> 00:12:44,640 som bör ange en C-shell. 190 00:12:44,640 --> 00:12:48,300 Men jag rekommenderar inte att göra det eftersom jag inte kan garantera 191 00:12:48,300 --> 00:12:49,750 att denna alltid kommer att fungera. 192 00:12:49,750 --> 00:12:52,220 Om du vill ha en C-skal, skulle det vara bättre att säga så. 193 00:12:52,220 --> 00:12:58,450 Sedan finns det något ganska förvirrande här. 194 00:12:58,450 --> 00:13:03,940 Om du använder ett skal specificelinje som / bin / bash 195 00:13:03,940 --> 00:13:07,070 och att skalet inte är tillgänglig där, 196 00:13:07,070 --> 00:13:10,680 det finns inget sådant som / bin / bash på just den datorn, 197 00:13:10,680 --> 00:13:14,330 antingen för att den inte har pucklar eller eftersom det är i ett annat läge, 198 00:13:14,330 --> 00:13:17,450 du får ett felmeddelande som talar om att skriptet du körde inte existerar. 199 00:13:17,450 --> 00:13:21,510 Och naturligtvis finns ditt manus, så att felmeddelandet är förvirrande. 200 00:13:21,510 --> 00:13:24,810 Anledningen till att operativsystemet ger dig den fel 201 00:13:24,810 --> 00:13:28,370 eller, rättare sagt, att din interaktiva skal där du kör detta ger detta fel, 202 00:13:28,370 --> 00:13:33,510 är att den rapporterar kommandot du använde, vilket är namnet på skriptet. 203 00:13:33,510 --> 00:13:36,920 Detta kommando effektivt kallas skalet av namnet på skriptet. 204 00:13:36,920 --> 00:13:39,330 Det är där du får den förvirrande felmeddelande. 205 00:13:39,330 --> 00:13:42,980 Ett annat sätt att ringa shell script 206 00:13:42,980 --> 00:13:45,910 är genom att ange skalet på kommandoraden, så här. 207 00:13:45,910 --> 00:13:52,510 Detta är ett kommando. Detta säger köra Bash och sedan köra mitt manus i Bash. 208 00:13:52,510 --> 00:13:55,680 Det kommer att ha företräde framför en specificerare linje, 209 00:13:55,680 --> 00:14:02,090 och detta har funktionen av att du kan ge olika sökvägar. 210 00:14:02,090 --> 00:14:04,840 Om du bara ge ett kommando, kommer operativsystemet att leta efter kommandot 211 00:14:04,840 --> 00:14:06,410 på olika ställen. 212 00:14:06,410 --> 00:14:08,820 Om den är tillgänglig, om den anser det. 213 00:14:08,820 --> 00:14:12,290 Datorn hittar Bash oavsett var den ligger och kör den, 214 00:14:12,290 --> 00:14:15,470 så att du inte behöver då vara oroliga när den finner det. 215 00:14:15,470 --> 00:14:17,360 Det finns potentiellt andra bekymmer här, 216 00:14:17,360 --> 00:14:20,830 som om det finns mer än en version av pucklar, vilket är möjligt även om osannolik. 217 00:14:20,830 --> 00:14:23,540 Så det är ett annat sätt att ta itu med dessa saker. 218 00:14:23,540 --> 00:14:30,480 Specifier linjer kan ringa någon skal. 219 00:14:30,480 --> 00:14:34,480 De kan också ringa till andra än snäckor saker. 220 00:14:34,480 --> 00:14:37,940 Exempel Jag har här är sed, vilket är strömmen redaktör; 221 00:14:37,940 --> 00:14:39,900 awk, vilket är ett mönster bearbetningsspråk; 222 00:14:39,900 --> 00:14:43,680 och perl, en mycket högt utvecklad skriptspråk. 223 00:14:43,680 --> 00:14:47,570 Om du sätter en specifice linje som anger en av dessa i början av programmet, 224 00:14:47,570 --> 00:14:51,270 det kommer att gå direkt in i det programmet i stället för att starta ett skal. 225 00:14:51,270 --> 00:14:54,030 Dessa program har gränser för sin förmåga. 226 00:14:54,030 --> 00:14:58,790 Perl är mycket kapabel. Sed är redaktör. Det kan göra saker än att bara redigering. 227 00:14:58,790 --> 00:15:03,300 Men det kan vara svårt att programmera det. 228 00:15:03,300 --> 00:15:09,670 Dessutom passerar argument och grejer att manus är antingen omöjligt eller förvirrande. 229 00:15:09,670 --> 00:15:15,030 Så i dessa fall, med awk eller sed, är det, åtminstone i min erfarenhet, 230 00:15:15,030 --> 00:15:18,910 bättre att skriva ett script och samtals awk eller sed från skalskript 231 00:15:18,910 --> 00:15:24,660 snarare än att ringa awk eller sed som scriptet specificelinjen. 232 00:15:24,660 --> 00:15:26,980 Perl är en mycket diversifierad språk, som jag sa. 233 00:15:26,980 --> 00:15:30,050 Du kan inte köra interaktiva kommandon i perl, 234 00:15:30,050 --> 00:15:32,660 vilket innebär att du inte kan testa delar av manus som du utvecklar 235 00:15:32,660 --> 00:15:33,970 genom att köra dem interaktivt. 236 00:15:33,970 --> 00:15:36,160 Men det är en oerhört kapabel språk 237 00:15:36,160 --> 00:15:40,960 och har utvecklats till en mycket vanligt förekommande verktyg. 238 00:15:40,960 --> 00:15:45,720 Det är bara en liten bit av en parent kommentar om specificeraren linjerna. 239 00:15:45,720 --> 00:15:50,610 >> I alla eller de flesta former av Linux - igen, jag kan inte vara säker på det är allt - 240 00:15:50,610 --> 00:15:57,900 och i Mac OS, om du skriver csh får tcsh, 241 00:15:57,900 --> 00:16:00,570 och om du skriver sh du bash. 242 00:16:00,570 --> 00:16:05,020 De försökte där för att ge dig de mer avancerade versionerna av dessa snäckor, 243 00:16:05,020 --> 00:16:07,940 men det kan vara förvirrande. 244 00:16:07,940 --> 00:16:16,720 Om du skriver ett skript med tcsh eller bash funktioner när du ringer csh eller sh 245 00:16:16,720 --> 00:16:22,230 och sedan försöker köra den på en dator som inte har tcsh eller bash, 246 00:16:22,230 --> 00:16:25,050 du kan få några fel om det finns kommandon i det 247 00:16:25,050 --> 00:16:27,970 vilka dessa skal inte känner igen. 248 00:16:27,970 --> 00:16:34,120 Dessutom kan du ha ringt upp ditt skal på din lokala dator 249 00:16:34,120 --> 00:16:37,700 kalla det som sh eller csh och sedan få de mer avancerade skal. 250 00:16:37,700 --> 00:16:41,440 Du kanske inte ens tänker på det faktum att du använder mer avancerad skalet. 251 00:16:41,440 --> 00:16:45,670 Så detta är en potentiell fallgrop. 252 00:16:45,670 --> 00:16:50,290 Hur avgör man att om du skriver sh du Bash, 253 00:16:50,290 --> 00:16:55,580 om du skriver csh du tsch? 254 00:16:55,580 --> 00:16:59,940 Det finns saker i dessa datorer kallas länkar 255 00:16:59,940 --> 00:17:06,460 som kan ansluta till filnamn för att hänvisa till samma sak. 256 00:17:06,460 --> 00:17:12,180 Det kan antingen vara två namn på samma fil eller en fil vars syfte är att hänvisa till en annan fil. 257 00:17:12,180 --> 00:17:17,550 De kallas hårda och symboliska länkar. Vi kommer inte att gå in i det längre idag. 258 00:17:17,550 --> 00:17:21,619 Det kan också finnas separata filer - 1 fil sh, 1 fil Bash - 259 00:17:21,619 --> 00:17:23,880 men de båda kör Bash. 260 00:17:23,880 --> 00:17:29,350 Sedan finns det en annan kval här. 261 00:17:29,350 --> 00:17:42,640 Om du ringer ett av dessa skal med ett namn, 262 00:17:42,640 --> 00:17:46,640 du kanske tror att du skulle få samma funktionalitet som att kalla det med ett annat namn. 263 00:17:46,640 --> 00:17:49,700 Tja, egentligen är det inte nödvändigtvis sant. 264 00:17:49,700 --> 00:17:55,020 Dessa kommandon kan granska namnet som de kallades 265 00:17:55,020 --> 00:18:00,020 och de kan, på grundval av det namnet, beter sig annorlunda. 266 00:18:00,020 --> 00:18:02,740 Det kan finnas problem med att försöka anpassa sig till en standard. 267 00:18:02,740 --> 00:18:06,060 Några av er kanske har hört talas om POSIX-standarden eller en annan, 268 00:18:06,060 --> 00:18:08,730 kanske andra funktioner. 269 00:18:08,730 --> 00:18:14,520 Detta kan väljas ibland med kommandoradsargument 270 00:18:14,520 --> 00:18:17,310 eller genom att ställa in skalvariabler. 271 00:18:17,310 --> 00:18:22,170 Kalla det som sh eller bash kan faktiskt leda till ett annat utförande 272 00:18:22,170 --> 00:18:25,300 även om det är samma fil som du utför. 273 00:18:25,300 --> 00:18:31,800 En annan sak att tänka på är att även om en annan dator har tcsh eller bash, 274 00:18:31,800 --> 00:18:35,310 om de inte är kopplade som de är på din lokala dator 275 00:18:35,310 --> 00:18:37,990 om du har en Linux-eller Mac OS lokala dator, 276 00:18:37,990 --> 00:18:45,630 sedan igen får du skalet som du kallar sh eller csh, inte den som du kanske föredrar. 277 00:18:50,430 --> 00:19:01,130 Den nuvarande Bourne-skalet har förbättringar mindre än de i Bash 278 00:19:01,130 --> 00:19:06,100 men förbi dem i den ursprungliga Bourne-skal. 279 00:19:06,100 --> 00:19:09,690 Som en följd av att även den nuvarande Bourne-skal, sh, 280 00:19:09,690 --> 00:19:14,560 även när det är inte pucklar, liknar C-språket mer än den C-skal gör. 281 00:19:14,560 --> 00:19:20,460 Det var inte sant när C-skalet först skapades, men den har utvecklats på det sättet. 282 00:19:20,460 --> 00:19:26,560 Du kanske märker här att alla dessa skal namn utom för Bourne-skal 283 00:19:26,560 --> 00:19:30,640 har något att indikera vilka skal de är - csh, bash - 284 00:19:30,640 --> 00:19:32,550 men Bourne-skalet är bara sh. 285 00:19:32,550 --> 00:19:34,910 Varför? Det var den ursprungliga skalet. 286 00:19:34,910 --> 00:19:37,770 Det var skalet då, inte ett skal, 287 00:19:37,770 --> 00:19:41,090 och eftersom det var skalet, det fanns ingen anledning att skilja den från ett annat skal. 288 00:19:41,090 --> 00:19:45,030 Så det är därför den har det namnet och fortfarande gör. 289 00:19:50,630 --> 00:19:58,990 >> Denna topp här är en linje från en lösenordsdatabas för ett konto jag har där 290 00:19:58,990 --> 00:20:01,680 på en annan dator. 291 00:20:01,680 --> 00:20:08,300 Jag ska försöka få det namnet så att du kan se att en del i slutet, skalet. 292 00:20:09,720 --> 00:20:15,450 Lösenordet databas innehåller inloggningsegenskaper för alla användare. 293 00:20:15,450 --> 00:20:20,330 I början är det användarnamn som du kan se de sista två bokstäverna i min nu. 294 00:20:20,330 --> 00:20:23,970 Fälten här är åtskilda med kolon. 295 00:20:23,970 --> 00:20:28,210 Det sista fältet, som ni kan se, är bin / tcsh, skalet. 296 00:20:28,210 --> 00:20:30,230 Det är skalet föreskrivaren. 297 00:20:30,230 --> 00:20:33,240 Det finns något intressant här. 298 00:20:33,240 --> 00:20:36,950 När Unix utvecklades först, det var bara 1 skal, 299 00:20:36,950 --> 00:20:38,350 så det fanns inget val där. 300 00:20:38,350 --> 00:20:45,570 Så varför gjorde de tillåter ett fält i lösenordsdatabasen för att ange ett skal? 301 00:20:45,570 --> 00:20:47,920 Jag vet inte, men det är tur att de gjorde. 302 00:20:47,920 --> 00:20:52,030 Det är ganska svårt att göra ändringar i lösenordsdatabasen format 303 00:20:52,030 --> 00:20:54,420 eftersom många program hänvisar till dess format 304 00:20:54,420 --> 00:20:57,720 och skulle behöva skrivas om. 305 00:20:57,720 --> 00:21:04,130 Det är en lyckad eller slumpartad utveckling att de inkluderade det fältet. 306 00:21:04,130 --> 00:21:12,780 Denna typ av lösenord fil linje används på alla Unix-och Linux-datorer så vitt jag 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 faktiskt en lösenordsfilen med raderna i det formatet, 309 00:21:17,810 --> 00:21:21,060 men det är inte där användaren egenskaper definieras. 310 00:21:21,060 --> 00:21:24,200 En annan parenteser anmärkning där. 311 00:21:36,470 --> 00:21:46,020 >> Om du ringer ett skal, kan du kalla det som en sub-skal av dina befintliga skal. 312 00:21:46,020 --> 00:21:50,480 Så om jag går här, låt oss bli av med dessa saker. 313 00:21:50,480 --> 00:21:53,350 Här är jag i C-skalet. 314 00:21:56,830 --> 00:22:01,200 Denna variabel, som exakt identifierar mitt skal, 315 00:22:01,200 --> 00:22:04,300 egentligen är inte alltid ett tillförlitligt sätt att avgöra vad skal du kör, 316 00:22:04,300 --> 00:22:06,220 men i detta fall det är. 317 00:22:06,220 --> 00:22:08,040 Vad händer om jag skriver bara - 318 00:22:09,970 --> 00:22:12,470 Nu är jag i Bash. 319 00:22:12,470 --> 00:22:19,540 Vissa saker kommer att vara densamma. ls säger mig mina kommandon. 320 00:22:19,540 --> 00:22:24,500 Om jag gör en avbryta tillbaka till min C-skal, ls, samma. Rätt? 321 00:22:24,500 --> 00:22:28,890 fg, förgrund, tillbaka till min Bash skal. 322 00:22:28,890 --> 00:22:38,290 pwd, aktuella katalogen, tillbaka till C-skalet. 323 00:22:38,290 --> 00:22:43,180 pwd, annan katalog - egentligen inte en annan katalog i det här fallet. 324 00:22:43,180 --> 00:22:45,110 Det är samma katalog. 325 00:22:45,110 --> 00:22:50,000 Låt oss säga att jag vill ringa ett kommando här: där ls. 326 00:22:50,000 --> 00:22:52,140 Vad gör det? 327 00:22:52,140 --> 00:22:53,670 Det säger mig var kommandot ls, 328 00:22:53,670 --> 00:22:56,670 den som ger mig en kataloglista, ligger i ls. 329 00:22:56,670 --> 00:23:01,460 Låt oss gå tillbaka till Bash skal. Låt oss prova samma sak. 330 00:23:01,460 --> 00:23:05,830 Hmm, intressant det där: kommandot hittades inte. 331 00:23:05,830 --> 00:23:07,400 Varför är det? 332 00:23:07,400 --> 00:23:11,570 Där kommando Den är inbyggd i C-skalet. 333 00:23:11,570 --> 00:23:15,630 Detta är inte ett kommando som måste läsas in i minnet från någon annanstans och avrättades. 334 00:23:15,630 --> 00:23:20,310 I C-skalet kör den genom att överföra utförande till en del av sin egen kod 335 00:23:20,310 --> 00:23:22,790 och det är inte i Bash skal. 336 00:23:22,790 --> 00:23:25,710 Så Bash, att inte ha ett sådant inbyggt kommando, söker efter det, inte tycker att det är, 337 00:23:25,710 --> 00:23:27,720 och vi får ett felmeddelande. 338 00:23:27,720 --> 00:23:32,290 Så där har vi en Bash skal som körs under ett C-skal, och vi kallar det en sub-shell. 339 00:23:32,290 --> 00:23:38,480 Och ifall du är nyfiken, har Bash skal sitt eget sätt att lokalisera kommandon. 340 00:23:38,480 --> 00:23:42,590 hashade hänvisar till det faktum att den kan startas snabbare 341 00:23:42,590 --> 00:23:44,960 upptäcks snabbare. 342 00:23:44,960 --> 00:23:48,610 Det är en av de förbättringar som är inbyggda i en del av dessa skal. 343 00:23:50,220 --> 00:23:54,200 >> Bourne-typ skal är att föredra för programmering. 344 00:23:54,200 --> 00:23:57,300 De har kontrollstrukturer som loopar, villkorssatser, 345 00:23:57,300 --> 00:24:00,240 den typ av kommandon som du kan använda i programspråk som C 346 00:24:00,240 --> 00:24:04,190 eller vad språk. Kanske du programmera i Java eller något annat. 347 00:24:04,190 --> 00:24:06,460 Tankar har dem också. 348 00:24:06,460 --> 00:24:11,790 De Bourne-typ skal, särskilt Bash, har mer 349 00:24:11,790 --> 00:24:15,730 och de är utformade med större flexibilitet. 350 00:24:15,730 --> 00:24:20,700 Bash-skalet har arrayer. Den ursprungliga Bourne-skalet inte. 351 00:24:20,700 --> 00:24:26,130 Så som kan vara avsevärt fördelaktigt för programmering. 352 00:24:26,130 --> 00:24:29,810 I C-skalet gör faktiskt matriser men inte har en hel del av dessa andra funktioner. 353 00:24:29,810 --> 00:24:33,450 De Bourne-typ skal kommer att utföra snabbare 354 00:24:33,450 --> 00:24:36,520 om de inte har de egenskaper som är avsedda för interaktiv användning. 355 00:24:36,520 --> 00:24:39,340 Du laddar ner saker för ett syfte, vilket laddar ner dem för ett annat ändamål. 356 00:24:39,340 --> 00:24:41,520 Det är det avvägning där. 357 00:24:41,520 --> 00:24:44,510 De funktioner som är avsedda för interaktiv användning 358 00:24:44,510 --> 00:24:46,920 egentligen är för liten eller ingen användning för skript. 359 00:24:46,920 --> 00:24:52,160 Det är möjligt att använda en interaktiv under skal precis som den jag började där 360 00:24:52,160 --> 00:24:57,780 testa kommandon som du tänker använda i ett manus. 361 00:24:57,780 --> 00:25:01,180 Det är vad du inte kan göra med perl. Du kan göra det med skalen. 362 00:25:01,180 --> 00:25:04,850 Till och med de strukturer som för loopar och så vidare kan köras interaktivt. 363 00:25:04,850 --> 00:25:07,000 De är ibland bra att köra interaktivt, 364 00:25:07,000 --> 00:25:10,180 men mer troligt att du använder dem för att utveckla ett manus. 365 00:25:15,690 --> 00:25:17,400 >> Alias. 366 00:25:17,400 --> 00:25:21,630 Detta kommer att vara om C-skalet. 367 00:25:23,270 --> 00:25:27,570 Historia mekanism där du kommer tillbaka till tidigare kommandon 368 00:25:27,570 --> 00:25:30,340 eller delar av dem som du redan kör. 369 00:25:30,340 --> 00:25:33,680 Återigen, om C-skalet, Bourne-skalet och Korn-skalet har dessa saker, 370 00:25:33,680 --> 00:25:35,620 men jag kommer inte att komma in i dem. 371 00:25:35,620 --> 00:25:40,340 Så här är några användbara alias som jag har. 372 00:25:43,100 --> 00:25:44,880 Istället för att skriva ls - det är en vanlig kommando - 373 00:25:44,880 --> 00:25:47,620 skriv bara l och spara 1 tecken. 374 00:25:47,620 --> 00:25:50,600 ls med olika alternativ, alla dessa verk. 375 00:25:50,600 --> 00:25:54,460 Observera att dessa definitioner har citattecken runt dem. 376 00:25:54,460 --> 00:25:57,520 I dessa fall, citationstecknen är inte nödvändigt. 377 00:25:57,520 --> 00:26:00,100 Om du kan definiera dessa alias utan citattecken, skulle det ändå fungera. 378 00:26:00,100 --> 00:26:02,910 De rekommenderas. 379 00:26:02,910 --> 00:26:04,900 Det finns situationer där du inte kan använda citatet 380 00:26:04,900 --> 00:26:08,050 eftersom du vill att något ska hända som citatet skulle förhindra. 381 00:26:08,050 --> 00:26:11,210 Ibland kan du citera en del av definitionen, men inte alla av det. 382 00:26:11,210 --> 00:26:17,010 Det är också allmänt rekommenderas att använda enkla citattecken i stället för citattecken. 383 00:26:17,010 --> 00:26:19,750 Citationstecken har effekter på variabeldefinitioner, 384 00:26:19,750 --> 00:26:22,950 särskilt vilket får dem att utvärderas i stället att stoppa det. 385 00:26:22,950 --> 00:26:25,910 Varför skulle vi vilja att stoppa utvärderingen? 386 00:26:25,910 --> 00:26:28,710 Och hur gör offerter göra det för oss? 387 00:26:28,710 --> 00:26:32,600 >> Här är ett kommando som du kanske tycker är intressant. 388 00:26:32,600 --> 00:26:35,470 "Ls g * ' 389 00:26:35,470 --> 00:26:37,640 g *, som ni säkert vet, är ett jokertecken uttryck 390 00:26:37,640 --> 00:26:40,290 för alla filnamn som börjar med g.. 391 00:26:40,290 --> 00:26:46,410 Om jag bara skriver in ett kommando ls g *, får jag en lista med alla dessa namn i min nuvarande katalog. 392 00:26:46,410 --> 00:26:50,870 Om jag definierar det alias som det är här med citat, 393 00:26:50,870 --> 00:26:56,990 det kommer att köra det kommandot i din nuvarande katalog där du kör det. 394 00:26:56,990 --> 00:27:01,250 Men om du kör definitionen alias utan citattecken, 395 00:27:01,250 --> 00:27:09,620 det kommer att utvärdera joker g * när den körs detta definiera kommando. 396 00:27:09,620 --> 00:27:14,400 Så definitionen av alias kommer att ls följt av listan med filer i katalogen 397 00:27:14,400 --> 00:27:16,310 i vilken kommandot alias exekveras 398 00:27:16,310 --> 00:27:19,180 oavsett var du faktiskt har för avsikt att köra kommandot. 399 00:27:19,180 --> 00:27:26,360 Det är inte för mycket användning, och de enkla citationstecken hindrar utvärdering av asterisk. 400 00:27:26,360 --> 00:27:30,780 Så du bara få definitionen varelse ls g *. 401 00:27:30,780 --> 00:27:35,510 Sen när du kör alias, LGS, då uttrycker det som. 402 00:27:35,510 --> 00:27:40,490 Nu finns det inga citat, och det kommer att utvärdera asterisk när du kör kommandot alias. 403 00:27:40,490 --> 00:27:43,900 Så det är en sak. 404 00:27:43,900 --> 00:27:46,590 Dubbla citat skulle ha samma effekt här, 405 00:27:46,590 --> 00:27:50,580 men det finns andra fall där citattecken inte skulle fungera så bra. 406 00:27:50,580 --> 00:27:52,450 >> Här är en till. 407 00:27:52,450 --> 00:27:54,270 Du kanske vet kommandot grep. 408 00:27:54,270 --> 00:28:02,110 Den grep kommando kan användas för att skanna en fil för linjer som vissa strängar. 409 00:28:02,110 --> 00:28:10,350 Så låt oss gå över hit och jag ska avsluta min Bourne-skal. 410 00:28:23,570 --> 00:28:25,450 Okej. Här är en fil. 411 00:28:25,450 --> 00:28:31,490 Låt oss säga att det är grep abc strängar. Där är det. 412 00:28:31,490 --> 00:28:37,930 Om jag gör grep zddd, jag får ingenting. Okej. 413 00:28:37,930 --> 00:28:40,960 Så den hittar en sträng, det rapporterar, det spelar inte, det spelar inte rapportera det. 414 00:28:40,960 --> 00:28:44,930 Den matar ut alla rader som har den strängen på det. 415 00:28:44,930 --> 00:28:49,080 Det finns alla möjliga alternativ här som du kan hitta i dokumentationen. 416 00:28:49,080 --> 00:28:52,160 Här är ett sätt att göra det. 417 00:28:52,160 --> 00:29:03,290 Vad sägs om den här, alias grabc 'grep abc "? 418 00:29:03,290 --> 00:29:09,000 Det kommer att omfatta 1 argument när aliaset är definierad. 419 00:29:09,000 --> 00:29:26,300 Så om jag gör det här, nu, om jag gör grabc, 420 00:29:26,300 --> 00:29:30,620 nu alias omfattar mer än det enkla kommandot. Det har också argumentet. 421 00:29:30,620 --> 00:29:32,190 Så långt som fungerar. 422 00:29:32,190 --> 00:29:38,590 Jag har ett annat kommando här, den här, så de är olika strängar i det 423 00:29:38,590 --> 00:29:46,790 och visa att detta inte hitta något där eftersom det inte matchar. 424 00:29:46,790 --> 00:29:56,180 >> Vad händer om jag vill ha med i definitionen alias filen som jag ska söka 425 00:29:56,180 --> 00:30:02,970 och jag vill ge som ett argument till alias strängen som jag letar efter? 426 00:30:02,970 --> 00:30:08,040 Jag skulle vilja säga abc som argument till min pseudonym, 427 00:30:08,040 --> 00:30:10,870 men det alias redan bestämt filen. 428 00:30:10,870 --> 00:30:15,710 Och det är där detta uttryck kommer in 429 00:30:20,430 --> 00:30:25,270 Lägg märke till här har vi grep precis som tidigare. 430 00:30:25,270 --> 00:30:28,130 Vi har filen här, strängar. 431 00:30:28,130 --> 00:30:35,610 \! ^, Typ av en udda uttryck, antar jag, om du inte har sett det här förut. 432 00:30:35,610 --> 00:30:39,920 Utropstecken visas en del av den C-shell historia mekanism. 433 00:30:39,920 --> 00:30:45,220 Det kan påminna om tidigare kommandon, kan den återkalla argument till dessa kommandon och så vidare. 434 00:30:46,760 --> 00:31:01,570 Historien mekanism används som en del av aliasing. 435 00:31:01,570 --> 00:31:07,390 Om du anger en rad efter utropstecken, kommer det att hänvisa till denna rad i historiklistan 436 00:31:07,390 --> 00:31:11,910 som vi inte kommer att komma in nu, eftersom det är en helt annan fråga. 437 00:31:11,910 --> 00:31:16,280 Det är möjligt att ange en del av en linje. 438 00:31:16,280 --> 00:31:22,950 Så 03:02! Skulle vara det andra argumentet i kommandonummer 3. 439 00:31:22,950 --> 00:31:30,430 Den cirkumflex här i detta uttryck står för det första argumentet. 440 00:31:30,430 --> 00:31:34,410 Om du inte ger det en indikation på vilket kommando du hänvisar till, 441 00:31:34,410 --> 00:31:37,300 den hänvisar till den omedelbart föregående kommando, 442 00:31:37,300 --> 00:31:41,990 och cirkumflex är en symbol för det första argumentet. 443 00:31:41,990 --> 00:31:46,820 Eftersom det är cirkumflex och inte antalet, behöver du inte använda kolon, 444 00:31:46,820 --> 00:31:52,660 så! ^ innebär det första argumentet till föregående kommando. 445 00:31:52,660 --> 00:31:55,020 Lite blandat här. 446 00:31:55,020 --> 00:31:58,450 I det här fallet, när du använder detta som en definition alias, 447 00:31:58,450 --> 00:32:04,650 historia hänvisningen hänvisar till de kommandon där alias används. 448 00:32:04,650 --> 00:32:08,470 Så detta kommer tillbaka 1 kommando som en historia operation, 449 00:32:08,470 --> 00:32:11,810 men som ett alias operation den hänvisar till kommandot som du skulle skriva, 450 00:32:11,810 --> 00:32:14,780 säga, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Vi har de citat här i det. Vad är det omvända snedstrecket för? 452 00:32:20,240 --> 00:32:30,810 I detta fall, liksom på andra håll, vi vill inte köra historien mekanismen 453 00:32:30,810 --> 00:32:33,680 samtidigt definiera alias. 454 00:32:33,680 --> 00:32:37,900 Om vi ​​inte hade omvänt snedstreck där, skulle skalet dra in det första argumentet 455 00:32:37,900 --> 00:32:41,870 av kommandot precis innan det körde detta alias kommando, som vi inte vill ha. 456 00:32:41,870 --> 00:32:47,520 Vi vill att det ska byggas in i kommandot alias att kalla in ett argument senare. 457 00:32:47,520 --> 00:32:53,550 Apostrof inte undgå ett utropstecken, historia referens. 458 00:32:53,550 --> 00:32:57,450 Kanske vet du uttrycket fly innebär att ändra innebörden av något. 459 00:32:57,450 --> 00:33:00,260 I det här fallet betyder det att stoppa något från att ha en speciell betydelse. 460 00:33:00,260 --> 00:33:03,030 Utropstecken har speciell betydelse är historia. 461 00:33:03,030 --> 00:33:05,790 Escape och det har inte den innebörden. 462 00:33:05,790 --> 00:33:08,080 Citat gör inte det, omvänt snedstreck gör. 463 00:33:08,080 --> 00:33:11,900 Så vi faktiskt använder två nivåer för att fly hit. 464 00:33:23,500 --> 00:33:29,620 Jag kommer att flytta den här kommandot i det andra fönstret utan att skriva det 465 00:33:29,620 --> 00:33:35,210 genom att använda dessa redigeringsåtgärder, som du kan ha nytta av. 466 00:33:40,620 --> 00:33:42,460 Något annat här ska jag visa dig. 467 00:33:42,460 --> 00:33:46,730 Om du bara skriva alias utan argument, säger det dig alla dina argument. 468 00:33:46,730 --> 00:33:48,640 Det här är ett gäng alias jag redan hade här 469 00:33:48,640 --> 00:33:53,400 förutom de som jag har använt här i dag. 470 00:33:53,400 --> 00:34:00,220 Men om jag skriver bara med namnet på ett alias, säger det mig vad det betyder. 471 00:34:00,220 --> 00:34:03,390 Observera att citat är borta och det omvända snedstrecket är borta. 472 00:34:03,390 --> 00:34:08,620 Denna sträng här är resultatet av att alias definition, 473 00:34:08,620 --> 00:34:12,199 och nu har det bara! ^ i den. 474 00:34:12,199 --> 00:34:19,150 Det här kommer att se ut i filen strängar för någonting. 475 00:34:19,150 --> 00:34:34,900 Så om jag gör grstrings_file strängar, det gjorde jag inte ge den något att leta efter det, 476 00:34:34,900 --> 00:34:37,429 men det ser i strängar. 477 00:34:37,429 --> 00:34:42,330 Den hittade inte ordet strängar i filen strängar, men det finna abc. 478 00:34:42,330 --> 00:34:46,770 Och den inte hittar det. 479 00:34:46,770 --> 00:34:52,330 Så här ger vi ett argument som slår in i definitionen av alias, 480 00:34:52,330 --> 00:34:55,530 som sätts in i den. 481 00:34:55,530 --> 00:34:58,540 Det är där detta uttryck kommer ifrån. 482 00:34:58,540 --> 00:35:00,240 Du kan använda mer än 1. 483 00:35:00,240 --> 00:35:03,170 Cirkumflex är en symbol för det första argumentet. 484 00:35:03,170 --> 00:35:07,510 Om du vill använda ett andra argument, skulle du då säga: 2. 485 00:35:07,510 --> 00:35:11,250 Det finns ingen särskild symbol för det andra argumentet. 486 00:35:11,250 --> 00:35:14,790 Och eftersom du använder en siffra, skulle du behöva använda kolon. 487 00:35:14,790 --> 00:35:17,220 Det finns dock ett annat val här. 488 00:35:17,220 --> 00:35:21,220 Dollartecknet står för det sista argumentet. 489 00:35:21,220 --> 00:35:23,320 Och eftersom det är en symbol, kan du utelämna tjocktarmen. 490 00:35:23,320 --> 00:35:25,870 Så det skulle vara det sista argumentet i listan. 491 00:35:25,870 --> 00:35:27,900 Och det finns också att en. 492 00:35:27,900 --> 00:35:31,380 Asterisk betyder allt, så det här är den fullständiga argumentlistan, 493 00:35:31,380 --> 00:35:35,150 och igen, kan du utelämna tjocktarmen eftersom det inte är en siffra. 494 00:35:36,970 --> 00:35:39,950 Jag hoppas att ni alla observera allt detta. 495 00:35:39,950 --> 00:35:54,100 >> Historien Mekanismen kan gå tillbaka till tidigare rader i historiklistan. 496 00:35:54,100 --> 00:36:01,370 Du kan göra detta i en definition alias. 497 00:36:01,370 --> 00:36:02,950 Jag har aldrig sett detta gjort. 498 00:36:02,950 --> 00:36:05,840 Det skulle få till följd att dra ut tidigare kommandon från historielistan 499 00:36:05,840 --> 00:36:08,130 när du kör alias, som kan vara olika kommandon 500 00:36:08,130 --> 00:36:11,240 beroende på när och var du kör det. 501 00:36:11,240 --> 00:36:14,020 Möjligen kanske du vill dra ut en sådan hänvisning 502 00:36:14,020 --> 00:36:15,900 bara veta vad ett tidigare kommando var. 503 00:36:15,900 --> 00:36:17,280 Jag har aldrig sett detta hända. 504 00:36:17,280 --> 00:36:19,970 Jag antar att någon kanske vill, men det är mycket osannolikt. 505 00:36:19,970 --> 00:36:26,480 Det finns en annan sak här. 506 00:36:26,480 --> 00:36:33,060 Om du använder den historia-typ referens, 507 00:36:33,060 --> 00:36:38,190 då endast de argument till vilka det finns en sådan hänvisning används. 508 00:36:38,190 --> 00:36:42,180 Om du har ett alias definition som inte använder en referens historia-typ, 509 00:36:42,180 --> 00:36:44,060 om det bara blir början av kommandot 510 00:36:44,060 --> 00:36:46,520 och du har ytterligare argument, då allt du skriver efter detta 511 00:36:46,520 --> 00:36:48,450 kommer att läggas till kommandot. 512 00:36:48,450 --> 00:36:52,040 I det här fallet, det exempel jag gav bara där, använde vi det första argumentet; 513 00:36:52,040 --> 00:36:54,610 Vi använde inte några andra. 514 00:36:54,610 --> 00:36:57,960 Om andra argument hade fått på kommandoraden, skulle de inte användas. 515 00:36:57,960 --> 00:37:04,630 Så om du använder historien referens alls, då måste du använda den för att få något argument. 516 00:37:04,630 --> 00:37:11,310 >> Det finns en annan sak här vill jag bara nämna, dels parentes, 517 00:37:11,310 --> 00:37:15,250 nämligen att denna historia mekanism med utropstecken 518 00:37:15,250 --> 00:37:18,010 går tillbaka till den ursprungliga C-shell. 519 00:37:18,010 --> 00:37:27,060 Den tcsh introducerade historie operationer 520 00:37:27,060 --> 00:37:30,910 som använder den typ av kommandon och strängar från redaktionen, 521 00:37:30,910 --> 00:37:33,650 antingen Emacs eller VI. 522 00:37:33,650 --> 00:37:36,430 Min personliga åsikt är Emacs är mycket lättare att använda för detta ändamål 523 00:37:36,430 --> 00:37:39,390 även om du använder vi för din vanliga redigering. 524 00:37:39,390 --> 00:37:43,900 Det finns olika kommandon i Emacs, som nu är anpassade för historien. 525 00:37:43,900 --> 00:37:46,410 Kontroll P får föregående rad i historiklistan. 526 00:37:46,410 --> 00:37:48,840 En annan kontroll P får du den innan dess. 527 00:37:48,840 --> 00:37:50,540 Den uppåtpilen gör samma sak. 528 00:37:50,540 --> 00:37:54,190 Kontroll N blir nästa kommando om du redan har rullat tillbaka vissa sätt. 529 00:37:54,190 --> 00:37:55,880 Pil ned gör det också. 530 00:37:55,880 --> 00:38:00,480 Du kan flytta vänster till höger med pilarna och diverse andra saker. 531 00:38:00,480 --> 00:38:02,390 Detta kan göra bruk av historien mekanism 532 00:38:02,390 --> 00:38:05,070 mycket enklare än att använda utropstecken syntax, 533 00:38:05,070 --> 00:38:07,930 men du skulle inte använda det i en definition alias. 534 00:38:17,780 --> 00:38:20,020 Vi kommer att gå över att en annan gång. 535 00:38:24,300 --> 00:38:25,810 >> Variabler. 536 00:38:26,880 --> 00:38:29,510 Du vet vad variabler i programmeringsspråk. 537 00:38:29,510 --> 00:38:31,680 Skalen har dem också. 538 00:38:31,680 --> 00:38:37,350 Den C-shell använder kommandot set för att tilldela variabler, 539 00:38:37,350 --> 00:38:41,360 så som sätter variabeln a till värdet av b - 540 00:38:41,360 --> 00:38:46,390 som sagt, en värdelös definition men en illustration av hur det används. 541 00:38:48,790 --> 00:38:52,410 Den inställda kommandot kommer att skapa en variabel om den inte redan finns. 542 00:38:55,270 --> 00:39:02,490 De positionsparametrar för skalskript kan anses vara variabler, 543 00:39:02,490 --> 00:39:10,750 men användningen av dem och reglerna för dem är något annorlunda. 544 00:39:10,750 --> 00:39:14,320 Du kan inte tilldela ett värde till $ 1 under loppet av ett skript. 545 00:39:14,320 --> 00:39:18,340 Du måste definiera en ny variabel för detta ändamål, om några av er ville. 546 00:39:23,000 --> 00:39:28,470 Skriv in utan argument, och du får en lista över alla för tillfället definierade variabler. 547 00:39:28,470 --> 00:39:34,220 Och låt oss komma över till min andra skal här och se vad vi får om vi gör det. 548 00:39:34,220 --> 00:39:37,110 Ganska lång lista där, eller hur? 549 00:39:37,110 --> 00:39:40,990 Rulla upp lite. Titta på allt det där. 550 00:39:40,990 --> 00:39:44,330 Några av dessa saker definieras automatiskt av skalet. 551 00:39:44,330 --> 00:39:49,320 Skalet skapar variabeln och ger den ett värde. 552 00:39:49,320 --> 00:39:52,730 Några av dem som definieras av skalet men sedan omdefinieras av användaren 553 00:39:52,730 --> 00:39:54,820 enligt hans önskemål. 554 00:39:54,820 --> 00:39:59,110 Och en del av dem är skapade av användaren beroende på vad han gör den dagen. 555 00:39:59,110 --> 00:40:01,880 Det är bara in utan argument. 556 00:40:06,920 --> 00:40:10,050 Det är en udda inslag här i denna sak. 557 00:40:10,050 --> 00:40:17,980 Det måste vara antingen något mellanrum mellan likhetstecknet och variabelnamnet 558 00:40:17,980 --> 00:40:23,700 och värdet eller utrymmen på båda sidor om likhetstecknet, 559 00:40:23,700 --> 00:40:28,940 som i det här. 560 00:40:35,620 --> 00:40:41,340 Detta kommer inte att fungera, och detta faktiskt är ett giltigt kommando 561 00:40:41,340 --> 00:40:43,390 men det kommer inte göra vad du tänker. 562 00:40:43,390 --> 00:40:50,070 Detta kommando kommer att arbeta för om du bara säga satt och ett variabelnamn 563 00:40:50,070 --> 00:40:54,890 utan likhetstecken eller ställa och ett variabelnamn med ett likhetstecken och inget värde, 564 00:40:54,890 --> 00:40:57,770 det kommer att ställa in variabeln på ett nollvärde. 565 00:40:57,770 --> 00:41:00,120 Så satt a = är ett giltigt kommando. 566 00:41:00,120 --> 00:41:04,370 Kommandot set kan definiera mer än 1 variabel på samma rad. 567 00:41:04,370 --> 00:41:11,240 Så här kommandot här har effekten av att definiera både a och b till null-värden. 568 00:41:11,240 --> 00:41:13,470 Förmodligen inte vad du vill. 569 00:41:13,470 --> 00:41:17,940 Denna en här, som nämndes tidigare, kommer att leda till ett fel 570 00:41:17,940 --> 00:41:21,270 eftersom = b inte är ett giltigt uttryck. 571 00:41:21,270 --> 00:41:23,680 Ett variabelnamn får inte börja med likhetstecken. 572 00:41:26,760 --> 00:41:29,080 Och det finns dessa ytterligare saker här. 573 00:41:29,080 --> 00:41:36,820 De kolon användes för att välja argument från historielinjer, 574 00:41:36,820 --> 00:41:41,210 och de kan användas - och jag ville inte gå in i tidigare - att ändra dessa saker. 575 00:41:41,210 --> 00:41:44,480 De kan också användas för att modifiera skalvariabler. 576 00:41:44,480 --> 00:41:49,050 Den här här, $ a, har ett värde. 577 00:41:49,050 --> 00:41:55,040 : R kommer att ta bort en förlängning. 578 00:41:55,040 --> 00:41:57,200 En förlängning kommer att vara vad som helst efter en punkt, 579 00:41:57,200 --> 00:41:59,200 en prick och allt efter den i slutet av en fil, 580 00:41:59,200 --> 00:42:03,230 först i slutet av listan efter det sista snedstrecket. 581 00:42:03,230 --> 00:42:05,480 Så jag har det här. 582 00:42:05,480 --> 00:42:10,730 en är det. Det kommer att släppa den. O.. 583 00:42:10,730 --> 00:42:16,510 Om det inte finns någon förlängning, bara de sökvägar efter sista snedstrecket, kommer det att ha någon effekt. 584 00:42:16,510 --> 00:42:27,480 a: h, att rörlig uttryck, kommer att ta bort det sista elementet i en kataloglista, 585 00:42:27,480 --> 00:42:29,660 igen, först efter att den sista snedstreck. 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 detta ändras eftersom elementet efter det att förteckningen är null. 588 00:42:38,870 --> 00:42:43,070 Här finns det något som också vill jag betona. 589 00:42:43,070 --> 00:42:46,770 Dessa kval inte söka efter förekomsten av dessa filer. 590 00:42:46,770 --> 00:42:48,910 De ser bara för strängar. 591 00:42:48,910 --> 00:42:54,520 Dessa är avsedda att manipulera filnamn, sökvägar, 592 00:42:54,520 --> 00:42:57,520 men de kan användas på varje sträng, även om det inte är ett filnamn. 593 00:42:57,520 --> 00:42:58,920 Och de ser inte att det finns, 594 00:42:58,920 --> 00:43:03,550 så om det inte finns någon sådan fil, / a / b / c, det fungerar fortfarande. 595 00:43:03,550 --> 00:43:06,930 Oavsett om det är till någon nytta är en annan fråga, men det fungerar fortfarande. 596 00:43:06,930 --> 00:43:12,850 Variabler är olika i de Bourne skal. Vi kommer till det senare. 597 00:43:12,850 --> 00:43:18,240 Dollartecken kan undkom precis som utropstecken och asterisk. 598 00:43:18,240 --> 00:43:21,760 Dollartecken kan vara ett omvänt snedstreck eller enkla citationstecken. 599 00:43:21,760 --> 00:43:24,790 Citationstecken har den udda effekt i alla skal 600 00:43:24,790 --> 00:43:28,690 att tvinga utvärderingen av ett dollartecken variabel uttryck. 601 00:43:28,690 --> 00:43:31,960 Så om det är som rymt ett sätt, kan de dubbla citattecken medföra 602 00:43:31,960 --> 00:43:34,380 att orsaka att den kan utvärderas på något sätt. 603 00:43:34,380 --> 00:43:37,090 Det är lite förvirrande. 604 00:43:37,090 --> 00:43:43,740 Om det finns flera nivåer av att fly, till exempel enkla citationstecken inne citationstecken 605 00:43:43,740 --> 00:43:46,770 eller citattecken inuti enkla citattecken, bör du testa att se vad som kommer att hända 606 00:43:46,770 --> 00:43:49,520 till en variabel om du använder en. 607 00:43:49,520 --> 00:43:53,410 Dessa två situationer - dubbel insidan av singel, singel insidan av dubbel - 608 00:43:53,410 --> 00:43:55,980 inte nödvändigtvis ger samma resultat. 609 00:44:02,520 --> 00:44:05,600 Miljövariabler, bundna C-skalet variabler. 610 00:44:05,600 --> 00:44:08,340 Miljövariabler är också variabler i C-skalet, 611 00:44:08,340 --> 00:44:11,250 och de är också variabler i andra skal också. 612 00:44:11,250 --> 00:44:15,230 I C-skalet, de är distinkta uppsättningar. 613 00:44:15,230 --> 00:44:18,130 De saker jag sa tidigare är om skalvariabler. 614 00:44:18,130 --> 00:44:21,300 Miljövariabler är en distinkt uppsättning variabler 615 00:44:21,300 --> 00:44:28,650 med undantag av flera variabler som vi kallar bundna variabler, 616 00:44:28,650 --> 00:44:30,640 som är mycket viktiga och vi kommer att få in dem senare. 617 00:44:30,640 --> 00:44:34,950 Miljövariabler automatiskt förs vidare 618 00:44:34,950 --> 00:44:41,800 till snäckor eller kommandon som körs från ditt skal. 619 00:44:41,800 --> 00:44:46,220 De andra saker inte. De skalet variabler, alias inte. Miljövariabler är. 620 00:44:46,220 --> 00:44:48,630 Det är därför vi kallar dem miljövariabler, 621 00:44:48,630 --> 00:44:55,030 Tanken är att miljön sträcker sig förbi just din aktuella skalet. 622 00:44:55,030 --> 00:45:00,510 De kan användas för att definiera saker för kommandon. 623 00:45:00,510 --> 00:45:05,470 Här är ett exempel. PRINTER, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Båda dessa variabler kan definiera en skrivare som ett kommando kommer att använda för att skriva ut saker. 625 00:45:12,270 --> 00:45:16,500 Om du har flera skrivare runt, kanske du vill sätta den du gillar. 626 00:45:16,500 --> 00:45:21,320 Anledningen till att vi har två variabler är att olika typer av kommandon skrevs 627 00:45:21,320 --> 00:45:23,870 med hjälp av dessa olika variabler. 628 00:45:23,870 --> 00:45:25,910 Du kan ge dem olika värden. 629 00:45:25,910 --> 00:45:28,860 Mycket troligt att du ska ge dem båda samma värde. 630 00:45:28,860 --> 00:45:35,840 Dessa saker fungerar eftersom de kommandon som gör utskrifter 631 00:45:35,840 --> 00:45:40,740 var programmerade att undersöka värdena för dessa variabler. 632 00:45:42,200 --> 00:45:46,150 Om ett program inte var skrivna på det sättet, om det skrevs för att göra något annat, 633 00:45:46,150 --> 00:45:48,280 variabeln skulle vara irrelevant. 634 00:45:48,280 --> 00:45:52,530 Så operativsystemet inte är ute efter dessa variabler 635 00:45:52,530 --> 00:45:55,210 varje gång du hänvisar till en skrivare. 636 00:45:55,210 --> 00:45:59,090 Ett kommando som gör utskriften är ute efter dessa variabler om den är programmerad så. 637 00:46:11,030 --> 00:46:15,240 Dessa variabler definieras ofta i dina inställningsfiler 638 00:46:15,240 --> 00:46:19,440 men inte nödvändigtvis. 639 00:46:19,440 --> 00:46:21,050 Du kan definiera dem på kommandoraden. 640 00:46:21,050 --> 00:46:24,090 De kan definieras på ett kommando. 641 00:46:24,090 --> 00:46:28,740 Ett kommando som kör något kan ha ett eget val av variabler - 642 00:46:28,740 --> 00:46:32,390 variabler som är unika för en viss programvarupaket, till exempel. 643 00:46:32,390 --> 00:46:36,740 De kommer att fastställas när du kör det paketet. 644 00:46:39,690 --> 00:46:42,680 Hur är dessa variabler skickas till en sub-shell? 645 00:46:42,680 --> 00:46:48,210 När en sub-skal är skrivet, betyder inte att skriva in i det området. 646 00:46:48,210 --> 00:46:53,260 Det område av sub-skal som ägnas åt miljövariabler 647 00:46:53,260 --> 00:46:56,450 är inte skriven av sub-tanken, den är skriven av kopiering. 648 00:46:56,450 --> 00:47:00,530 När du kör ett vanligt kommando, till exempel dessa kommandon för att skriva ut eller vad som helst, 649 00:47:00,530 --> 00:47:03,840 De börjar med att skapa ett nytt skal. 650 00:47:03,840 --> 00:47:06,190 Skalet skapar ett skal och sedan skriver över en del av det 651 00:47:06,190 --> 00:47:08,800 med kommandot som du kör, vilket är lite förvirrande, 652 00:47:08,800 --> 00:47:10,740 men det är hur dessa kommandon får miljövariablerna 653 00:47:10,740 --> 00:47:14,890 att de sedan hänvisa till senare. 654 00:47:21,920 --> 00:47:28,010 Kommandot här för att definiera variabeln setenv. 655 00:47:28,010 --> 00:47:36,470 Det är hur du definierar det. Det är tre element: setenv, variabel, värde. 656 00:47:36,470 --> 00:47:44,710 Om du bara gör setenv utan argument, vad får du? 657 00:47:47,220 --> 00:47:48,810 En lista på alla dessa variabler. 658 00:47:48,810 --> 00:47:53,190 Återigen, det är en fin lång lista och i detta fall, liksom i de andra, 659 00:47:53,190 --> 00:47:57,320 Dessa variabler definieras till stor del av min inloggning operation av skalet själv 660 00:47:57,320 --> 00:47:59,740 snarare än av något jag gjorde. 661 00:47:59,740 --> 00:48:03,580 Det finns en annan kommando här, printenv. 662 00:48:07,520 --> 00:48:10,340 Det skriver också ut i miljön. 663 00:48:10,340 --> 00:48:15,240 Lägg märke till det sista här, redaktör = vi. 664 00:48:15,240 --> 00:48:21,120 Det säger att om jag använder något som kräver en redaktör 665 00:48:21,120 --> 00:48:25,530 och jag vill inte ange en editor och det gör mig valet, kan det ge mig vi. 666 00:48:25,530 --> 00:48:37,280 Vad händer om jag gör printenv EDITOR? Den talar om för mig vad det är. 667 00:48:37,280 --> 00:48:41,340 Precis innan det fanns en variabel, MINDRE. 668 00:48:41,340 --> 00:48:46,040 Dessa är dina standardinställningar alternativ när jag kör MINDRE kommandot, 669 00:48:46,040 --> 00:48:49,360 som visar filer. 670 00:48:49,360 --> 00:48:55,910 Så om jag gör det, kan printenv ta 1 argument eller 0 argument, 671 00:48:55,910 --> 00:48:58,070 inte mer än 1. 672 00:49:01,800 --> 00:49:05,690 Det finns andra kommandon också, men vi kommer inte att få in allt det i dag. 673 00:49:05,690 --> 00:49:11,010 Kom ihåg att det var de modifierare för skalvariabler som: h, 674 00:49:11,010 --> 00:49:14,350 som kommer att släppa det sista elementet i en sökväg, 675 00:49:14,350 --> 00:49:17,950 eller: r, som kommer att släppa en förlängning. 676 00:49:17,950 --> 00:49:23,110 De som nu tillämpas på miljövariablerna också. De brukade inte. 677 00:49:23,110 --> 00:49:24,960 Det brukade vara så att de inte skulle kunna ändras. Nu kan de vara. 678 00:49:24,960 --> 00:49:29,190 Det är en av de framsteg med utvecklingen av skalen genom åren. 679 00:49:29,190 --> 00:49:35,620 Jag sa att skalen som en del av de miljöer 680 00:49:35,620 --> 00:49:43,040 och skalvariabler i C-skalet är, med några undantag, distinkta uppsättningar. 681 00:49:43,040 --> 00:49:46,790 Du kan skapa en miljövariabel och en skalvariabel med samma namn. 682 00:49:46,790 --> 00:49:49,220 De kommer att vara olika variabler, de kan ha olika värden. 683 00:49:49,220 --> 00:49:53,090 Justering av värdet i en kommer inte ändra värdet på den andra. 684 00:49:53,090 --> 00:49:58,070 Dessa variabler är alla utvärderas med dollartecken - $ a, $ vad. 685 00:49:58,070 --> 00:50:02,340 Så vad händer om du har det? Vet du vilken som du får? 686 00:50:02,340 --> 00:50:04,520 I mina tester fick jag skalvariabel, 687 00:50:04,520 --> 00:50:07,240 men detta inte är dokumenterat och man kan inte lita på det. 688 00:50:07,240 --> 00:50:10,270 Så jag ber er, är att skapa skal och miljövariabler 689 00:50:10,270 --> 00:50:13,490 med samma namn en bra idé? Nej Okej. 690 00:50:13,490 --> 00:50:17,460 Vilka är de stora undantag i vilken miljö och skalvariabler 691 00:50:17,460 --> 00:50:19,860 är kopplade till varandra? 692 00:50:19,860 --> 00:50:27,470 Det finns dessa 4. 693 00:50:32,030 --> 00:50:35,510 Versalt TERM miljövariabel, 694 00:50:35,510 --> 00:50:41,540 skal variabel term i små bokstäver, typ av terminalemulering. 695 00:50:41,540 --> 00:50:47,430 Jag ska bara gå hit och jag kommer att göra eko, ett användbart kommando här, 696 00:50:47,430 --> 00:50:52,560 $ TERM $ sikt. Och där. 697 00:50:52,560 --> 00:51:00,570 xterm är en terminal typ av fönster som visas i X Window System. 698 00:51:00,570 --> 00:51:04,330 xterm-färg är en variant av det som gör att olika färger. 699 00:51:04,330 --> 00:51:06,580 Varför definierar vi dessa? Vad är det bra för? 700 00:51:06,580 --> 00:51:09,740 Kommandon som organiserar om skärmen som redaktören 701 00:51:09,740 --> 00:51:13,680 skicka speciella sekvenser, så kallade escape-sekvenser, 702 00:51:13,680 --> 00:51:18,160 till en terminal eller ett fönster för att arrangera om den och så vidare. 703 00:51:18,160 --> 00:51:20,990 Dessa sekvenser är olika för olika typer av terminaler. 704 00:51:20,990 --> 00:51:23,100 Detta säger det vilka som ska användas. 705 00:51:23,100 --> 00:51:25,900 Ibland finns det frågor där. 706 00:51:25,900 --> 00:51:28,600 Du kanske vill ändra på det. 707 00:51:28,600 --> 00:51:30,780 Om saker inte fungerar, ibland terminaltypen är inställd fel, 708 00:51:30,780 --> 00:51:36,440 du kanske kan fixa det genom att omdefiniera begreppet variabel. 709 00:51:36,440 --> 00:51:43,420 I dessa fall förändras en variabel, miljön variabel eller skalet variabel, 710 00:51:43,420 --> 00:51:45,970 bör ändra den andra. 711 00:51:45,970 --> 00:51:50,970 Jag har upptäckt genom erfarenhet att ändra TERM med versaler 712 00:51:50,970 --> 00:51:54,060 inte alltid ändra skalvariabel term med små bokstäver. 713 00:51:54,060 --> 00:51:55,550 Detta är en bugg. 714 00:51:55,550 --> 00:51:59,400 Jag vet inte om det är alltid sant. För det mesta är det inte sant, men det kan vara. 715 00:51:59,400 --> 00:52:02,490 Så om du gör en förändring, bara kolla som. 716 00:52:02,490 --> 00:52:05,830 Det är inte ofta som du behöver ändra detta värde, men då och då du gör. 717 00:52:05,830 --> 00:52:08,260 Miljövariabeln ANVÄNDARE. 718 00:52:08,260 --> 00:52:12,070 Återigen, miljövariabel med versaler, skal variabel i små bokstäver. 719 00:52:12,070 --> 00:52:13,710 Det här är ditt användarnamn. 720 00:52:13,710 --> 00:52:16,730 Det är endast under mycket exceptionella omständigheter 721 00:52:16,730 --> 00:52:18,420 som du skulle vilja ändra på det. 722 00:52:18,420 --> 00:52:22,350 Om ditt användarnamn är någon annan, kan det kasta alla möjliga saker. 723 00:52:22,350 --> 00:52:26,040 Hemkatalog, användarens hemkatalog. 724 00:52:26,040 --> 00:52:28,060 Återigen, skulle du inte vill ändra på det. 725 00:52:28,060 --> 00:52:32,260 Lägg märke till i alla dessa fall och det som vi är på väg att täcka, sökvägen variabeln, 726 00:52:32,260 --> 00:52:37,070 miljövariabel är i versaler och den bundna skalvariabel är med små bokstäver. 727 00:52:37,070 --> 00:52:39,240 Om du ändrar en, bör du byta den andra. 728 00:52:39,240 --> 00:52:45,960 Denna typ av bindning kan inte fastställas eftersom du inte kan binda två variabler, 729 00:52:45,960 --> 00:52:50,570 annat än dessa 4, och bindningen i dessa variabler kan inte göras ogjort, 730 00:52:50,570 --> 00:52:52,090 du kan inte skilja dem åt. 731 00:52:52,090 --> 00:52:55,820 Så dessa 4 par variabler är bundna. 732 00:52:55,820 --> 00:52:59,020 De kommer alltid att finnas. Inga andra kommer att vara. 733 00:52:59,020 --> 00:53:05,720 Dessutom skulle det vara möjligt att skapa variabler med samma namn 734 00:53:05,720 --> 00:53:07,780 av de motsatta typer. 735 00:53:07,780 --> 00:53:11,600 Du kan göra en skalvariabel term med små bokstäver 736 00:53:11,600 --> 00:53:14,990 eller miljövariabeln TERM med versaler. 737 00:53:14,990 --> 00:53:19,040 Dessa variabler skulle vara oberoende av dessa parade variabler 738 00:53:19,040 --> 00:53:20,780 och de skulle vara oberoende av varandra. 739 00:53:20,780 --> 00:53:23,780 Jag kan inte föreställa mig varför du skulle göra det om du inte vill förvirra folk. 740 00:53:24,600 --> 00:53:29,730 Den här här, stig variabel, är detta en riktigt viktig. 741 00:53:29,730 --> 00:53:35,550 En annan sak här är att det kan finnas fall 742 00:53:35,550 --> 00:53:40,430 variabler med liknande parade namn som inte är bundna till varandra. 743 00:53:40,430 --> 00:53:45,000 Det kan vara variabler, skal och skal, med stora och små bokstäver. 744 00:53:45,000 --> 00:53:48,300 Baserat på det namnet, vet du inte om den variabeln är en skalvariabel 745 00:53:48,300 --> 00:53:51,580 eller en miljövariabel, och de är inte bundna till varandra. 746 00:53:51,580 --> 00:53:55,300 Så den typen av parade namn innebär inte bundna variabler. 747 00:53:55,300 --> 00:53:58,830 Stigen variabel, som jag visade tidigare, 748 00:53:58,830 --> 00:54:01,880 är en lista med sökvägar där skalet letar efter kommandon. 749 00:54:01,880 --> 00:54:12,320 Låt oss komma över till detta fönster här och vi ska göra echo $ PATH, versaler - 750 00:54:12,320 --> 00:54:20,230 miljövariabel - echo $ bana, små bokstäver - shell variabel. 751 00:54:20,230 --> 00:54:24,980 Observera att listan med kataloger är densamma. Dessa är bundna. 752 00:54:24,980 --> 00:54:26,590 Ändra en, ändrar du den andra. 753 00:54:26,590 --> 00:54:32,970 I miljövariabeln elementen är separerade med kolon. Lägg märke till att. 754 00:54:32,970 --> 00:54:35,130 De skalvariabler separeras med mellanslag. 755 00:54:35,130 --> 00:54:38,760 Denna miljövariabel är en enda sträng. 756 00:54:38,760 --> 00:54:41,480 Skalet variabeln är en array. 757 00:54:41,480 --> 00:54:43,490 The Bourne shell hade inte arrayer. 758 00:54:43,490 --> 00:54:46,600 Pucklar gör, men detta är redan en fast del av skalet. 759 00:54:46,600 --> 00:54:48,660 Detta är en enda sträng och inte en array. 760 00:54:48,660 --> 00:54:50,420 I C-skalet hade alltid arrayer. 761 00:54:50,420 --> 00:54:52,630 De arrayer är mycket lättare att arbeta med. 762 00:54:52,630 --> 00:54:54,400 Du kan hänvisa till delar av den. 763 00:54:54,400 --> 00:55:02,350 Så echo $ path [1] och jag får / usr / bin, det första elementet. 764 00:55:02,350 --> 00:55:09,950 Återigen, kom ihåg dollartecken står för det sista elementet i historiklistan. 765 00:55:09,950 --> 00:55:16,850 Vad händer där? Man försökte hitta dollartecken som en variabel symbol. 766 00:55:16,850 --> 00:55:20,850 Jag fly den. Oj. Det skulle inte ta det heller. 767 00:55:20,850 --> 00:55:23,690 Några av dessa saker inte fungerar så bra. 768 00:55:23,690 --> 00:55:28,140 Kanske ska vi bara lämna ut det. 769 00:55:28,140 --> 00:55:36,980 Asterisk hänvisar till det hela, men det är vad du får om du inte anger ett element. 770 00:55:36,980 --> 00:55:46,170 Ett annat sätt att fältvariabler kan manipuleras, 771 00:55:46,170 --> 00:55:49,500 antal element där, 7 element. 772 00:55:49,500 --> 00:55:53,410 Här lägger vi nummertecken före variabelnamnet. 773 00:55:53,410 --> 00:55:58,280 Här är en till. Sätt ett frågetecken där. 774 00:55:58,280 --> 00:56:03,170 Det är ett logiskt värde. Det indikerar att variabeln existerar. 775 00:56:03,170 --> 00:56:05,160 Det är ett annat sätt att arbeta med variabler. 776 00:56:05,160 --> 00:56:06,660 Det, förresten, inte behöver vara en array variabel. 777 00:56:06,660 --> 00:56:08,210 Det skulle kunna vara vilken variabel. 778 00:56:08,210 --> 00:56:11,840 Och om jag gör det, det finns ingen sådan variabel och jag får en 0. 779 00:56:11,840 --> 00:56:14,990 En annan liten sak där om variabla utvärderingar. 780 00:56:23,670 --> 00:56:32,950 Tillbaka till detta här, om du av någon anledning ville arbeta med detta 781 00:56:32,950 --> 00:56:37,990 snarare än att arbeta med matrisen, skalvariabel, 782 00:56:37,990 --> 00:56:41,470 det finns kommandon som kan separera dessa saker baserat på tjocktarmen. 783 00:56:41,470 --> 00:56:44,080 Faktum är att om du ska göra detta i Bash skal möjligen, 784 00:56:44,080 --> 00:56:47,110 någon form av ett manus, det skulle vara nog hur du skulle göra det. 785 00:56:47,110 --> 00:56:50,350 Men i C-skalet är det mycket lättare att använda arrayen. 786 00:56:50,350 --> 00:56:58,250 I Bourne-skalet, är variabler som tilldelas av ett enda uttryck som detta, 787 00:56:58,250 --> 00:57:01,760 gillar hur du kan tilldela en variabel i ett programmeringsspråk, 788 00:57:01,760 --> 00:57:05,110 och här måste det finnas några blanksteg. 789 00:57:05,110 --> 00:57:09,110 Det är nödvändigt att det bara vara en sträng. 790 00:57:09,110 --> 00:57:14,980 I Bourne-typ skal, alla variabler skalvariabler. 791 00:57:14,980 --> 00:57:19,250 Miljövariabler är en delmängd av de skalvariabler. 792 00:57:19,250 --> 00:57:24,060 De skiljer sig från de icke-miljövariablerna genom att exportera. 793 00:57:24,060 --> 00:57:28,860 Kommandot för att göra det är export, liksom export PRINTER. 794 00:57:28,860 --> 00:57:34,930 Om vi ​​skulle definiera en sådan variabel, 795 00:57:34,930 --> 00:57:38,480 om vi ville ha en utskriftskommando för att hitta den, skulle det vara en miljövariabel, 796 00:57:38,480 --> 00:57:40,730 och det är hur vi gör det en. 797 00:57:40,730 --> 00:57:42,090 Här finns det något slags förvirrande. 798 00:57:42,090 --> 00:57:50,430 Detta uttryck, export till miljön, härrör från denna Bourne shell koncept, 799 00:57:50,430 --> 00:57:54,520 och ändå som uttrycket används i beskrivning av den C-skal, 800 00:57:54,520 --> 00:57:57,920 där det inte finns något sådant kommando som export. 801 00:57:57,920 --> 00:58:06,200 Om du bara säga export av sig själv, får du en lista på export - 802 00:58:06,200 --> 00:58:10,620 Så om jag bara exporterar här, inget sådant. 803 00:58:13,620 --> 00:58:15,200 Okej, det går vi. 804 00:58:15,200 --> 00:58:17,010 Dessa saker, förresten, är också definieras av skalet. 805 00:58:17,010 --> 00:58:19,400 Jag definierade inte någon av dessa själv. 806 00:58:19,400 --> 00:58:23,550 Skalet gör alla möjliga saker av sig själv. 807 00:58:23,550 --> 00:58:26,650 Det borde göra saker automatiskt. 808 00:58:30,240 --> 00:58:36,880 I Bash eller Korn-skalet kan du köra ett kommando som det här, 809 00:58:36,880 --> 00:58:42,000 vilket både ger en variabel ett värde och exportera den i 1-kommandot. 810 00:58:42,000 --> 00:58:46,150 I Bourne-skal de vara separata kommandon som export en. 811 00:58:46,150 --> 00:58:48,410 Här är en annan aspekt som är förvirrande. 812 00:58:48,410 --> 00:58:52,220 Den inställda kommando i C-skalet definierar variabler 813 00:58:52,220 --> 00:58:55,550 och utan argument berättar vad de variablernas värden. 814 00:58:55,550 --> 00:59:01,140 I Bash skal, den inställda kommandot utan argument gör samma sak, 815 00:59:01,140 --> 00:59:03,580 men med argument som den gör något helt annat. 816 00:59:03,580 --> 00:59:06,200 Så dessa är de olika argument här. 817 00:59:06,200 --> 00:59:10,460 Några av dessa är miljövariabler, vissa av dem är skalvariabler. 818 00:59:10,460 --> 00:59:13,200 Alla är skalvariabler egentligen. Några av dem är miljövariabler. 819 00:59:15,690 --> 00:59:23,920 Den inställda kommando med argument kan användas för att styra 820 00:59:23,920 --> 00:59:28,220 på positions parametrar till ett skript, 821 00:59:28,220 --> 00:59:33,910 vilket är ett sätt att få dem alla på en gång. 822 00:59:33,910 --> 00:59:36,150 Vi kan inte riktigt gå in på det i dag. 823 00:59:36,150 --> 00:59:39,580 Den kan också användas för att byta skal beteende. 824 00:59:39,580 --> 00:59:46,700 Särskilt i Bash det finns variabler som kommer att avgöra hur skalet fungerar. 825 00:59:46,700 --> 00:59:51,310 Sen också just detta ett kommando som du kan se, detta kommando. 826 00:59:51,310 --> 00:59:59,050 Typsätta följt av variabler och variabeltyper används i Korn-och Bash skal. 827 00:59:59,050 --> 01:00:04,970 Det är inte obligatoriskt, men det kan användas för att begränsa värdena på variablerna, 828 01:00:04,970 --> 01:00:08,400 vilket kan vara användbart för att förhindra fel, och det är ganska vanligt. 829 01:00:08,400 --> 01:00:11,640 Så jag bara nämna att om du ser den någonstans. 830 01:00:17,290 --> 01:00:19,160 Den där kommando. 831 01:00:19,160 --> 01:00:22,490 Minns jag nämnde tidigare den där kommando i C-skalet, 832 01:00:22,490 --> 01:00:28,750 som kan berätta om platsen för ett kommando sökväg. 833 01:00:28,750 --> 01:00:32,580 Här är kommandosubstitution. 834 01:00:32,580 --> 01:00:41,900 Du bör hitta på tangentbordet någonstans en karaktär som ser ut så här. 835 01:00:41,900 --> 01:00:44,910 Läget på tangentbordet kommer att variera. 836 01:00:44,910 --> 01:00:47,050 Vi har kallat det backquote. Det handlar om storleken på en offert. 837 01:00:47,050 --> 01:00:48,720 Den går från övre vänstra till nedre högra. 838 01:00:48,720 --> 01:00:52,690 Här på min Mac-tangentbord är det i det övre vänstra hörnet. 839 01:00:52,690 --> 01:00:58,150 Detta tecken kan användas för att utföra ett kommando i ett kommando. 840 01:00:58,150 --> 01:01:03,400 Om du har ett uttryck inne backquotes, 841 01:01:03,400 --> 01:01:07,080 att uttrycket är ett kommando, det körs. 842 01:01:07,080 --> 01:01:09,010 Utgången av detta kommando 843 01:01:09,010 --> 01:01:11,980 Därefter substitueras för hela backquote uttryck 844 01:01:11,980 --> 01:01:16,110 inne en längre kommando som sedan körs med att produktionen 845 01:01:16,110 --> 01:01:22,010 som en del av sin sträng av argument och så vidare. 846 01:01:22,010 --> 01:01:28,640 Här är ett kommando som använder det. 847 01:01:28,640 --> 01:01:32,340 Låt oss visa att verksamheten här. 848 01:01:44,980 --> 01:01:49,090 Låt oss gå upp hit, ta ut backquotes. 849 01:01:49,090 --> 01:01:54,410 Kontroll A får mig till början av raden med Emacs redigering syntax. 850 01:01:54,410 --> 01:02:00,380 Hittills sökvägar är det där gör, 851 01:02:00,380 --> 01:02:05,040 men när jag gör det så här, då pluggar den i listan över sökvägar 852 01:02:05,040 --> 01:02:08,750 i stället för detta hela backquote expression och körningar ls-l på dem. 853 01:02:08,750 --> 01:02:11,120 Typ av bekvämt, va? 854 01:02:11,120 --> 01:02:14,860 Så det är en snygg sak. Det är så backquotes fungerar. 855 01:02:14,860 --> 01:02:17,560 Nu går vi ner lite längre. 856 01:02:17,560 --> 01:02:22,050 Dessa alias. Jag faktiskt använda dessa. 857 01:02:22,050 --> 01:02:26,410 Jag ska försöka få detta i med 1 redigering. 858 01:02:34,900 --> 01:02:36,900 Okej. 859 01:02:36,900 --> 01:02:39,630 Nu ska vi se hur dessa definitioner kom ut. 860 01:02:39,630 --> 01:02:44,930 alias LBH talar om för mig hur det definieras. 861 01:02:44,930 --> 01:02:51,210 Lägg märke till att det är just detta, men de yttre citat har tagits bort 862 01:02:51,210 --> 01:02:53,750 och utropstecken tas bort. 863 01:02:53,750 --> 01:02:58,940 *, Komplett lista på alla argument. 864 01:02:58,940 --> 01:03:03,580 I en definition alias den kommer att tillämpa tillbaka till där jag använder här. 865 01:03:03,580 --> 01:03:10,620 LBH ksh bash. Okej. 866 01:03:10,620 --> 01:03:13,960 Se hur det fungerar? Det sparar mig några skriva. 867 01:03:13,960 --> 01:03:16,440 Låt oss gå upp lite bara för att nämna något annat här. 868 01:03:19,150 --> 01:03:23,120 Notera här dessa olika skal. Jag borde ha nämnt detta tidigare. 869 01:03:23,120 --> 01:03:36,060 CSH har en 2 hit och det gör / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Vi kunde fastställa på annat sätt att de är faktiskt samma fil. 871 01:03:39,870 --> 01:03:43,150 Kom ihåg att jag sa om du skriver sh du bash. 872 01:03:43,150 --> 01:03:47,390 Skriv in det här och du får detta. 873 01:03:47,390 --> 01:03:51,730 Men de som inte är kopplade. De har enkel som det. 874 01:03:51,730 --> 01:03:54,910 Och det är inte den typ av fil som kan ringa en annan. 875 01:03:54,910 --> 01:03:59,460 Så de är separata filer, i C-skal som är de samma fil. 876 01:03:59,460 --> 01:04:03,640 Här tillbaka, den andra här, detta alias, 877 01:04:03,640 --> 01:04:09,090 notera som kör detta kommando, fil. 878 01:04:09,090 --> 01:04:13,810 Det alias kör det. File berättar vilken typ av fil. 879 01:04:13,810 --> 01:04:20,330 Så FWH ksh bash. Okej. 880 01:04:20,330 --> 01:04:23,230 Det är utsignalen från kommandofilen. 881 01:04:23,230 --> 01:04:24,630 Jag vet inte om du vet vad det betyder här, 882 01:04:24,630 --> 01:04:26,750 Mach-O universell binär med 2 arkitekturer. 883 01:04:26,750 --> 01:04:30,470 Det finns två möjliga processortyper i Mac, 884 01:04:30,470 --> 01:04:34,780 och vissa program skrevs för att kunna köra med båda, 885 01:04:34,780 --> 01:04:37,950 och kommandofilen kan avgöra det, så det är vad det här betyder. 886 01:04:37,950 --> 01:04:40,660 Båda dessa filer var skrivna på det sättet. 887 01:04:40,660 --> 01:04:43,760 Så ser vi hur alias fungerar, vi ser hur backquote fungerar, 888 01:04:43,760 --> 01:04:48,640 Vi ser hur den faktiska fil ls eller fil fungerar. 889 01:04:52,050 --> 01:04:57,000 Det kanske inte fungerar. Försök "var där" och "LBH där". Okej, låt oss prova det. 890 01:04:57,000 --> 01:05:01,040 där där. 891 01:05:01,040 --> 01:05:03,500 där är ett skal inbyggd. 892 01:05:03,500 --> 01:05:06,970 Kom ihåg tidigare vi visade att Bash inte hade där. 893 01:05:06,970 --> 01:05:10,080 Om du skriver var i Bash skal, får du ett felmeddelande. 894 01:05:10,080 --> 01:05:12,540 Det är bara en del av skalet snarare än att vara ett separat kommando. 895 01:05:12,540 --> 01:05:20,000 Vad händer om jag typ LBH söker där? Se vad som händer där. 896 01:05:20,000 --> 01:05:22,850 Ran var där, fick denna utgång, och sedan försökte köra ls 897 01:05:22,850 --> 01:05:25,600 såsom l på var är ett skal inbyggd. 898 01:05:25,600 --> 01:05:28,790 var är det, men de andra som inte existerar. 899 01:05:28,790 --> 01:05:32,090 Ingen av dessa finns, faktiskt. 900 01:05:32,090 --> 01:05:35,560 Så det fungerar inte alltid, och det visar också hur vissa saker 901 01:05:35,560 --> 01:05:39,580 gör inte riktigt vad du kanske trodde. 902 01:05:40,930 --> 01:05:43,010 Låt oss gå ner lite längre här. 903 01:05:44,890 --> 01:05:54,760 Det här är i Bash. Det är också kommandosubstitution som backquote. 904 01:05:54,760 --> 01:06:05,280 Men till skillnad från backquote, använder den här variabeln stil. 905 01:06:05,280 --> 01:06:09,860 Det finns ett antal uttryck som börjar med ett dollartecken, 906 01:06:09,860 --> 01:06:16,070 och medan dessa inte variabler, lånade de användningen av dollartecken 907 01:06:16,070 --> 01:06:19,570 för att ange ett uttryck för något slag. 908 01:06:19,570 --> 01:06:23,550 Det kan vara omgiven av parenteser eller konsoler eller dubbla parenteser, 909 01:06:23,550 --> 01:06:26,320 som har ett annat syfte. 910 01:06:26,320 --> 01:06:29,500 Enstaka parentes här är ett kommando byte precis som backquotes. 911 01:06:29,500 --> 01:06:32,720 Dubbla parenteser är faktiskt en aritmetisk operation. 912 01:06:32,720 --> 01:06:35,380 Det finns andra syntaxer, övrig verksamhet. 913 01:06:35,380 --> 01:06:41,520 Backquote syntax finns i pucklar. 914 01:06:41,520 --> 01:06:46,780 Detta är emellertid en föredragen. Det är mycket lättare att läsa och det gör att häckning. 915 01:06:46,780 --> 01:06:51,300 Du kan ha inne $ (kommando) ett annat kommando, 916 01:06:51,300 --> 01:06:54,590 något liknande - 917 01:07:14,560 --> 01:07:18,210 Jag får en lista där. 918 01:07:18,210 --> 01:07:21,670 Det skulle fungera om jag hade backquote också. 919 01:07:32,050 --> 01:07:38,470 Vad händer om jag vill göra något liknande - 920 01:08:03,390 --> 01:08:06,430 Du skulle nog faktiskt inte använda detta kommando, 921 01:08:06,430 --> 01:08:14,160 men denna interna substitution kommando ekar namnen på alla filer som börjar med en, 922 01:08:14,160 --> 01:08:18,229 då denna man kör ls-l på dessa filer, 923 01:08:18,229 --> 01:08:20,500 och sedan detta ekar bara produktionen. 924 01:08:21,729 --> 01:08:24,479 Du har förmodligen inte skulle göra detta, du bara skulle göra ekot eller ls, 925 01:08:24,479 --> 01:08:29,450 men detta illustrerar hur häckande kommandon fungerar. 926 01:08:29,450 --> 01:08:34,380 Så bara en annan funktion här. 927 01:08:34,380 --> 01:08:37,450  Jag nämnde detta tidigare, att när du har var i C-skalet, 928 01:08:37,450 --> 01:08:42,770 skriver arbeten i Bourne-typ skal för att lokalisera kommandon. 929 01:08:48,939 --> 01:08:52,270 Inbyggda kommandon, precis vad jag sa där. 930 01:08:52,270 --> 01:08:54,640 Kommandon är en del av skalet, som var. 931 01:08:54,640 --> 01:08:59,880 När skalet exekverar ett kommando som ls, lokaliserar det den genom banan, 932 01:08:59,880 --> 01:09:03,029 finner det i någon katalog någonstans, 933 01:09:03,029 --> 01:09:05,800 läser det i minnet, skapar ett nytt skal, 934 01:09:05,800 --> 01:09:08,960 läser kommandot ls eller vad i skalet 935 01:09:08,960 --> 01:09:11,450 där miljövariabler redan finns, 936 01:09:11,450 --> 01:09:14,000 och då den överför exekvering till den. 937 01:09:14,000 --> 01:09:18,319 Inbyggd kommando, är koden för det kommandot inne i skalet, 938 01:09:18,319 --> 01:09:21,460 så skalet börjar bara utföra en del av sin egen kod. 939 01:09:21,460 --> 01:09:24,569 där är sådant kommando. Det blir faktiskt snabbare. 940 01:09:24,569 --> 01:09:28,380 Det behöver inte läsa något i minnet, det är redan i minnet. 941 01:09:28,380 --> 01:09:32,460 Inbyggda kommandon har alltid företräde framför kommandon med samma namn. 942 01:09:32,460 --> 01:09:36,050 Kommandon som finns i katalogerna i sökvägen kan ha samma namn, 943 01:09:36,050 --> 01:09:39,090 kommandon i olika kataloger, filer i olika kataloger. 944 01:09:39,090 --> 01:09:41,740 Det som inträffar tidigare i vägen är den som du får. 945 01:09:41,740 --> 01:09:43,770 Om det finns ett inbyggt kommando får du alltid det. 946 01:09:43,770 --> 01:09:47,890 Det finns inget sätt att ge den en lägre prioritet än ett kommando i vägen. 947 01:09:47,890 --> 01:09:54,140 Om du vill få den vägen kommando, kan du skriva den fullständiga sökvägen. 948 01:09:54,140 --> 01:09:55,850 Om det fanns ett kommando där i vägen någonstans, 949 01:09:55,850 --> 01:09:58,440 du kan skriva / bin / där och du skulle få det. 950 01:09:58,440 --> 01:10:01,800 Om du inte vill skriva hela sökvägen, kan du definiera ett alias. 951 01:10:01,800 --> 01:10:06,310 Faktum är att om du gav alias samma namn som det inbyggda kommandot, skulle det fungera 952 01:10:06,310 --> 01:10:08,790 eftersom definitionen alias utvärderas 953 01:10:08,790 --> 01:10:13,220 innan skalet bestämmer att det är ett inbyggt kommando som ska köras. 954 01:10:18,810 --> 01:10:23,440 Då detta blir lite mer komplicerat med vissa kommandon här. 955 01:10:23,440 --> 01:10:29,880 Fallet med vissa kommandon faktiskt inbyggda kommandon och i vägen. 956 01:10:29,880 --> 01:10:34,140 En av dem är eko, kommandot jag använde bara en liten stund sedan i dessa exempel. 957 01:10:34,140 --> 01:10:37,410 Echo är ett kommando i vägen och det är i varje skal. 958 01:10:37,410 --> 01:10:40,580 De behöver inte nödvändigtvis alla beter sig på samma sätt. 959 01:10:40,580 --> 01:10:42,970 Det var ursprungligen ett kommando bara i vägen. 960 01:10:42,970 --> 01:10:45,280 Den byggdes till skalen senare. 961 01:10:45,280 --> 01:10:48,080 Eftersom det finns alternativ som är beroende på miljön 962 01:10:48,080 --> 01:10:52,970 och kommandoraden, de inbyggda kommandon 963 01:10:52,970 --> 01:10:57,030 skrevs för att fungera på samma sätt som kommandot som hade varit i vägen, 964 01:10:57,030 --> 01:10:59,670 det är osannolikt att de skulle ha skrivits på det sättet 965 01:10:59,670 --> 01:11:01,720 om kommandot inte hade redan skrivits för sökvägen. 966 01:11:01,720 --> 01:11:06,180 Så det här har biverkningar. Dess historia har effekter här. 967 01:11:06,180 --> 01:11:08,380 Det finns alternativ där. 968 01:11:14,280 --> 01:11:23,060 Det finns även ett alternativ som definieras av en variabel i tcsh kallas echo_style. 969 01:11:23,060 --> 01:11:27,700 Det är en av dessa variabler som kan ändra det sätt som eko ​​verk. 970 01:11:27,700 --> 01:11:30,910 Det finns andra fall där du kan tilldela en variabel 971 01:11:30,910 --> 01:11:36,290 som förändrar sättet att skalet operationen, inklusive ett inbyggt kommando, fungerar. 972 01:11:36,290 --> 01:11:38,130 Det skulle inte påverka något annat 973 01:11:38,130 --> 01:11:40,640 eftersom andra kommandon inte har tillgång till de skalvariabler, 974 01:11:40,640 --> 01:11:42,090 endast de miljövariabler. 975 01:11:42,090 --> 01:11:45,360 Men skal operationer kan läsa skalvariabler. 976 01:11:45,360 --> 01:11:50,710 Det kommer inte att fungera för csh. Det är bara tcsh. Det är en av de förbättringar. 977 01:11:58,540 --> 01:12:04,620 Parsning har sekvenser när det utvärderar metatecken, 978 01:12:04,620 --> 01:12:08,140 när det utvärderar variabler, alias, historia referenser. 979 01:12:08,140 --> 01:12:11,830 Det finns en särskild ordning för dessa saker. 980 01:12:11,830 --> 01:12:13,730 Om den gör saker i en viss sekvens 981 01:12:13,730 --> 01:12:16,080 och blir till något som är ett uttryck för ett slags 982 01:12:16,080 --> 01:12:20,650 som redan har utvärderats, kommer det inte att utvärdera den igen. 983 01:12:20,650 --> 01:12:24,520 Om det blir det, så kommer det bara gå på karaktärerna. 984 01:12:24,520 --> 01:12:29,920 Så om utvärdering av vissa uttryck som kommandosubstitution 985 01:12:29,920 --> 01:12:36,850 eller variabel eller vad som helst ger upphov till en expressions 986 01:12:36,850 --> 01:12:39,240 som du skulle vilja att utvärderas, 987 01:12:39,240 --> 01:12:42,510 det fungerar bara om att utvärdering sker senare i sekvensen. 988 01:12:42,510 --> 01:12:45,010 Jag hoppas att jag är klar där. 989 01:12:45,010 --> 01:12:50,460 Det parssekvens, en operation i C-skalet, 990 01:12:50,460 --> 01:12:56,490 är inte samma för inbyggda kommandon som det är för icke-inbyggda kommandon. 991 01:12:56,490 --> 01:12:58,890 Jag är inte säker på om Bash där. 992 01:12:58,890 --> 01:13:02,450 Till exempel, framställs om en skalvariabel en historia referens, 993 01:13:02,450 --> 01:13:04,230 det förmodligen inte skulle gå tillbaka i historien. 994 01:13:04,230 --> 01:13:06,010 Det skulle bara få utropstecken. 995 01:13:06,010 --> 01:13:08,840 I själva verket kan vi bara försöka att ut just nu. 996 01:13:09,720 --> 01:13:18,240 ställa en = och vi måste sätta detta i det. 997 01:13:30,690 --> 01:13:34,580 Vänta. Ursäkta. Jag gjorde detta i Bash. Jag ville göra det här. 998 01:13:53,470 --> 01:13:56,080 Se, så det inte bedöma att historien referens 999 01:13:56,080 --> 01:14:00,520 eftersom det var redan förbi den punkt att utvärdera historie uttryck 1000 01:14:00,520 --> 01:14:02,720 när den utvärderade variabeln. 1001 01:14:02,720 --> 01:14:05,550 Så det är en effekt av tolkning. 1002 01:14:05,550 --> 01:14:08,760 Och återigen, är inbyggda kommandon inte gjort på samma sätt. 1003 01:14:08,760 --> 01:14:11,230 Okej. Låt oss gå till nästa här. 1004 01:14:11,230 --> 01:14:16,060 Detta är tänkt att vara en linje, men det gör det lättare att läsa. 1005 01:14:19,130 --> 01:14:21,530 Vad gör det? 1006 01:14:21,530 --> 01:14:28,640 Ni minns kanske att vi kan utvärdera asterisker som filnamnsjokertecken, 1007 01:14:28,640 --> 01:14:33,890 och det finns andra filnamn jokertecken som frågetecken och konsoluttryck. 1008 01:14:33,890 --> 01:14:39,000 Denna typ av utvärdering kallas globbing. 1009 01:14:39,000 --> 01:14:46,290 ställa noglob i början av detta kommando säger gör inte det. 1010 01:14:46,290 --> 01:14:53,370 unset noglob säger gå tillbaka till att göra det. 1011 01:14:53,370 --> 01:14:56,440 Observera att uppsättningen glob skulle inte ha den effekten. 1012 01:14:56,440 --> 01:15:00,800 I vardagligt språk, skulle sätta glob eller urkopplat noglob verkar vara likvärdiga, 1013 01:15:00,800 --> 01:15:03,290 men här är det inte. Det är urkopplat noglob. 1014 01:15:05,120 --> 01:15:07,910 Nu TSET. TSET stod för terminal set. 1015 01:15:07,910 --> 01:15:11,840 Det används inte så ofta nu, men innan fönstersystem blev tillgängliga 1016 01:15:11,840 --> 01:15:15,760 och du hade en enda terminal, kanske du måste bestämma vilken typ. 1017 01:15:15,760 --> 01:15:18,700 Och om något skulle komma över ett Ethernet-eller från nätverket, 1018 01:15:18,700 --> 01:15:21,120 kanske du vill säga att det är en VT100. 1019 01:15:21,120 --> 01:15:26,630 VT100 är lite av en standard i terminalen verksamheten. Den kommer från DEC terminalen. 1020 01:15:26,630 --> 01:15:35,270 Om du bara gör uppringd - märker det? Detta går tillbaka en bit, va? 1021 01:15:35,270 --> 01:15:39,520 Så om vi bara gör TSET över här, 1022 01:15:39,520 --> 01:15:45,250 Om jag bara tset, det återställer min terminal, men du inte såg någonting. 1023 01:15:45,250 --> 01:15:47,340 Det tog inte egentligen ändra någonting. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Okej. 1026 01:15:51,480 --> 01:15:53,350 setenv TERM xterm-color. 1027 01:15:53,350 --> 01:15:57,080 Vi vet redan att termen var inställd på det sättet, så att inte förändrades. 1028 01:15:57,080 --> 01:15:58,860 Det är det sätt som vi skulle vilja göra det. 1029 01:15:58,860 --> 01:16:07,080 Men märker att det här kommandot, tset-s, bara utgångs dessa kommandon. Det tog inte köra dem. 1030 01:16:07,080 --> 01:16:09,770 Det tog inte köra dessa kommandon, det mata ut dem. 1031 01:16:09,770 --> 01:16:13,650 Så detta är tänkt att producera kommandon som sedan kommer att köras. 1032 01:16:13,650 --> 01:16:16,360 Du minns kommandot i den filen jag visade bara att du hade en Q i den. 1033 01:16:16,360 --> 01:16:18,910 Så låt oss göra det. 1034 01:16:18,910 --> 01:16:23,750 Q trycker viss utgång, men det spelar ingen roll här, som ni kan se. 1035 01:16:23,750 --> 01:16:27,980 Jag gör bara att visa att det inte spelade någon roll. 1036 01:16:27,980 --> 01:16:31,870 Detta är i backquote syntax. 1037 01:16:31,870 --> 01:16:35,340 Notera backquote här, backquote här. 1038 01:16:35,340 --> 01:16:37,680 Jag utelämnar dessa saker här. 1039 01:16:37,680 --> 01:16:39,570 Dessa fall av att berätta det vad man ska göra 1040 01:16:39,570 --> 01:16:42,050 När det gäller vissa typer av terminaler - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, nätverk, uppringd, vad har du. 1042 01:16:45,400 --> 01:16:48,050 Det spelar ingen roll här eftersom vi inte egentligen gör någon av dessa saker. 1043 01:16:48,050 --> 01:16:49,720 Jag bara illustrerar kommandot. 1044 01:16:49,720 --> 01:16:55,170 Om jag gör det här med backquote, vad ska jag få? 1045 01:16:55,170 --> 01:17:00,210 Också märker här att detta ingick den inställda noglob och unset noglob, 1046 01:17:00,210 --> 01:17:02,630 så de nu är överflödiga i definitionen. 1047 01:17:02,630 --> 01:17:05,380 Det var inte alltid sant, men nu är de som ingår i detta kommando. 1048 01:17:05,380 --> 01:17:08,890 Men låt oss se vad som händer om jag gör det 1049 01:17:08,890 --> 01:17:12,570 och gå till början av raden med kontroll A och jag gör det. 1050 01:17:14,380 --> 01:17:18,040 Okej, set: Kommando hittades inte. Det är ganska märkligt, eller hur? 1051 01:17:18,040 --> 01:17:20,570 set är ett välkänt kommando. Det är en del av skalet. 1052 01:17:20,570 --> 01:17:24,040 set: Kommando hittades inte? Varför är det? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Nåväl, låt oss tänka på detta. 1054 01:17:26,790 --> 01:17:31,100 Det körs en backquote kommandosubstitution, 1055 01:17:31,100 --> 01:17:37,430 och som inträffar vid en viss del av sekvensen för tolkning av kommando. 1056 01:17:37,430 --> 01:17:40,360 set är ett inbyggt kommando. 1057 01:17:40,360 --> 01:17:43,900 Så när den gör det kommandot substitution, 1058 01:17:43,900 --> 01:17:48,280 det har redan kommit förbi den punkt att identifiera inbyggda kommandon. 1059 01:17:48,280 --> 01:17:51,900 Så den behandlar satt som om det vore ett kommando i sökvägen. 1060 01:17:51,900 --> 01:17:55,440 Naturligtvis går det inte att hitta det och du får ett felmeddelande. 1061 01:17:55,440 --> 01:17:59,300 Tja. Det är ett exempel på parssekvens. 1062 01:17:59,300 --> 01:18:01,460 Och vad gör vi åt det? 1063 01:18:01,460 --> 01:18:04,800 Lägg märke till denna mycket intressanta kommando här, eval. 1064 01:18:04,800 --> 01:18:06,530 Jag undrar vad det gör. 1065 01:18:06,530 --> 01:18:08,760 Om du tittar på manualen - och låt oss bara göra det 1066 01:18:08,760 --> 01:18:12,000 att visa hur förvirrande dessa handböcker är - 1067 01:18:12,000 --> 01:18:19,400 man tcsh, förvirrad manuell, hitta saker här är inte heller lätt. 1068 01:18:19,400 --> 01:18:31,850 Nu kör vi, eval arg, så att vi kan ha ett eller flera argument 1069 01:18:31,850 --> 01:18:34,090 och det finns en lista över saker där. 1070 01:18:34,090 --> 01:18:37,730 Behandlar de argument som indata till skalet 1071 01:18:37,730 --> 01:18:43,600 och exekverar de erhållna kommandon i samband med det aktuella skalet. 1072 01:18:43,600 --> 01:18:46,900 Detta är vanligtvis används för att utföra kommandon som genereras som resultat av kommandot 1073 01:18:46,900 --> 01:18:51,310 eller variabel substitution eftersom tolkning sker innan dessa ersättningar. 1074 01:18:51,310 --> 01:18:52,580 Mycket bra. 1075 01:18:52,580 --> 01:18:54,740 Och här är de till och med hänvisa till kommando tset för ett prov användning 1076 01:18:54,740 --> 01:18:57,700 som den jag just visade dig. 1077 01:18:57,700 --> 01:19:00,440 Nu måste jag få fönstret tillbaka till en bra plats. 1078 01:19:03,150 --> 01:19:07,800 Låt oss komma hit och vi ser att eval används strax dessförinnan. 1079 01:19:07,800 --> 01:19:14,010 Så låt oss se vad som händer om vi sätter - nu kör vi upp med pilarna till det kommandot 1080 01:19:14,010 --> 01:19:20,940 och kontroll A till början, eval. 1081 01:19:20,940 --> 01:19:22,850 Okej, så det fungerar. 1082 01:19:22,850 --> 01:19:26,440 När du gör eval, tar det som kommer efter det och gör det till ett kommando. 1083 01:19:26,440 --> 01:19:29,460 Detta gör det möjligt att i grunden analysera det två gånger. 1084 01:19:29,460 --> 01:19:33,710 Avsnittet här kör detta kommando inuti backquotes, 1085 01:19:33,710 --> 01:19:36,210 blir utgången. 1086 01:19:36,210 --> 01:19:42,850 Produktionen är tänkt att köras som dessa kommandon här som dessa 1087 01:19:42,850 --> 01:19:45,890 på den här och den här. 1088 01:19:45,890 --> 01:19:50,100 Så dessa kommandon är nu här i denna sekvens, 1089 01:19:50,100 --> 01:19:58,950 men dessa är inbyggda kommandon och det kan inte få dem direkt. 1090 01:19:58,950 --> 01:20:06,440 Så vi går till eval, plockar eval upp det, börjar det hela om igen, och det fungerar. 1091 01:20:06,440 --> 01:20:18,460 Ett exempel både på backquoting, eval, parsning, konsekvenser av tolkning, 1092 01:20:18,460 --> 01:20:21,910 och ett kommando som förmodligen är av mycket liten nytta för dig nu för tiden. 1093 01:20:21,910 --> 01:20:25,540 Okej. Okej, umask. 1094 01:20:25,540 --> 01:20:32,160 Låt oss titta på detta kommando här, umask 022. Jag undrar vad det gör. 1095 01:20:32,160 --> 01:20:38,420 Låt oss bara skriva umask med ingenting efter det. 22. Okej. 1096 01:20:38,420 --> 01:20:44,350 022 och göra det igen. 1097 01:20:44,350 --> 01:20:48,580 Som du kanske har gissat, umask utan argument talar om den aktuella masken; 1098 01:20:48,580 --> 01:20:51,760 umask med argument gör den det, men det var den jag redan hade. 1099 01:20:51,760 --> 01:20:53,800 Vad betyder 022 detta? 1100 01:21:01,650 --> 01:21:07,080 Det är här det skydd för en fil. 1101 01:21:07,080 --> 01:21:11,440 De bestämmer vem som får läsa eller skriva eller köra filen. 1102 01:21:11,440 --> 01:21:16,560 Skydd kallas också behörigheter. 1103 01:21:16,560 --> 01:21:21,390 R står för läsning, w för write, 1104 01:21:21,390 --> 01:21:25,500 och x, som inte finns där, står för exekvera. 1105 01:21:25,500 --> 01:21:27,260 Det finns 3 kategorier där. 1106 01:21:27,260 --> 01:21:33,540 De sista tre elementen i kategorin av användaren. De som gäller för mig som användare. 1107 01:21:33,540 --> 01:21:36,870 Dessa 3 här gäller för koncernen. 1108 01:21:36,870 --> 01:21:41,590 Filen tillhör en grupp, kan användaren tillhöra flera grupper, 1109 01:21:41,590 --> 01:21:47,150 men om användaren är i den grupp som den här filen tillhör, 1110 01:21:47,150 --> 01:21:51,090 då detta skydd kommer att gälla för honom, om han inte är användaren. 1111 01:21:51,090 --> 01:21:54,230 Och den här är alla andra. 1112 01:21:55,540 --> 01:21:57,690 Dessa kategorier är ömsesidigt uteslutande. 1113 01:21:57,690 --> 01:21:59,750 Användaren skyddet i detta för honom, 1114 01:21:59,750 --> 01:22:03,780 grupp skyddet i detta för medlemmar i gruppen andra än användaren, 1115 01:22:03,780 --> 01:22:08,110 och de andra skydden endast gälla för andra än användaren och gruppens medlemmar folket. 1116 01:22:08,110 --> 01:22:12,320 Om det finns ett r eller en w eller x, betyder det att skyddet har beviljats. 1117 01:22:12,320 --> 01:22:13,950 Om det finns ett bindestreck, betyder det att det inte är. 1118 01:22:13,950 --> 01:22:16,690 Det faktiskt finns andra saker som kan sättas in här förutom dessa, 1119 01:22:16,690 --> 01:22:18,350 som jag inte kommer att komma in nu. 1120 01:22:18,350 --> 01:22:24,450 Den umask definierar en standard för filer som du skapar. 1121 01:22:24,450 --> 01:22:28,580 Och som en mask, i grund och botten står det de bitar som du inte fastställts. 1122 01:22:28,580 --> 01:22:30,450 Hur har detta blivit bitar? 1123 01:22:30,450 --> 01:22:33,240 Om du tänker på var och en av dessa som ett oktalt tal, 1124 01:22:33,240 --> 01:22:42,120 Detta är den 1s bit, detta är 2: or, det är de 4s. 1125 01:22:42,120 --> 01:22:45,840 Så 0 till 7 1126 01:22:45,840 --> 01:22:51,770 kommer att beskriva vad kombinationen av r s, w s, och x är du har för dessa 3 1127 01:22:51,770 --> 01:22:53,710 och då ett liknande antal för dessa och sedan för dessa. 1128 01:22:53,710 --> 01:23:12,030 Så 022 betyder 0 för andra, 2 för gruppen, 2 för användaren. 1129 01:23:12,030 --> 01:23:15,870 Men det är en mask. Masken är det som du inte har. 1130 01:23:19,380 --> 01:23:20,610 Jag är ledsen. Jag gav dig bara saker i fel ordning. 1131 01:23:20,610 --> 01:23:25,620 Det är den första 3. Dessa 3 är användaren, dessa 3 är den grupp, dessa 3 är den andra. 1132 01:23:25,620 --> 01:23:27,970 Ledsen att jag gav dig dem i fel ordning. 1133 01:23:27,970 --> 01:23:31,910 Den 0, som är den första av dem, inte visa värdet, 1134 01:23:31,910 --> 01:23:35,430 men om ett nummer är inte där, det är en 0. 1135 01:23:35,430 --> 01:23:38,370 Det betyder att alla 3 av dessa skulle tillåtas. 1136 01:23:38,370 --> 01:23:41,550 Lägg märke till att det i just detta att x inte är tillåtet. 1137 01:23:41,550 --> 01:23:44,090 Skälet till detta är att skalet är kapabel att bestämma 1138 01:23:44,090 --> 01:23:46,260 om en fil ska verkställas eller inte. 1139 01:23:46,260 --> 01:23:49,800 Eftersom detta inte är en körbar fil, gjorde det inte ställa in x. 1140 01:23:49,800 --> 01:23:54,000 De två sätt som skrivrättigheter, den andra kategorin här, 1141 01:23:54,000 --> 01:23:56,500 den i mitten, nekas. 1142 01:23:56,500 --> 01:23:58,500 Så återigen, det är dessa saker som det förnekade. 1143 01:23:58,500 --> 01:24:02,080 Tja, är x tillåtet men det är inte här eftersom det inte är körbar 1144 01:24:02,080 --> 01:24:04,260 och på liknande sätt för de övriga. 1145 01:24:04,260 --> 01:24:08,880 Så det är en vanlig umask. 1146 01:24:08,880 --> 01:24:14,630 En annan vanlig man är 700 - ger dig allt och ingen annan som helst. 1147 01:24:14,630 --> 01:24:17,040 Och det finns andra möjligheter. 1148 01:24:21,340 --> 01:24:27,110 Jag ska gå tillbaka till det. Med hjälp av historien kan jag söka tillbaka för det, LBH till där. 1149 01:24:27,110 --> 01:24:30,210 Okej. Så här är det dessa skal. 1150 01:24:30,210 --> 01:24:36,020 Bash, ägaren som är systemkonto, kan göra allt. 1151 01:24:36,020 --> 01:24:41,210 Koncernen och alla andra kan göra läsa eller köra men inte skriva. 1152 01:24:41,210 --> 01:24:44,570 Det man inte ens tillåter ägaren att skriva till den. 1153 01:24:44,570 --> 01:24:46,460 Om ägaren ville skriva till den, systemkonto, 1154 01:24:46,460 --> 01:24:48,020 han skulle behöva ändra skyddet först. 1155 01:24:48,020 --> 01:24:53,940 Men återigen, sätter umask standard genom att maskera den, 1156 01:24:53,940 --> 01:24:57,160 genom att ange de bitar som inte kommer att ställas in. 1157 01:24:57,160 --> 01:25:04,380 Detta är typiskt i en av era teminitieringsfilerna, vilket är det. Cshrc för C-skal 1158 01:25:04,380 --> 01:25:07,500 eller. profilen för Bourne-typ skal. 1159 01:25:07,500 --> 01:25:12,520 Det kan vara någon annanstans även om det finns andra inställningsfiler på systemet. 1160 01:25:12,520 --> 01:25:14,610 Hur som helst, det är umask. 1161 01:25:14,610 --> 01:25:18,180 Det är något slags konstigt här, 1162 01:25:18,180 --> 01:25:22,800 och det är, varför finns det ett enda kommando för detta? 1163 01:25:22,800 --> 01:25:28,690 Om jag skriver detta, skulle jag göra det till en variabel, umask = något värde. 1164 01:25:28,690 --> 01:25:31,100 Varför finns det en hel kommando just för detta ändamål? 1165 01:25:31,100 --> 01:25:34,560 Anledningen är detta går bara tillbaka till ursprunget till Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix var bara några programmeringsprojekt vid Bell Labs i början av 1970-talet. 1167 01:25:41,050 --> 01:25:42,610 Folk kom precis ihop till program. 1168 01:25:42,610 --> 01:25:45,290 De avsåg aldrig att bli ett världsomspännande operativsystem. 1169 01:25:45,290 --> 01:25:47,250 Olika människor skrev olika delar utan att tänka så mycket 1170 01:25:47,250 --> 01:25:49,790 om hur de skulle användas - ganska skissartad. 1171 01:25:49,790 --> 01:25:53,290 Och det kom ihop så där, och det är fortfarande så i vissa avseenden. 1172 01:25:53,290 --> 01:25:57,930 Så det speglar historien, och det finns fortfarande dessa inkonsekvenser och udda inslag i det. 1173 01:25:57,930 --> 01:26:00,750 Okej. Nästa man här. 1174 01:26:08,170 --> 01:26:11,000 Som jag skrev tidigare, är det C-skalet inte riktigt används mycket för programmering, 1175 01:26:11,000 --> 01:26:12,420 även om det kan vara. 1176 01:26:12,420 --> 01:26:15,080 Det kör långsammare, återigen avvägningen mellan interaktiv användning, 1177 01:26:15,080 --> 01:26:17,820 som har mer processor inblandade än hastighet, 1178 01:26:17,820 --> 01:26:20,710 vilket kan göra utan behandlingen. 1179 01:26:20,710 --> 01:26:28,320 De extra funktioner lagts till i Bourne-skalet av Korn och Bourne-again skal 1180 01:26:28,320 --> 01:26:32,120 verkar inte sakta ner dem, och jag vet inte varför det är. 1181 01:26:32,120 --> 01:26:36,310 Det kan bara bli bättre planering, men jag är inte i stånd att veta. 1182 01:26:36,310 --> 01:26:40,420 Hastighet här egentligen inte så stor roll, även om det nämns. 1183 01:26:40,420 --> 01:26:43,690 Anledningen är att skalskript faktiskt komma ganska snabbt. 1184 01:26:43,690 --> 01:26:46,450 Om det finns en hel del kommandon som i ett calculational program, 1185 01:26:46,450 --> 01:26:49,110 du förmodligen inte skulle göra det i ett skalskript. 1186 01:26:49,110 --> 01:26:51,450 Verksamheten finns ganska enkel och okomplicerad. 1187 01:26:51,450 --> 01:26:53,960 De som jag har upplevt som är för långsam 1188 01:26:53,960 --> 01:26:57,110 involverar upprepade applikationer av långsamma kommandon. 1189 01:26:57,110 --> 01:27:00,480 Jag nämnde tidigare att strömeditor sed. Detta kommando är långsam. 1190 01:27:00,480 --> 01:27:03,760 Om du kör sed många gånger, får du en långsam manus, men det är inte skalet som är långsam. 1191 01:27:03,760 --> 01:27:07,920 Köra den i Bourne-skalet kommer inte att vara mycket snabbare än att köra den i C-skalet, 1192 01:27:07,920 --> 01:27:10,070 även om det kanske är vissa fördelar där. 1193 01:27:10,070 --> 01:27:12,760 De ytterligare programmeringsmöjligheter, å andra sidan, 1194 01:27:12,760 --> 01:27:17,920 är viktiga anledningar till varför du skulle använda den Bourne-typ skal. 1195 01:27:17,920 --> 01:27:21,390 C-skalet har udda funktioner till det - 1196 01:27:21,390 --> 01:27:25,250 det faktum att du inte vet om en variabel är en skalvariabel eller en miljövariabel. 1197 01:27:25,250 --> 01:27:27,440 Det kan vara mycket förvirrande. 1198 01:27:27,440 --> 01:27:32,170 Det är inte så lätt att skriva 1199 01:27:32,170 --> 01:27:35,930 bara baserat på din erfarenhet av programmering i andra språk. 1200 01:27:35,930 --> 01:27:41,350 Jag tror att du kan hitta Bourne-typ skal mer överens med din erfarenhet. 1201 01:27:43,730 --> 01:27:49,270 Vissa manus, men kan vara tusentals rader långa. 1202 01:27:49,270 --> 01:27:52,450 De som jag har sett används för lapp operativsystem. 1203 01:27:52,450 --> 01:27:55,450 De kan köra mycket långsamt, men du behöver inte köra dem mycket ofta. 1204 01:27:55,450 --> 01:27:57,180 Det är bara när du gör patchning, 1205 01:27:57,180 --> 01:27:59,450 och det är bara systemadministratören som gör dessa saker, 1206 01:27:59,450 --> 01:28:01,840 så det är egentligen inte mycket av en fråga. 1207 01:28:01,840 --> 01:28:06,980 De som är hundra rader lång faktiskt köra ganska snabbt. 1208 01:28:06,980 --> 01:28:10,540 Att nämna det här, vad är dessa förbättringar? 1209 01:28:10,540 --> 01:28:13,170 Jag har redan nämnt några av dem - matriser, beräkningar, 1210 01:28:13,170 --> 01:28:20,540 de $ () uttryck för beräkningar i Bash skal, 1211 01:28:20,540 --> 01:28:23,050 den andra typen av kommandosubstitution. 1212 01:28:23,050 --> 01:28:25,360 Det finns olika typer av testkommandon 1213 01:28:25,360 --> 01:28:29,350 med vilken du kan göra villkorade tester om förekomsten av en fil eller annat. 1214 01:28:29,350 --> 01:28:34,790 Senast här, det här kommandot här. 1215 01:28:34,790 --> 01:28:38,480 Vad gör detta, och varför skulle någon använda det? 1216 01:28:51,170 --> 01:28:52,990 printenv variabelnamn. 1217 01:28:52,990 --> 01:28:56,130 Vi vet vad printenv gör. Det säger oss att värdet på en variabel. 1218 01:28:56,130 --> 01:29:00,850 Och printenv variabel inte för oss väldigt mycket eftersom det inte finns någon sådan variabel. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Men låt oss ge det något meningsfullt. 1221 01:29:13,420 --> 01:29:16,800 Det är inte där heller. Okej. Jag antar att jag aldrig definierat det. 1222 01:29:16,800 --> 01:29:18,020 Låt oss bara kontrollera min omgivning. 1223 01:29:18,020 --> 01:29:20,900 Detta är ytterligare ett kommando med vilket du kan inspektera din miljö. 1224 01:29:20,900 --> 01:29:24,470 Det är gamla goda EDITOR, den vi såg tidigare. 1225 01:29:42,360 --> 01:29:44,120 Vad gör det? 1226 01:29:44,120 --> 01:29:48,050 Här har vi en backquote uttryck. 1227 01:29:48,050 --> 01:29:50,370 Notera att detta är den C-shell. 1228 01:29:50,370 --> 01:29:54,850 Så printenv REDAKTÖR kommer att ge oss ett värde på REDAKTÖR. Det är vi. 1229 01:29:54,850 --> 01:29:59,790 Och så kommer det att sätta det värdet till variabeln a, kommandot set. 1230 01:29:59,790 --> 01:30:02,860 Så nu om jag gör echo $ a, jag blir vi. 1231 01:30:02,860 --> 01:30:05,850 Det verkar inte särskilt användbar. 1232 01:30:05,850 --> 01:30:08,080 Men det faktiskt har ett syfte. 1233 01:30:08,080 --> 01:30:12,260 Eftersom vi inte vet om en variabel är en skalvariabel eller en miljövariabel 1234 01:30:12,260 --> 01:30:16,280 med hjälp av dollartecken utvärderings syntax, kan vi använda printenv 1235 01:30:16,280 --> 01:30:19,460 att se till att det är en miljövariabel. 1236 01:30:19,460 --> 01:30:22,550 Så om det fanns en skalvariabel redaktör, det skulle inte ha blivit det. 1237 01:30:22,550 --> 01:30:25,640 Detta fungerar endast med miljövariabel. 1238 01:30:25,640 --> 01:30:28,370 Om det fanns en skalvariabel och jag ville ha sitt värde, 1239 01:30:28,370 --> 01:30:29,980 Jag måste hitta något annat sätt att göra det. 1240 01:30:29,980 --> 01:30:33,530 Ett sätt att göra det skulle vara genom att göra set-och rörsystem. 1241 01:30:33,530 --> 01:30:36,130 Detta är en av de metatecken, specialtecken. 1242 01:30:36,130 --> 01:30:38,370 Den skickar utgången av inställda till någonting annat. 1243 01:30:38,370 --> 01:30:40,650 Låt oss se vad vi kan hitta där. 1244 01:30:40,650 --> 01:30:49,340 Ingenting. Okej. Låt oss bara se vad som finns där inne tillsammans. 1245 01:30:49,340 --> 01:30:53,580 Det var echo_style, den jag nämnde tidigare. Okej, låt oss göra det. 1246 01:31:02,460 --> 01:31:06,230 Kom ihåg att jag nämnde tidigare, echo_style 1247 01:31:06,230 --> 01:31:08,410 bestämmer hur echo kommandot kommer att köras. 1248 01:31:08,410 --> 01:31:10,940 bsd står för Berkeley Standard Distribution. 1249 01:31:10,940 --> 01:31:13,200 Detta är den Berkeley Unix från 1970-talet. 1250 01:31:13,200 --> 01:31:16,630 Det är ett av de sätt som ekar kan köras. 1251 01:31:16,630 --> 01:31:22,310 Ställa echo_style till det värdet i TC-skalet kommer att orsaka eko att bete sig på det sättet. 1252 01:31:22,310 --> 01:31:27,670 Så satt gör det, men satt bara blir skalvariabler. 1253 01:31:27,670 --> 01:31:35,430 Det skulle inte hitta Editor, som inte är en skalvariabel. 1254 01:31:36,870 --> 01:31:38,050 Ingenting. 1255 01:31:38,050 --> 01:31:39,660 Så det är ett sätt att särskilja dem. 1256 01:31:39,660 --> 01:31:42,000 Men det faktum att du måste gå igenom några konstiga kommando som det 1257 01:31:42,000 --> 01:31:45,500 att skilja mellan skalvariabler och miljövariabler 1258 01:31:45,500 --> 01:31:49,970 visar den typ av opraktisk naturen hos C-shell för vissa ändamål. 1259 01:31:52,290 --> 01:31:57,960 Och nu, är sist och kanske minst detta manualsidorna. 1260 01:31:57,960 --> 01:32:03,190 De av som du kanske vet, är mannen kommandot kort för manuell. 1261 01:32:03,190 --> 01:32:08,610 Man-sidorna för skalen är svåra att läsa. De är mycket lång. 1262 01:32:08,610 --> 01:32:14,060 De är organiserade på ett sätt som kan göra det svårt att hitta det du letar efter. 1263 01:32:14,060 --> 01:32:15,980 Så om du letar efter något med ett syfte, 1264 01:32:15,980 --> 01:32:20,050 du kanske inte vet om detta syfte är en skalvariabel eller något annat, 1265 01:32:20,050 --> 01:32:21,630 så du kanske inte vet var du ska leta efter den. 1266 01:32:21,630 --> 01:32:25,030 Du kan leta efter olika strängar, men strängarna är ofta upprepas. 1267 01:32:25,030 --> 01:32:27,640 Så det är i allmänhet svårt att läsa. 1268 01:32:27,640 --> 01:32:33,810 Vi bara tittade på TC-shell man-sidan lite innan för att hitta kommandot eval. 1269 01:32:33,810 --> 01:32:36,610 Vissa saker går fortare. 1270 01:32:36,610 --> 01:32:38,860 Ett tillvägagångssätt är att söka efter en sträng. 1271 01:32:38,860 --> 01:32:40,360 Du kan använda personsökaren. 1272 01:32:40,360 --> 01:32:49,080 Personsökaren har ett snedstreck för att leta efter ett kommando eller en sträng inuti en personsökare drift. 1273 01:32:49,080 --> 01:32:52,830 Mannen som standard kommer att använda personsökare, antingen vara mer eller mindre. 1274 01:32:52,830 --> 01:32:56,560 Jag vet inte om du är bekant med dem, men de kan visa filer bit för bit. 1275 01:32:56,560 --> 01:33:00,550 Jag har använt MINDRE att visa just dessa filer som vi har fått här. 1276 01:33:00,550 --> 01:33:03,300 Du kan söka inne där. 1277 01:33:03,300 --> 01:33:04,880 Du kan prova att använda olika söksträngar. 1278 01:33:04,880 --> 01:33:08,420 Också man-sidor i olika operativsystem kan inte vara samma. 1279 01:33:08,420 --> 01:33:11,130 De kan vara separata sidor för csh och tcsh. 1280 01:33:11,130 --> 01:33:14,500 De är inte på Mac, men de skulle vara om de är separata kommandon. 1281 01:33:14,500 --> 01:33:19,000 Om sh inte riktigt kalla Bash, det skulle förmodligen vara en separat manualsida. 1282 01:33:19,000 --> 01:33:25,820 Vissa system har separata manualsidor bara för C-shell inbyggda kommandon. 1283 01:33:25,820 --> 01:33:30,250 Ibland om du vill läsa en beskrivning av ett inbyggt kommando 1284 01:33:30,250 --> 01:33:35,350 det är också i vägen, som eko, måste du läsa manualsidan för kommandot på eko 1285 01:33:35,350 --> 01:33:37,610 att avgöra hur det kommer att fungera som ett inbyggt kommando 1286 01:33:37,610 --> 01:33:39,760 även om du inte kallar det inbyggda kommandot. 1287 01:33:41,630 --> 01:33:46,090 Det är en nackdel med det operativsystem i allmänhet, inte bara för de skal, 1288 01:33:46,090 --> 01:33:50,710 men för skalen särskilt manualsidorna är ganska lång, 1289 01:33:50,710 --> 01:33:56,180 dels för att de har lagt till användbara funktioner till dem, vilket kan vara positivt. 1290 01:33:56,180 --> 01:34:00,290 Okej. Finns det några frågor? Alla ämnen du vill ta upp? 1291 01:34:00,290 --> 01:34:03,390 Allt är relevant här? 1292 01:34:04,540 --> 01:34:07,100 Jo, det har varit mycket trevligt att prata med er alla. 1293 01:34:07,100 --> 01:34:09,690 Jag hoppas att du fick ut något av detta seminarium 1294 01:34:09,690 --> 01:34:13,080 som kommer att vara till nytta för dig i din framtida strävanden. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]