1 00:00:00,000 --> 00:00:02,320 >> [Seminar - Unix Skaller, Environments] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Dette er CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Dagens emne er Unix shell. 5 00:00:12,770 --> 00:00:20,600 Jeg er Douglas Kline, ekspert eller i det mindste rimeligt kompetent bruger af skallen. 6 00:00:20,600 --> 00:00:25,280 En Shell er grænsefladen for brugeren til computerens operativsystem. 7 00:00:25,280 --> 00:00:29,580 Navnet er misvisende som, i modsætning til et dyrs shell, 8 00:00:29,580 --> 00:00:34,890 der er hård og beskyttende, computer shell giver mulighed for kommunikation. 9 00:00:34,890 --> 00:00:39,120 Så porøs membran ville nok være en bedre metafor. 10 00:00:39,120 --> 00:00:44,500 >> Den oprindelige shell til Unix er Bourne shell. 11 00:00:44,500 --> 00:00:46,450 Bourne er stavet B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne var en af ​​de oprindelige forfattere af Unix, 13 00:00:49,770 --> 00:00:51,700 og så skallen er opkaldt efter ham. 14 00:00:51,700 --> 00:00:54,850 Navnet på denne skallen som en kommando er simpelthen sh. 15 00:00:54,850 --> 00:00:57,400 Det er den kommando, du kan udføre. 16 00:00:57,400 --> 00:01:00,810 Skallen starter ved login. 17 00:01:00,810 --> 00:01:04,459 Når du logger på computeren, skallen bare begynder at køre for dig, 18 00:01:04,459 --> 00:01:06,820 og det er hvad tager dine kommandoer. 19 00:01:06,820 --> 00:01:09,790 Det kan starte på andre tidspunkter også. 20 00:01:09,790 --> 00:01:16,780 Hvis du sætter op et vindue med ingen anden angivelse, vil det starte en shell for dig. 21 00:01:16,780 --> 00:01:20,450 Det er, hvordan det er, at du kan gå til et vindue og begynd at skrive kommandoer 22 00:01:20,450 --> 00:01:23,960 og så videre der, selvom du ikke logge ind på det vindue. 23 00:01:23,960 --> 00:01:26,670 Hertil kommer, at hvis du gør en remote login, 24 00:01:26,670 --> 00:01:30,250 så vil det starte en shell på fjerncomputeren. 25 00:01:30,250 --> 00:01:44,310 Og det er muligt at køre kommandoer uden en interaktiv shell. 26 00:01:44,310 --> 00:01:48,990 Det kan betyde i din nuværende drift, 27 00:01:48,990 --> 00:01:50,700 og det kan også betyde en fjernbetjening. 28 00:01:50,700 --> 00:01:52,900 Du kan sende en kommando til en anden computer, 29 00:01:52,900 --> 00:01:55,460 som omfatter etablering af en shell der. 30 00:01:55,460 --> 00:01:57,760 I virkeligheden, det har at omfatte opstart af en shell der 31 00:01:57,760 --> 00:02:01,740 selv om det ikke er din endelige formål. 32 00:02:05,310 --> 00:02:12,350 Når noget starter op som dette, er det ikke nødvendigvis starte en ny shell. 33 00:02:12,350 --> 00:02:17,430 Hvis du sætter et nyt vindue, er det muligt at fortælle det at opdrage en redaktør 34 00:02:17,430 --> 00:02:18,940 eller en anden kommando. 35 00:02:18,940 --> 00:02:20,560 I så fald, vil redaktør starte fra bunden. 36 00:02:20,560 --> 00:02:22,930 Når redaktøren slutter, vinduet slutter. 37 00:02:22,930 --> 00:02:24,620 Dette er lidt usædvanlig, men det kan gøres. 38 00:02:24,620 --> 00:02:27,140 I disse tilfælde vil det ikke være en shell. 39 00:02:27,140 --> 00:02:31,890 Så det er ikke nødvendigvis tilfældet, at et vindue eller nogle sådan ansøgning vil bringe en shell. 40 00:02:31,890 --> 00:02:34,030 >> Shell parser kommandoer. 41 00:02:34,030 --> 00:02:40,900 Tolker betyder at identificere de forskellige elementer og klassificere dem. 42 00:02:40,900 --> 00:02:43,470 Inden for en kommando, den fuldstændige streng, du skriver, 43 00:02:43,470 --> 00:02:47,310 vil der være 1 eller flere enlige kommandoer, der skal udføres. 44 00:02:47,310 --> 00:02:50,050 Andre elementer kan være argumenter. 45 00:02:50,050 --> 00:02:55,020 Der kan også være særlige tegn, som påvirker udførelsen af ​​en kommando. 46 00:02:55,020 --> 00:02:59,710 De kan sende output et andet sted end skærmen 47 00:02:59,710 --> 00:03:01,750 hvis kommandoen normalt ville sende den til skærmen. 48 00:03:01,750 --> 00:03:04,390 Det kan omdirigere input, og det kan gøre andre ting også. 49 00:03:04,390 --> 00:03:08,120 Der er forskellige andre symboler, tegn og så videre. 50 00:03:08,120 --> 00:03:13,600 Tolker indebærer påvisning og fortolkning af disse ting. 51 00:03:13,600 --> 00:03:19,560 >> Nu, hvis der ikke er flere spørgsmål, som er temmelig sandsynligt, da der ikke er flere mennesker, 52 00:03:19,560 --> 00:03:24,620 vi vil gå videre til mit næste side her. 53 00:03:24,620 --> 00:03:29,170 >> Jeg sagde tidligere, at Bourne shell er den første skallen. 54 00:03:29,170 --> 00:03:31,550 Der er andre. 55 00:03:31,550 --> 00:03:34,520 Den ene er den C-shell. Kommandoen er csh. 56 00:03:34,520 --> 00:03:36,830 Navnet C-shell er bare en leg med ord. 57 00:03:36,830 --> 00:03:41,260 Denne shell blev indført med Berkeley Unix i midten af ​​1970'erne. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix var en skelsættende begivenhed i udviklingen af ​​Unix. 59 00:03:44,830 --> 00:03:48,770 Det var en kæmpe revolution og omfattede indførelsen af ​​denne shell. 60 00:03:48,770 --> 00:03:50,790 Grunden til, at ordspil, C-shell, 61 00:03:50,790 --> 00:03:56,490 er, at C-shell har nogle karakteristika i det, der ligner C sproget, 62 00:03:56,490 --> 00:03:59,740 hvor Bourne skal ikke har - 63 00:03:59,740 --> 00:04:02,140 eller det havde ikke på det tidspunkt. 64 00:04:02,140 --> 00:04:05,190 Der er også TC-shell. 65 00:04:05,190 --> 00:04:07,360 Dette er en overordnet af C-shell. 66 00:04:07,360 --> 00:04:11,470 Det har yderligere funktioner, hvoraf mange er egnede til interaktiv brug, 67 00:04:11,470 --> 00:04:16,050 såsom minder kommandoer i historien mekanisme, 68 00:04:16,050 --> 00:04:18,459 som jeg vil beskrive noget senere - 69 00:04:18,459 --> 00:04:23,120 på en enkel måde, modelleret efter en editor. 70 00:04:23,120 --> 00:04:29,170 Det har også bindinger, som giver dig mulighed for at binde en kort nøgle snor til en længere kommando. 71 00:04:29,170 --> 00:04:31,440 Vi kommer ikke til at være at få ind i dag. 72 00:04:31,440 --> 00:04:33,650 Det har nogle funktioner, der er nyttige for programmering. 73 00:04:33,650 --> 00:04:37,020 Imidlertid er C-shell ikke ofte brugt til shell programmering. 74 00:04:37,020 --> 00:04:39,080 Shell-programmer, hvis du ikke allerede kender, 75 00:04:39,080 --> 00:04:41,690 er programmer, der består af shell egenskaber. 76 00:04:41,690 --> 00:04:43,220 Du kan køre disse som programmer. 77 00:04:43,220 --> 00:04:46,760 Du skriver en masse shell-kommandoer i en fil og udføre filen. 78 00:04:46,760 --> 00:04:49,760 Du behøver ikke at kompilere den. Dette er en fortolkende sprog. 79 00:04:49,760 --> 00:04:57,320 Sætningen C-shell er nu uklart, da det kun kan henvise til den oprindelige C-shell, CSH, 80 00:04:57,320 --> 00:05:01,200 eller til alle C-skaller, herunder tcsh. Det er lidt tvetydig. 81 00:05:01,200 --> 00:05:08,250 >> En senere Shell er Korn shell, ksh, opkaldt efter den programmør, Korn. 82 00:05:08,250 --> 00:05:14,160 Skallen har forsøgt at inkorporere 1 shell 83 00:05:14,160 --> 00:05:16,960 fordelene ved C-shell til interaktiv brug 84 00:05:16,960 --> 00:05:19,230 og Bourne shell til programmering. 85 00:05:19,230 --> 00:05:25,440 Det har været brugt som en interaktiv shell af nogle mennesker - et mindretal. 86 00:05:25,440 --> 00:05:32,050 Senere var der dog en anden introduktion, Bash shell, BASH, 87 00:05:32,050 --> 00:05:35,290 igen et ordspil, Bourne-igen shell. 88 00:05:35,290 --> 00:05:43,830 Det er en udvidelse af Bourne shell. Korn-shell er også. Begge af dem er. 89 00:05:43,830 --> 00:05:48,100 Det har de samme målsætninger for Korn-shell for sammenlægning C-Shell 90 00:05:48,100 --> 00:05:50,980 og Bourne Shells fordele 1 Shell. 91 00:05:50,980 --> 00:05:56,810 Mange af de forbedringer af Korn shell er også inkluderet i Bash. 92 00:05:56,810 --> 00:06:00,710 Bash, har dog mere og er derfor at foretrække. 93 00:06:00,710 --> 00:06:05,180 Bourne-igen Shell og Korn shell kaldes Bourne-type skaller 94 00:06:05,180 --> 00:06:07,730 fordi de omfatter Bourne skal karakteristika, 95 00:06:07,730 --> 00:06:11,180 der er uforenelige i visse henseender med C-skaller. 96 00:06:11,180 --> 00:06:15,520 Der er andre skaller udover dem, nogle er beregnet til begrænset brug, 97 00:06:15,520 --> 00:06:20,670 måske er begrænset til nogle kommandoer, måske specialiserede formål, ikke ofte brugt. 98 00:06:20,670 --> 00:06:24,240 >> Okay. Næste punkt på dagsordenen her. 99 00:06:31,300 --> 00:06:38,970 Det Bash shell er blevet forbundet med forskellige former for Linux. 100 00:06:38,970 --> 00:06:41,550 Jeg er ikke sikker på, om det er rigtigt af enhver form. 101 00:06:41,550 --> 00:06:43,280 Der er mange former derude, og jeg har ikke brugt dem alle, 102 00:06:43,280 --> 00:06:46,870 men i dem, jeg har brugt det er blevet forbundet med det. 103 00:06:46,870 --> 00:06:49,670 Så vidt jeg ved, er der intet om Bash 104 00:06:49,670 --> 00:06:52,210 hvilket gør det mere kompatibelt med Linux 105 00:06:52,210 --> 00:06:55,020 end nogen anden kombination af skallen og operativsystem. 106 00:06:55,020 --> 00:06:59,690 Jeg tror, ​​det nok bare afspejler tilbøjeligheder programmører. 107 00:06:59,690 --> 00:07:07,500 At det er blevet forbundet med Linux er en anden grund til at foretrække Bash at ksh 108 00:07:07,500 --> 00:07:11,820 da tingene er tilbøjelige til at være skrevet i det, og det er sandsynligt, at sprede sig. 109 00:07:11,820 --> 00:07:15,410 Jeg vil give dig andre grunde til det senere. 110 00:07:15,410 --> 00:07:21,330 Bourne shell scripts skal køre under Korn shell eller Bash. 111 00:07:21,330 --> 00:07:22,650 Hvis du skriver noget for Bourne shell, 112 00:07:22,650 --> 00:07:26,180 du kan sikkert udføre det under ksh eller bash. 113 00:07:26,180 --> 00:07:30,610 Korn shell scripts vil formentlig køre under Bash, men jeg kan ikke garantere det. 114 00:07:30,610 --> 00:07:36,040 Senere her, bør C-shell scripts køre under TC-shell. 115 00:07:38,850 --> 00:07:41,690 C-shell var faktisk aldrig flittigt brugt til scripting 116 00:07:41,690 --> 00:07:48,110 eftersom Bourne shell og senere Bourne-type granater var at foretrække til dette formål. 117 00:07:48,110 --> 00:07:50,620 Så det er virkelig ikke så vigtigt. 118 00:07:50,620 --> 00:07:53,480 Der er en hel masse af Bourne shell scripts, der blev skrevet for længe siden, 119 00:07:53,480 --> 00:07:56,860 før Korn shell eller Bourne-igen shell blev indført. 120 00:07:56,860 --> 00:07:59,300 De er stadig i brug, en del af de operativsystemer, 121 00:07:59,300 --> 00:08:01,590 og så vil du finde dem, hvis du kigger ind i operativsystemet 122 00:08:01,590 --> 00:08:03,760 eller nogle gamle programmering pakker. 123 00:08:03,760 --> 00:08:12,840 >> Bash er til en vis grad ved at blive en slags lingua franca for operativsystemer. 124 00:08:12,840 --> 00:08:17,580 Det er allerede blevet udvidet til Windows og til FOS. 125 00:08:17,580 --> 00:08:20,440 VMS, hvis du ikke kender, er et proprietært operativsystem 126 00:08:20,440 --> 00:08:25,480 af Digital Equipment Corporation, som stadig er i brug, i vid udstrækning bag kulisserne. 127 00:08:25,480 --> 00:08:29,250 Og hvis det kommer til at køre på flere forskellige operativsystemer, 128 00:08:29,250 --> 00:08:31,110 sandsynligvis de mennesker har en tendens til at flytte til det. 129 00:08:31,110 --> 00:08:33,840 Men denne udvikling er noget relativt nyt. 130 00:08:33,840 --> 00:08:39,490 Det er lige begyndt, så jeg kan ikke forudsige, om dette vil vise sig at være virkelig den slags lingua franca. 131 00:08:39,490 --> 00:08:43,539 Også, fordi fil stinavne og biblioteker er forskellige 132 00:08:43,539 --> 00:08:46,210 mellem disse forskellige operativsystemer, 133 00:08:46,210 --> 00:08:50,250 du måske ikke være i stand til at skrive en Bash script på et operativsystem 134 00:08:50,250 --> 00:08:51,840 og derefter køre den på en anden. 135 00:08:51,840 --> 00:08:54,440 Du bør være i stand til at flytte den mellem forskellige Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Mac OS-styresystemer, men ikke nødvendigvis til Windows eller VMS. 137 00:08:59,020 --> 00:09:01,390 Du har måske til at ændre Filstinavnet beskrivelser, 138 00:09:01,390 --> 00:09:03,180 og nogle biblioteker kan være anderledes, 139 00:09:03,180 --> 00:09:05,230 som kan påvirke den måde, at nogle kommandoer arbejde 140 00:09:05,230 --> 00:09:09,730 eller hvordan de behandler argumenter og lignende. 141 00:09:09,730 --> 00:09:19,230 Hertil kommer, at en anden advarsel her er, at der ikke er nogen garanti 142 00:09:19,230 --> 00:09:23,570 at alle de forskellige skaller jeg har nævnt - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn shell, Bourne-igen shell - vil være tilgængelig under nogen Unix 144 00:09:29,880 --> 00:09:33,750 eller Linux eller Mac OS computer. 145 00:09:33,750 --> 00:09:35,620 De kan simpelthen ikke være der. 146 00:09:35,620 --> 00:09:38,300 Det er en af ​​de advarsler her. 147 00:09:38,300 --> 00:09:41,490 Det er en uheldig begrænsning her siden du gerne vil tingene til at fungere overalt, 148 00:09:41,490 --> 00:09:44,380 men desværre kan du ikke stole på det. 149 00:09:44,380 --> 00:09:47,230 >> Okay. Næste en her. 150 00:09:50,280 --> 00:09:54,370 Lad os sige, at du ønsker at skrive en shell script, 151 00:09:54,370 --> 00:09:57,170 et program, der består af shell-kommandoer. 152 00:09:57,170 --> 00:10:01,200 Du skriver dine kommandoer, læg dem i en fil og udføre filen. 153 00:10:01,200 --> 00:10:04,230 Hvad hvis du ønsker at medtage argumenter? 154 00:10:04,230 --> 00:10:09,650 I tilfælde af shell operationer er argumenter kaldes parametre eller positionelle parametre 155 00:10:09,650 --> 00:10:15,940 og de vil blive kaldt af et dollartegn og tal, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Så hvis scriptet har dette navn, kan mit første argument være argument 1 157 00:10:27,000 --> 00:10:30,540 og min anden kunne være argument 2, 158 00:10:30,540 --> 00:10:34,110 og inde i mit script, hvis jeg ønsker at henvise til disse ting - 159 00:10:34,110 --> 00:10:36,810 lad os slette dette, da jeg ikke rigtig kommer til at køre det - 160 00:10:36,810 --> 00:10:42,160 inde i mit manuskript, jeg har måske $ 1 for at henvise til arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, som vil komme ud på den måde, arg2. 162 00:10:45,890 --> 00:10:50,080 Så disse symboler er til rådighed til at henvise til argumenterne, 163 00:10:50,080 --> 00:10:52,390 og dem, gælder for alle de skaller. 164 00:10:52,390 --> 00:10:56,520 Desuden er der andre tegn. 165 00:10:56,520 --> 00:11:01,700 $ * Refererer til hele argumentet listen, dem alle. 166 00:11:01,700 --> 00:11:05,390 $ # Refererer til antallet af argumenter. 167 00:11:05,390 --> 00:11:07,910 Igen, dette gælder for alle de skaller. 168 00:11:07,910 --> 00:11:15,540 Disse symboler, * og #, kan bruges med disse betydninger i andre steder også. 169 00:11:15,540 --> 00:11:17,940 Vi vil ikke komme ind i det. 170 00:11:17,940 --> 00:11:20,460 >> Shell specificerende linje. Hvad er den til? 171 00:11:20,460 --> 00:11:27,760 Lad os sige, du har skrevet et script, og det er for en bestemt shell, og du ønsker at køre den. 172 00:11:27,760 --> 00:11:33,500 Hvordan kan du vide, hvad shell dit operativsystem vil bruge til at køre dit script? 173 00:11:33,500 --> 00:11:37,230 På et tidspunkt kan du antage, at det ville køre det i Bourne shell 174 00:11:37,230 --> 00:11:39,440 hvis du ikke siger noget andet, 175 00:11:39,440 --> 00:11:41,730 men folk er ikke at skrive scripts i Bourne shell, meget længere 176 00:11:41,730 --> 00:11:43,750 og du kan ikke engang stole på længere. 177 00:11:43,750 --> 00:11:48,740 Så her har vi en shell specifier linje lige her. 178 00:11:48,740 --> 00:11:52,450 Der angiver Bash. 179 00:11:52,450 --> 00:11:56,750 Bemærk, at det præciseres det i stinavnet, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Hvis en computer har Bash shell, men ikke i bin, / bin, det vil ikke fungere. 181 00:12:02,870 --> 00:12:06,870 Det er en anden kvalifikationskamp, ​​en anden forsigtighed her. 182 00:12:06,870 --> 00:12:09,500 Pundet tegn er kommentaren linje karakter. 183 00:12:09,500 --> 00:12:12,300 Det gælder for alle skaller. 184 00:12:12,300 --> 00:12:18,610 Den særlige tilfælde her, #! i starten af ​​et script, er et særligt tilfælde. 185 00:12:18,610 --> 00:12:23,410 Der angiver skallen til at køre scriptet. 186 00:12:23,410 --> 00:12:30,230 Som jeg sagde, kan det ikke være det samme sted / bin. 187 00:12:30,230 --> 00:12:34,880 Derudover er der en anden ting her. 188 00:12:34,880 --> 00:12:41,250 Hvis du bare bruge havelåge uden udråbstegn og stinavn, 189 00:12:41,250 --> 00:12:44,640 der skal angive et C-shell. 190 00:12:44,640 --> 00:12:48,300 Men jeg ikke anbefale at gøre det, fordi jeg ikke er i stand til at garantere, 191 00:12:48,300 --> 00:12:49,750 at der altid vil arbejde. 192 00:12:49,750 --> 00:12:52,220 Hvis du vil have en C-shell, ville det være bedre at sige det. 193 00:12:52,220 --> 00:12:58,450 Så er der noget temmelig forvirrende her. 194 00:12:58,450 --> 00:13:03,940 Hvis du bruger en shell specifier linje som / bin / bash 195 00:13:03,940 --> 00:13:07,070 og at Shell ikke er tilgængelig der, 196 00:13:07,070 --> 00:13:10,680 Der er ikke sådan noget som / bin / bash på den pågældende computer, 197 00:13:10,680 --> 00:13:14,330 enten fordi det ikke har Bash, eller fordi det er i en anden placering, 198 00:13:14,330 --> 00:13:17,450 får du en fejl, fortæller dig, at det script, du kørte ikke eksisterer. 199 00:13:17,450 --> 00:13:21,510 Og selvfølgelig eksisterer dit script, så fejlmeddelelsen er forvirrende. 200 00:13:21,510 --> 00:13:24,810 Grunden til, at operativsystemet giver dig denne fejl 201 00:13:24,810 --> 00:13:28,370 eller mere præcist, at din interaktiv shell, hvor du kører det giver denne fejl, 202 00:13:28,370 --> 00:13:33,510 er, at det rapporterer den kommando, du brugte, som er navnet på scriptet. 203 00:13:33,510 --> 00:13:36,920 Denne kommando effektivt kaldes skallen ved navn scriptet. 204 00:13:36,920 --> 00:13:39,330 Det er, hvor du får det forvirrende fejlmeddelelse. 205 00:13:39,330 --> 00:13:42,980 En anden måde at kalde shell script 206 00:13:42,980 --> 00:13:45,910 er ved at angive skallen på kommandolinjen, som her. 207 00:13:45,910 --> 00:13:52,510 Dette er en kommando. Det siger køre Bash og derefter køre mit script i Bash. 208 00:13:52,510 --> 00:13:55,680 Det vil tage forrang en anvisning linje, 209 00:13:55,680 --> 00:14:02,090 og dette har den funktion at tillade dig at sørge for varierende stinavne. 210 00:14:02,090 --> 00:14:04,840 Hvis du bare give en kommando, vil styresystemet kigge efter, at kommando 211 00:14:04,840 --> 00:14:06,410 forskellige steder. 212 00:14:06,410 --> 00:14:08,820 Hvis den er tilgængelig, hvis den finder det. 213 00:14:08,820 --> 00:14:12,290 Computeren vil finde Bash uanset hvor den er placeret, og køre den, 214 00:14:12,290 --> 00:14:15,470 så du behøver ikke så at være bekymret over, hvor det finder det. 215 00:14:15,470 --> 00:14:17,360 Der er potentielt andre bekymringer her, 216 00:14:17,360 --> 00:14:20,830 som om der er mere end 1 version af Bash, hvilket er muligt omend usandsynligt. 217 00:14:20,830 --> 00:14:23,540 Så det er en anden måde at beskæftige sig med disse ting. 218 00:14:23,540 --> 00:14:30,480 Anvisning linjer kan kalde enhver shell. 219 00:14:30,480 --> 00:14:34,480 De kan også ringe til andre end skaller ting. 220 00:14:34,480 --> 00:14:37,940 Eksempler, jeg har her, er sed, der er åen redaktør; 221 00:14:37,940 --> 00:14:39,900 awk, hvilket er et mønster-sprog; 222 00:14:39,900 --> 00:14:43,680 og perl, en meget højt udviklet scriptsprog. 223 00:14:43,680 --> 00:14:47,570 Hvis du sætter en specificerende linje angiver et af disse programmer i begyndelsen, 224 00:14:47,570 --> 00:14:51,270 det vil gå direkte ind i dette program frem for at starte en shell. 225 00:14:51,270 --> 00:14:54,030 Disse programmer har grænser for deres evner. 226 00:14:54,030 --> 00:14:58,790 Perl er meget dygtige. Sed er en editor. Det kan gøre ting end blot at redigere. 227 00:14:58,790 --> 00:15:03,300 Men det kan være vanskeligt at programmere det. 228 00:15:03,300 --> 00:15:09,670 Desuden passerer argumenter og ting til at script er enten umuligt eller forvirrende. 229 00:15:09,670 --> 00:15:15,030 Så i de tilfælde, med awk eller sed, det er, i hvert fald i min erfaring, 230 00:15:15,030 --> 00:15:18,910 foretrække at skrive en shell script og call awk eller sed fra shell script 231 00:15:18,910 --> 00:15:24,660 snarere end at ringe awk eller sed som scriptet specifier linje. 232 00:15:24,660 --> 00:15:26,980 Perl er en meget alsidig sprog, som jeg sagde. 233 00:15:26,980 --> 00:15:30,050 Du kan ikke køre interaktive kommandoer i perl, 234 00:15:30,050 --> 00:15:32,660 hvilket betyder at du ikke kan teste dele af scripts, som du udvikler 235 00:15:32,660 --> 00:15:33,970 ved at køre dem interaktivt. 236 00:15:33,970 --> 00:15:36,160 Men det er en yderst stand sprog 237 00:15:36,160 --> 00:15:40,960 og har udviklet sig til et meget udbredt værktøj. 238 00:15:40,960 --> 00:15:45,720 Det er bare en lille smule af en parentetisk bemærkning om anvisning linjer. 239 00:15:45,720 --> 00:15:50,610 >> I alle eller de fleste former for Linux - igen, jeg kan ikke være sikker på det er alt - 240 00:15:50,610 --> 00:15:57,900 og i Mac OS, hvis du skriver csh du får tcsh, 241 00:15:57,900 --> 00:16:00,570 og hvis du skriver sh får du bash. 242 00:16:00,570 --> 00:16:05,020 De forsøgte der for at give dig de mere avancerede versioner af disse skaller, 243 00:16:05,020 --> 00:16:07,940 men det kan være forvirrende. 244 00:16:07,940 --> 00:16:16,720 Hvis du skriver et script ved hjælp tcsh eller Bash funktioner mens ringer csh eller sh 245 00:16:16,720 --> 00:16:22,230 og derefter prøve at køre det på en computer, som ikke har tcsh eller Bash, 246 00:16:22,230 --> 00:16:25,050 kan du få nogle fejl, hvis der er kommandoer derinde 247 00:16:25,050 --> 00:16:27,970 som disse skaller ikke kan genkende. 248 00:16:27,970 --> 00:16:34,120 Derudover kan du have kaldt din shell på din lokale computer 249 00:16:34,120 --> 00:16:37,700 kalde det som sh eller csh og derefter få de mere avancerede skaller. 250 00:16:37,700 --> 00:16:41,440 Du må ikke engang tænke på det faktum, at du bruger de mere avancerede shell. 251 00:16:41,440 --> 00:16:45,670 Så dette er en potentiel faldgrube. 252 00:16:45,670 --> 00:16:50,290 Hvordan er det fastslået, at hvis du skriver sh du får Bash, 253 00:16:50,290 --> 00:16:55,580 hvis du skriver csh får du TSCH? 254 00:16:55,580 --> 00:16:59,940 Der er ting i disse computere kaldes links 255 00:16:59,940 --> 00:17:06,460 som kan forbinde til filnavne til at henvise til de samme ting. 256 00:17:06,460 --> 00:17:12,180 Det kan enten være 2 navne for den samme eller en fil, hvis formål er at henvise til en anden fil. 257 00:17:12,180 --> 00:17:17,550 De kaldes hårde og symbolske links. Vi vil ikke gå ind i det længere i dag. 258 00:17:17,550 --> 00:17:21,619 Der kan også være separate filer - 1 fil sh, 1 fil Bash - 259 00:17:21,619 --> 00:17:23,880 men de begge køre Bash. 260 00:17:23,880 --> 00:17:29,350 Så er der en anden kvalifikationskamp her. 261 00:17:29,350 --> 00:17:42,640 Hvis du ringer en af ​​disse granater ved et navn, 262 00:17:42,640 --> 00:17:46,640 du måske tror, ​​du ville få den samme funktionalitet som at kalde det et andet navn. 263 00:17:46,640 --> 00:17:49,700 Tja, der faktisk er ikke nødvendigvis sandt. 264 00:17:49,700 --> 00:17:55,020 Disse kommandoer kan undersøge det navn, som de blev kaldt 265 00:17:55,020 --> 00:18:00,020 og de kan på grundlag af samme navn, opfører sig anderledes. 266 00:18:00,020 --> 00:18:02,740 Der kan være spørgsmål om at forsøge at svare til en standard. 267 00:18:02,740 --> 00:18:06,060 Nogle af jer har måske hørt om POSIX-standarden eller en anden, 268 00:18:06,060 --> 00:18:08,730 måske andre funktioner. 269 00:18:08,730 --> 00:18:14,520 Dette kan vælges undertiden ved kommandolinjeargumenter 270 00:18:14,520 --> 00:18:17,310 eller ved at shell-variabler. 271 00:18:17,310 --> 00:18:22,170 At kalde det som sh eller bash kan faktisk føre til et andet henrettelse 272 00:18:22,170 --> 00:18:25,300 selvom det er den samme fil, som du udfører. 273 00:18:25,300 --> 00:18:31,800 En anden ting at overveje, er, at selv hvis en anden computer har tcsh eller Bash, 274 00:18:31,800 --> 00:18:35,310 hvis de ikke er forbundet som de er på din lokale computer 275 00:18:35,310 --> 00:18:37,990 hvis du har en Linux eller Mac OS lokal computer, 276 00:18:37,990 --> 00:18:45,630 så igen, du får skallen som du kalder sh eller csh, ikke den ene, som du måske foretrækker. 277 00:18:50,430 --> 00:19:01,130 Den nuværende Bourne shell har forbedringer mindre end i Bash 278 00:19:01,130 --> 00:19:06,100 men forbi dem i den oprindelige Bourne shell. 279 00:19:06,100 --> 00:19:09,690 Som et resultat af, at selv den nuværende Bourne shell, sh, 280 00:19:09,690 --> 00:19:14,560 selv når det ikke er Bash, ligner C sproget mere end C-shell gør. 281 00:19:14,560 --> 00:19:20,460 Det var ikke tilfældet, når C-shell først blev oprettet, men det har udviklet sig på den måde. 282 00:19:20,460 --> 00:19:26,560 Du vil måske bemærke her, at alle disse tomme navne bortset fra Bourne skal 283 00:19:26,560 --> 00:19:30,640 har noget at angive, hvilken shell de er - csh, bash - 284 00:19:30,640 --> 00:19:32,550 men Bourne shell er lige sh. 285 00:19:32,550 --> 00:19:34,910 Hvorfor? Det var den oprindelige shell. 286 00:19:34,910 --> 00:19:37,770 Det var skallen så, ikke en skal, 287 00:19:37,770 --> 00:19:41,090 og da det var skallen, var der ingen grund til at skelne den fra en anden skal. 288 00:19:41,090 --> 00:19:45,030 Så det er derfor det har det navn, og stadig gør. 289 00:19:50,630 --> 00:19:58,990 >> Denne top her er der en linje fra en password database for en konto, jeg har der 290 00:19:58,990 --> 00:20:01,680 på en anden computer. 291 00:20:01,680 --> 00:20:08,300 Jeg har tænkt mig at forsøge at få det navn, så du kan se, at en del i slutningen, skallen. 292 00:20:09,720 --> 00:20:15,450 Databasen kodeord holder login egenskaber for alle brugere. 293 00:20:15,450 --> 00:20:20,330 I begyndelsen er det brugernavn, som du kan se de sidste 2 bogstaver af mine nu. 294 00:20:20,330 --> 00:20:23,970 Felterne her er adskilt af kolon. 295 00:20:23,970 --> 00:20:28,210 Det sidste område, som du kan se, er bin / tcsh, skallen. 296 00:20:28,210 --> 00:20:30,230 Det er skallen anvisning. 297 00:20:30,230 --> 00:20:33,240 Der er noget interessant her. 298 00:20:33,240 --> 00:20:36,950 Da Unix blev først udviklet, var der kun 1 skal, 299 00:20:36,950 --> 00:20:38,350 så der var ingen valg der. 300 00:20:38,350 --> 00:20:45,570 Så hvorfor de tillader et felt i databasen adgangskode for at angive en shell? 301 00:20:45,570 --> 00:20:47,920 Jeg ved det ikke, men det er heldigt, at de gjorde. 302 00:20:47,920 --> 00:20:52,030 Det er temmelig vanskeligt at foretage ændringer i password-databasen format 303 00:20:52,030 --> 00:20:54,420 fordi mange programmer henvise til sit format 304 00:20:54,420 --> 00:20:57,720 og skulle skrives om. 305 00:20:57,720 --> 00:21:04,130 Det er en heldig eller tilfældig udvikling, de omfattede dette område. 306 00:21:04,130 --> 00:21:12,780 Den slags en password fil linje bruges på alle Unix og Linux-computere, så vidt jeg ved. 307 00:21:12,780 --> 00:21:14,650 Mac har sit eget system. 308 00:21:14,650 --> 00:21:17,810 Det har faktisk en adgangskode fil med de linjer i dette format, 309 00:21:17,810 --> 00:21:21,060 men det er ikke hvor brugeren karakteristika defineres. 310 00:21:21,060 --> 00:21:24,200 En anden parentetisk bemærkning der. 311 00:21:36,470 --> 00:21:46,020 >> Hvis du ringer til en shell, kan du kalde det som en sub-shell af dine eksisterende skaller. 312 00:21:46,020 --> 00:21:50,480 Så hvis jeg går her, lad os slippe af med disse ting. 313 00:21:50,480 --> 00:21:53,350 Her er jeg i C-shell. 314 00:21:56,830 --> 00:22:01,200 Denne variabel, som nøjagtigt identificerer min shell, 315 00:22:01,200 --> 00:22:04,300 faktisk ikke altid er en pålidelig måde at afgøre, hvad shell du kører, 316 00:22:04,300 --> 00:22:06,220 men i dette tilfælde er det. 317 00:22:06,220 --> 00:22:08,040 Hvad hvis jeg bare skrive - 318 00:22:09,970 --> 00:22:12,470 Nu er jeg i Bash. 319 00:22:12,470 --> 00:22:19,540 Nogle ting kommer til at være den samme. ls fortæller mig mine kommandoer. 320 00:22:19,540 --> 00:22:24,500 Hvis jeg gør en suspendere tilbage til mit C-shell, ls, samme. Right? 321 00:22:24,500 --> 00:22:28,890 fg, forgrunden, tilbage til min Bash shell. 322 00:22:28,890 --> 00:22:38,290 pwd, aktuelle mappe, tilbage til C-shell. 323 00:22:38,290 --> 00:22:43,180 pwd, andet bibliotek - faktisk ikke en anden mappe i dette tilfælde. 324 00:22:43,180 --> 00:22:45,110 Det er det samme bibliotek. 325 00:22:45,110 --> 00:22:50,000 Lad os sige, at jeg vil ringe til en kommando her: Hvor ls. 326 00:22:50,000 --> 00:22:52,140 Hvad betyder det så? 327 00:22:52,140 --> 00:22:53,670 Det fortæller mig, hvor de ls kommandoen, 328 00:22:53,670 --> 00:22:56,670 den, der giver mig en mappe notering, er beliggende i ls. 329 00:22:56,670 --> 00:23:01,460 Lad os gå tilbage til Bash shell. Lad os prøve det samme. 330 00:23:01,460 --> 00:23:05,830 Hmm, interessant dér, hvor: kommando ikke fundet. 331 00:23:05,830 --> 00:23:07,400 Hvorfor er det? 332 00:23:07,400 --> 00:23:11,570 Den hvor kommando er indbygget i C-shell. 333 00:23:11,570 --> 00:23:15,630 Dette er ikke en kommando, der skal læses ind i hukommelsen fra et andet sted og henrettet. 334 00:23:15,630 --> 00:23:20,310 C-shell kører det ved at overføre fuldbyrdelsen til en del af sin egen kode 335 00:23:20,310 --> 00:23:22,790 og det er ikke i Bash shell. 336 00:23:22,790 --> 00:23:25,710 Så Bash, der ikke har en sådan indbygget kommando, ser for det, finder det ikke, 337 00:23:25,710 --> 00:23:27,720 og vi får en fejl. 338 00:23:27,720 --> 00:23:32,290 Så der har vi en Bash shell kører under en C-shell, og vi kalde det en sub-shell. 339 00:23:32,290 --> 00:23:38,480 Og bare i tilfælde af at du er nysgerrig, Bash shell har sin egen måde at lokalisere kommandoer. 340 00:23:38,480 --> 00:23:42,590 hash'et henviser til det faktum, at det kan udføres hurtigere, 341 00:23:42,590 --> 00:23:44,960 blive fundet hurtigere. 342 00:23:44,960 --> 00:23:48,610 Det er en af ​​de forbedringer, der er indbygget i nogle af disse skaller. 343 00:23:50,220 --> 00:23:54,200 >> Bourne-type skaller foretrækkes til programmering. 344 00:23:54,200 --> 00:23:57,300 De har kontrol strukturer som løkker, betingede udsagn, 345 00:23:57,300 --> 00:24:00,240 den slags kommandoer, som du kan bruge i programmeringssprog som C 346 00:24:00,240 --> 00:24:04,190 eller hvad sprog. Måske er du programmering i Java eller hvad. 347 00:24:04,190 --> 00:24:06,460 Skaller har dem også. 348 00:24:06,460 --> 00:24:11,790 Bourne-type skaller, især Bash, har mere 349 00:24:11,790 --> 00:24:15,730 og de er designet med større fleksibilitet. 350 00:24:15,730 --> 00:24:20,700 Det Bash shell har arrays. Den oprindelige Bourne skal ikke. 351 00:24:20,700 --> 00:24:26,130 Så det kan være betydeligt fordelagtigt for programmering. 352 00:24:26,130 --> 00:24:29,810 C-shell rent faktisk har arrays, men ikke har en masse af disse andre funktioner. 353 00:24:29,810 --> 00:24:33,450 Bourne-type skaller vil køre hurtigere 354 00:24:33,450 --> 00:24:36,520 hvis de ikke har de funktioner, der er bestemt til interaktiv brug. 355 00:24:36,520 --> 00:24:39,340 Du lægger ting ned til ét formål, og dette indlæser dem ned til et andet formål. 356 00:24:39,340 --> 00:24:41,520 Der er det trade-off der. 357 00:24:41,520 --> 00:24:44,510 De funktioner, som er beregnet til interaktiv brug 358 00:24:44,510 --> 00:24:46,920 virkelig er af ringe eller ingen brug for scripting. 359 00:24:46,920 --> 00:24:52,160 Det er muligt at bruge en interaktiv sub-shell ligesom den ene jeg startede der 360 00:24:52,160 --> 00:24:57,780 at afprøve kommandoer, som du har til hensigt at bruge i et script. 361 00:24:57,780 --> 00:25:01,180 Det er, hvad du ikke kan gøre med perl. Du kan gøre det med skaller. 362 00:25:01,180 --> 00:25:04,850 Selv de strukturer som for loops og så videre kan køres interaktivt. 363 00:25:04,850 --> 00:25:07,000 De er nogle gange nyttigt at køre interaktivt 364 00:25:07,000 --> 00:25:10,180 men mere sandsynligt du bruger dem til at udvikle et script. 365 00:25:15,690 --> 00:25:17,400 >> Aliaser. 366 00:25:17,400 --> 00:25:21,630 Dette kommer til at være omkring C-shell. 367 00:25:23,270 --> 00:25:27,570 Historie mekanisme, hvor du kommer tilbage til tidligere kommandoer 368 00:25:27,570 --> 00:25:30,340 eller dele af dem, at du allerede har kørt. 369 00:25:30,340 --> 00:25:33,680 Igen, om C-shell, Bourne shell og Korn shell have disse ting, 370 00:25:33,680 --> 00:25:35,620 men jeg har ikke tænkt mig at komme ind i dem. 371 00:25:35,620 --> 00:25:40,340 Så her er nogle nyttige aliaser, som jeg har. 372 00:25:43,100 --> 00:25:44,880 I stedet for at skrive ls - det er en fælles kommando - 373 00:25:44,880 --> 00:25:47,620 bare skrive l og spare 1 karakter. 374 00:25:47,620 --> 00:25:50,600 ls med forskellige muligheder, alle de arbejde. 375 00:25:50,600 --> 00:25:54,460 Bemærk, at disse definitioner har anførselstegn omkring dem. 376 00:25:54,460 --> 00:25:57,520 I disse tilfælde, anførselstegn er ikke nødvendige. 377 00:25:57,520 --> 00:26:00,100 Hvis du kan definere disse aliaser uden anførselstegn, ville det stadig arbejde. 378 00:26:00,100 --> 00:26:02,910 De anbefales. 379 00:26:02,910 --> 00:26:04,900 Der er situationer, hvor du ikke kan bruge citatet 380 00:26:04,900 --> 00:26:08,050 fordi du vil have noget til at ske, som citatet ville forhindre. 381 00:26:08,050 --> 00:26:11,210 Nogle gange kan du citere en del af definitionen, men ikke det hele. 382 00:26:11,210 --> 00:26:17,010 Det er også generelt anbefales at bruge apostroffer snarere end dobbelt anførselstegn. 383 00:26:17,010 --> 00:26:19,750 Anførselstegn have indvirkning på variable definitioner, 384 00:26:19,750 --> 00:26:22,950 især får dem til at blive evalueret stedet for at stoppe den. 385 00:26:22,950 --> 00:26:25,910 Hvorfor skulle vi ønsker at stoppe evalueringen? 386 00:26:25,910 --> 00:26:28,710 Og hvordan gør citater gøre det for os? 387 00:26:28,710 --> 00:26:32,600 >> Her er en kommando, som du måske vil finde interessant. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, som du sikkert ved, er et wildcard udtryk 390 00:26:37,640 --> 00:26:40,290 for alle de filnavne, der begynder med g. 391 00:26:40,290 --> 00:26:46,410 Hvis jeg bare skrive i en kommando ls g *, får jeg en liste over alle disse navne i min nuværende bibliotek. 392 00:26:46,410 --> 00:26:50,870 Hvis jeg definerer som alias, da det er her med anførselstegn, 393 00:26:50,870 --> 00:26:56,990 det vil køre denne kommando i din nuværende bibliotek, hvor du kører det. 394 00:26:56,990 --> 00:27:01,250 Men hvis du kører aliasdefinitionen uden anførselstegn, 395 00:27:01,250 --> 00:27:09,620 det vil evaluere wildcard g * når den kører dette afgørende kommando. 396 00:27:09,620 --> 00:27:14,400 Så definitionen af ​​alias vil blive ls efterfulgt af liste over filer i mappen 397 00:27:14,400 --> 00:27:16,310 hvor alias kommandoen er udført, 398 00:27:16,310 --> 00:27:19,180 uanset hvor du rent faktisk har til hensigt at køre kommandoen. 399 00:27:19,180 --> 00:27:26,360 Dette er ikke til megen nytte, og de enkelte anførselstegn forhindre evaluering af stjerne. 400 00:27:26,360 --> 00:27:30,780 Så du bare få definitionen væsen ls g *. 401 00:27:30,780 --> 00:27:35,510 Så når du kører alias LGS, det så sætter den ud. 402 00:27:35,510 --> 00:27:40,490 Nu er der ingen citater, og det vil evaluere stjerne, når du kører alias kommando. 403 00:27:40,490 --> 00:27:43,900 Så det er én ting. 404 00:27:43,900 --> 00:27:46,590 Anførselstegn ville have den samme effekt her, 405 00:27:46,590 --> 00:27:50,580 men der er andre tilfælde, hvor dobbelte anførselstegn ikke ville fungere så godt. 406 00:27:50,580 --> 00:27:52,450 >> Her er en anden. 407 00:27:52,450 --> 00:27:54,270 Du kan kende den grep kommando. 408 00:27:54,270 --> 00:28:02,110 Den grep kommando kan bruges til at scanne en fil til linjer, der har visse strenge. 409 00:28:02,110 --> 00:28:10,350 Så lad os gå over her, og jeg vil forlade min Bourne shell. 410 00:28:23,570 --> 00:28:25,450 Okay. Her er en fil. 411 00:28:25,450 --> 00:28:31,490 Lad os sige det er grep abc strenge. Der er det. 412 00:28:31,490 --> 00:28:37,930 Hvis jeg gør grep zddd, får jeg ingenting. Okay. 413 00:28:37,930 --> 00:28:40,960 Så det finder en streng, rapporterer, at det ikke finder, at det ikke rapportere det. 414 00:28:40,960 --> 00:28:44,930 Det udgange enhver linje, som har denne streng på den. 415 00:28:44,930 --> 00:28:49,080 Der er alle mulige muligheder her, som du kan finde i dokumentationen. 416 00:28:49,080 --> 00:28:52,160 Her er en måde at gøre det. 417 00:28:52,160 --> 00:29:03,290 Hvad med denne ene, alias grabc 'grep abc'? 418 00:29:03,290 --> 00:29:09,000 Det kommer til at omfatte 1 argument, når aliaset er defineret. 419 00:29:09,000 --> 00:29:26,300 Så hvis jeg gør det her, nu, hvis jeg gør grabc, 420 00:29:26,300 --> 00:29:30,620 nu alias omfatter mere end den simple kommando. Det har også argumentet. 421 00:29:30,620 --> 00:29:32,190 Hidtil der virker. 422 00:29:32,190 --> 00:29:38,590 Jeg har en anden kommando her, denne ene, så dem er forskellige strenge derinde 423 00:29:38,590 --> 00:29:46,790 og vise, at dette ikke finde noget der, da det ikke passer. 424 00:29:46,790 --> 00:29:56,180 >> Hvad hvis jeg ønsker at lade definitionen alias den fil, som jeg har tænkt mig at søge 425 00:29:56,180 --> 00:30:02,970 og jeg ønsker at give som et argument til alias den streng, jeg leder efter? 426 00:30:02,970 --> 00:30:08,040 Jeg vil måske sige abc som argument til mit alias, 427 00:30:08,040 --> 00:30:10,870 men aliaset allerede fastlagt filen. 428 00:30:10,870 --> 00:30:15,710 Og det er her, dette udtryk kommer i. 429 00:30:20,430 --> 00:30:25,270 Bemærk her har vi grep ligesom før. 430 00:30:25,270 --> 00:30:28,130 Vi har filen her, strygere. 431 00:30:28,130 --> 00:30:35,610 \! ^, Sådan en mærkelig udtryk, formoder jeg, hvis du ikke har set det før. 432 00:30:35,610 --> 00:30:39,920 Udråbstegn er en del af C-shell historie mekanisme. 433 00:30:39,920 --> 00:30:45,220 Det kan huske tidligere kommandoer, kan det huske argumenter for de kommandoer og så videre. 434 00:30:46,760 --> 00:31:01,570 Historien mekanisme bruges som en del af aliasing. 435 00:31:01,570 --> 00:31:07,390 Hvis du angiver en linje efter udråbstegn, vil det henvise til denne linje i historien listen 436 00:31:07,390 --> 00:31:11,910 som vi ikke vil komme ind nu, da det er en helt anden emne. 437 00:31:11,910 --> 00:31:16,280 Det er muligt at angive en del af en linje. 438 00:31:16,280 --> 00:31:22,950 Så! 03:02 ville være det andet argument kommando nummer 3. 439 00:31:22,950 --> 00:31:30,430 Indsætningstegn her i dette udtryk står for det første argument. 440 00:31:30,430 --> 00:31:34,410 Hvis du ikke giver det en indikation af, hvilken kommando du refererer til, 441 00:31:34,410 --> 00:31:37,300 det henviser til det umiddelbart foregående kommando, 442 00:31:37,300 --> 00:31:41,990 og indsætningstegn er et symbol for det første argument. 443 00:31:41,990 --> 00:31:46,820 Fordi det er indsætningstegn og ikke antallet, behøver du ikke behøver at bruge kolon, 444 00:31:46,820 --> 00:31:52,660 så ^ betyder! det første argument til den forrige kommando. 445 00:31:52,660 --> 00:31:55,020 Lidt blandet op her. 446 00:31:55,020 --> 00:31:58,450 I dette tilfælde, når du bruger dette som et alias definition, 447 00:31:58,450 --> 00:32:04,650 historie henvisningen refererer tilbage til de kommandoer, hvor alias anvendes. 448 00:32:04,650 --> 00:32:08,470 Så dette går tilbage 1 kommando som en historie operation, 449 00:32:08,470 --> 00:32:11,810 men som et alias operation det refererer til den kommando, som du ville skrive, 450 00:32:11,810 --> 00:32:14,780 sige, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Vi har de citater her i det. Hvad er backslash efter? 452 00:32:20,240 --> 00:32:30,810 I dette tilfælde, som andre steder, vi ikke ønsker at udføre historie mekanismen 453 00:32:30,810 --> 00:32:33,680 samtidig med at definere alias. 454 00:32:33,680 --> 00:32:37,900 Hvis vi ikke har omvendt skråstreg der, ville skallen trække i det første argument 455 00:32:37,900 --> 00:32:41,870 af kommandoen lige før det løb denne alias kommando, som vi ikke ønsker. 456 00:32:41,870 --> 00:32:47,520 Vi ønsker, at dette skal bygges i den alias kommando til at ringe i et argument senere. 457 00:32:47,520 --> 00:32:53,550 Enkelte citater ikke undslippe et udråbstegn, historien reference. 458 00:32:53,550 --> 00:32:57,450 Måske kender du udtrykket flugt betyder at ændre betydningen af ​​noget. 459 00:32:57,450 --> 00:33:00,260 I dette tilfælde betyder det, at stoppe noget fra at have en særlig betydning. 460 00:33:00,260 --> 00:33:03,030 Udråbstegn særlige betydning er historie. 461 00:33:03,030 --> 00:33:05,790 Flygte, og det ikke har denne betydning. 462 00:33:05,790 --> 00:33:08,080 Citater ikke gør det, backslash gør. 463 00:33:08,080 --> 00:33:11,900 Så vi faktisk bruger 2 niveauer af undslippe her. 464 00:33:23,500 --> 00:33:29,620 Jeg har tænkt mig at flytte denne kommando ind i det andet vindue uden at skrive det 465 00:33:29,620 --> 00:33:35,210 ved hjælp af disse redigering, som du kan finde nyttige. 466 00:33:40,620 --> 00:33:42,460 Noget andet her skal jeg vise dig. 467 00:33:42,460 --> 00:33:46,730 Hvis du bare skriver alias uden argumenter, det fortæller dig alle dine argumenter. 468 00:33:46,730 --> 00:33:48,640 Dette er en flok aliaser Jeg havde allerede her 469 00:33:48,640 --> 00:33:53,400 udover dem, som jeg har brugt her i dag. 470 00:33:53,400 --> 00:34:00,220 Men hvis jeg bare skrive med navnet på et alias, det fortæller mig, hvad det betyder. 471 00:34:00,220 --> 00:34:03,390 Bemærk, at citaterne er væk, og den backslash er væk. 472 00:34:03,390 --> 00:34:08,620 Denne streng her er resultatet af denne Aliasdefinitionen, 473 00:34:08,620 --> 00:34:12,199 og nu har bare! ^ i det. 474 00:34:12,199 --> 00:34:19,150 Dette kommer til at se i filen strenge til noget. 475 00:34:19,150 --> 00:34:34,900 Så hvis jeg gør grstrings_file strygere, jeg ikke give det noget at kigge efter der, 476 00:34:34,900 --> 00:34:37,429 men det ser i strenge. 477 00:34:37,429 --> 00:34:42,330 Det gjorde ikke finde ordet strenge i filen strenge, men det gør finde abc. 478 00:34:42,330 --> 00:34:46,770 Og det gør ikke finde det. 479 00:34:46,770 --> 00:34:52,330 Så her giver vi et argument, der rammer ind i definitionen af ​​alias 480 00:34:52,330 --> 00:34:55,530 der er indsat i den. 481 00:34:55,530 --> 00:34:58,540 Det er, hvor dette udtryk kommer fra. 482 00:34:58,540 --> 00:35:00,240 Du kan bruge mere end 1. 483 00:35:00,240 --> 00:35:03,170 Indsætningstegn er et symbol for det første argument. 484 00:35:03,170 --> 00:35:07,510 Hvis du ønskede at bruge et andet argument, ville du så sige: 2.. 485 00:35:07,510 --> 00:35:11,250 Der er ingen særlige symbol for det andet argument. 486 00:35:11,250 --> 00:35:14,790 Og fordi du bruger et tal, ville du nødt til at bruge kolon. 487 00:35:14,790 --> 00:35:17,220 Der er imidlertid et andet valg her. 488 00:35:17,220 --> 00:35:21,220 Den dollartegn står for det sidste argument. 489 00:35:21,220 --> 00:35:23,320 Og fordi det er et symbol, kan du udelade tyktarmen. 490 00:35:23,320 --> 00:35:25,870 Så det ville være det sidste argument i listen. 491 00:35:25,870 --> 00:35:27,900 Og der er også den der. 492 00:35:27,900 --> 00:35:31,380 Asterisk betyder alt, så dette er den komplette argument listen 493 00:35:31,380 --> 00:35:35,150 og igen, kan du udelade tyktarmen, fordi det er ikke et tal. 494 00:35:36,970 --> 00:35:39,950 Jeg håber du er alle observere alt dette. 495 00:35:39,950 --> 00:35:54,100 >> Historie mekanisme kan gå tilbage til tidligere linjer i historien listen. 496 00:35:54,100 --> 00:36:01,370 Du kan gøre dette i et alias definition. 497 00:36:01,370 --> 00:36:02,950 Jeg har aldrig set dette gjort. 498 00:36:02,950 --> 00:36:05,840 Det ville have den virkning at trække tidligere kommandoer fra oversigtslisten 499 00:36:05,840 --> 00:36:08,130 når du udfører alias, som kunne være forskellige kommandoer 500 00:36:08,130 --> 00:36:11,240 afhængigt af hvornår og hvor du udfører det. 501 00:36:11,240 --> 00:36:14,020 Tænkes du måske ønsker at trække sig ud en sådan henvisning 502 00:36:14,020 --> 00:36:15,900 bare at vide, hvad en tidligere kommando var. 503 00:36:15,900 --> 00:36:17,280 Jeg har aldrig set det ske. 504 00:36:17,280 --> 00:36:19,970 Jeg formoder, nogen vil måske, men det er meget usandsynligt. 505 00:36:19,970 --> 00:36:26,480 Der er en anden ting her. 506 00:36:26,480 --> 00:36:33,060 Hvis du bruger denne historie-typebetegnelse, 507 00:36:33,060 --> 00:36:38,190 så kun de argumenter, hvor der er en sådan henvisning er brugt. 508 00:36:38,190 --> 00:36:42,180 Hvis du har et alias definition, som ikke bruger en historie-typebetegnelse, 509 00:36:42,180 --> 00:36:44,060 hvis det blot bliver begyndelsen af ​​kommandoen 510 00:36:44,060 --> 00:36:46,520 og du har yderligere argumenter, så alt hvad du skriver, efter at 511 00:36:46,520 --> 00:36:48,450 vil blive føjet til kommandoen. 512 00:36:48,450 --> 00:36:52,040 I dette tilfælde, det eksempel jeg lige gav der, vi brugte det første argument; 513 00:36:52,040 --> 00:36:54,610 vi ikke bruge nogen andre. 514 00:36:54,610 --> 00:36:57,960 Hvis andre argumenter havde fået på kommandolinjen, ville de ikke blive brugt. 515 00:36:57,960 --> 00:37:04,630 Så hvis du bruger historien henvisningen på alle, så skal du bruge det til at få noget argument. 516 00:37:04,630 --> 00:37:11,310 >> Der er en anden ting her vil jeg blot nævne, dels i parentes, 517 00:37:11,310 --> 00:37:15,250 nemlig at denne historie mekanisme med udråbstegn 518 00:37:15,250 --> 00:37:18,010 går tilbage til den oprindelige C-shell. 519 00:37:18,010 --> 00:37:27,060 Tcsh introduceret historie operationer 520 00:37:27,060 --> 00:37:30,910 der anvender den slags kommandoer og strygere fra redaktionen, 521 00:37:30,910 --> 00:37:33,650 enten Emacs eller VI. 522 00:37:33,650 --> 00:37:36,430 Min personlige mening er Emacs er meget lettere at bruge til dette formål 523 00:37:36,430 --> 00:37:39,390 selvom du bruger vi til din almindelige redigering. 524 00:37:39,390 --> 00:37:43,900 Der er forskellige Emacs-kommandoer, som nu er tilpasset til historien. 525 00:37:43,900 --> 00:37:46,410 Kontrol P får den forrige linje i historien listen. 526 00:37:46,410 --> 00:37:48,840 En anden Kontrol P får du den ene før. 527 00:37:48,840 --> 00:37:50,540 Pil op gør det samme. 528 00:37:50,540 --> 00:37:54,190 Kontrol N får den næste kommando, hvis du allerede har rullet tilbage nogle måder. 529 00:37:54,190 --> 00:37:55,880 Pil ned gør det også. 530 00:37:55,880 --> 00:38:00,480 Du kan gå til venstre til højre med pilene og forskellige andre ting. 531 00:38:00,480 --> 00:38:02,390 Dette kan gøre brug af historikfunktion 532 00:38:02,390 --> 00:38:05,070 meget nemmere end at bruge udråbstegn syntaks, 533 00:38:05,070 --> 00:38:07,930 men du ville ikke bruge det i et alias definition. 534 00:38:17,780 --> 00:38:20,020 Vi vil gå over, at en anden gang. 535 00:38:24,300 --> 00:38:25,810 >> Variabler. 536 00:38:26,880 --> 00:38:29,510 Du ved, hvad variabler er i programmeringssprog. 537 00:38:29,510 --> 00:38:31,680 Skallerne har dem også. 538 00:38:31,680 --> 00:38:37,350 C-shell bruger kommandosættet at tildele variabler 539 00:38:37,350 --> 00:38:41,360 så sætter variablen a værdien af ​​b - 540 00:38:41,360 --> 00:38:46,390 som jeg sagde, en ubrugelig definition, men en illustration af, hvordan det bliver brugt. 541 00:38:48,790 --> 00:38:52,410 Den indstillede kommando vil oprette en variabel, hvis den ikke allerede findes. 542 00:38:55,270 --> 00:39:02,490 De positionelle parametre for shell scripts kan betragtes som variable, 543 00:39:02,490 --> 00:39:10,750 men brugen af ​​dem, og reglerne for dem er noget anderledes. 544 00:39:10,750 --> 00:39:14,320 Du kan ikke tildele en værdi til $ 1 i løbet af et script. 545 00:39:14,320 --> 00:39:18,340 Du ville have til at definere en ny variabel til dette formål, hvis nogle af jer ville. 546 00:39:23,000 --> 00:39:28,470 Type sæt med nogen argumenter, og du får en liste over alle de aktuelt definerede variable. 547 00:39:28,470 --> 00:39:34,220 Og lad os komme over til min anden shell her og se, hvad vi får, hvis vi gør det. 548 00:39:34,220 --> 00:39:37,110 En ganske lang liste der, right? 549 00:39:37,110 --> 00:39:40,990 Rul op en lille smule. Kig på alt det der. 550 00:39:40,990 --> 00:39:44,330 Nogle af disse ting er defineret automatisk af skallen. 551 00:39:44,330 --> 00:39:49,320 Skallen skaber de variable og giver det en værdi. 552 00:39:49,320 --> 00:39:52,730 Nogle af dem er defineret af skallen, men derefter omdefineres af brugeren 553 00:39:52,730 --> 00:39:54,820 ifølge hans præferencer. 554 00:39:54,820 --> 00:39:59,110 Og nogle af dem er skabt af brugeren afhængigt af, hvad han laver den dag. 555 00:39:59,110 --> 00:40:01,880 Det er bare sat uden argumenter. 556 00:40:06,920 --> 00:40:10,050 Der er en ulige funktion her af denne ting. 557 00:40:10,050 --> 00:40:17,980 Der er nødt til at være enten ingen mellemrum mellem lighedstegnet og variabelnavnet 558 00:40:17,980 --> 00:40:23,700 og værdien eller rum på begge sider af lighedstegnet, 559 00:40:23,700 --> 00:40:28,940 som i denne. 560 00:40:35,620 --> 00:40:41,340 Det vil ikke fungere, og dette rent faktisk er en gyldig kommando 561 00:40:41,340 --> 00:40:43,390 men det vil ikke gøre, hvad du har til hensigt. 562 00:40:43,390 --> 00:40:50,070 Denne kommando vil arbejde, fordi hvis du bare sige sæt og en variabel navn 563 00:40:50,070 --> 00:40:54,890 uden lighedstegn eller sæt og et variabelnavn med et lighedstegn og ingen værdi, 564 00:40:54,890 --> 00:40:57,770 det vil sætte variablen til en null-værdi. 565 00:40:57,770 --> 00:41:00,120 Så sæt a = er en gyldig kommando. 566 00:41:00,120 --> 00:41:04,370 Sættet Kommandoen kan definere mere end 1 variabel på samme linje. 567 00:41:04,370 --> 00:41:11,240 Så denne kommando her har den virkning at definere både a og b til null værdier. 568 00:41:11,240 --> 00:41:13,470 Sandsynligvis ikke, hvad du ønsker. 569 00:41:13,470 --> 00:41:17,940 Denne ene her, nævnt tidligere, vil føre til en fejl 570 00:41:17,940 --> 00:41:21,270 fordi = b er ikke et gyldigt udtryk. 571 00:41:21,270 --> 00:41:23,680 En variabel navn kan ikke begynde med lighedstegnet. 572 00:41:26,760 --> 00:41:29,080 Og der er disse yderligere ting her. 573 00:41:29,080 --> 00:41:36,820 Koloner blev brugt til at vælge argumenter fra historik-linjer, 574 00:41:36,820 --> 00:41:41,210 og de kan anvendes - og jeg ikke gå ind i før - for at ændre disse ting. 575 00:41:41,210 --> 00:41:44,480 De kan også anvendes til at modificere shell-variabler. 576 00:41:44,480 --> 00:41:49,050 Denne ene her, $ a, har en værdi. 577 00:41:49,050 --> 00:41:55,040 : R vil tage ud en udvidelse. 578 00:41:55,040 --> 00:41:57,200 En udvidelse vil være noget efter en prik, 579 00:41:57,200 --> 00:41:59,200 en prik og alt efter det i slutningen af ​​en fil, 580 00:41:59,200 --> 00:42:03,230 kun ved afslutningen af ​​listen efter den sidste skråstreg. 581 00:42:03,230 --> 00:42:05,480 Så jeg har det her. 582 00:42:05,480 --> 00:42:10,730 a er det. Det vil droppe. O.. 583 00:42:10,730 --> 00:42:16,510 Hvis der ikke er nogen forlængelse, kun stinavne efter sidste skråstreg, vil det ikke have nogen effekt. 584 00:42:16,510 --> 00:42:27,480 a: h, at variable udtryk, vil tage ud det sidste element i en oversigt, 585 00:42:27,480 --> 00:42:29,660 igen, kun efter den sidste skråstreg. 586 00:42:29,660 --> 00:42:33,160 Så / a / b / c bliver / a / b, 587 00:42:33,160 --> 00:42:38,870 men denne ene er ændret, fordi elementet efter listen er nul. 588 00:42:38,870 --> 00:42:43,070 Her er der noget, som jeg også vil fremhæve. 589 00:42:43,070 --> 00:42:46,770 Disse kvalifikationskampe ikke søge efter eksistensen af ​​disse filer. 590 00:42:46,770 --> 00:42:48,910 De ser bare for strygere. 591 00:42:48,910 --> 00:42:54,520 De har til formål at manipulere filnavne stinavne, 592 00:42:54,520 --> 00:42:57,520 men de kan bruges på enhver streng, selvom det ikke er et filnavn. 593 00:42:57,520 --> 00:42:58,920 Og de ser ikke for eksistensen, 594 00:42:58,920 --> 00:43:03,550 så hvis der er ingen sådan fil, / a / b / c, det vil stadig fungere. 595 00:43:03,550 --> 00:43:06,930 Uanset om det er til nogen nytte er et andet spørgsmål, men det vil stadig arbejde. 596 00:43:06,930 --> 00:43:12,850 Variabler er forskellige i de Bourne skaller. Vi vil komme til senere. 597 00:43:12,850 --> 00:43:18,240 Dollartegn kan undsluppet ligesom udråbstegn og stjerne. 598 00:43:18,240 --> 00:43:21,760 Dollartegn kan slap med en omvendt skråstreg eller enkelte anførselstegn. 599 00:43:21,760 --> 00:43:24,790 Anførselstegn har den ulige virkning i alle skaller 600 00:43:24,790 --> 00:43:28,690 at tvinge evalueringen af ​​et dollartegn variable udtryk. 601 00:43:28,690 --> 00:43:31,960 Så hvis det bliver flygtede den ene vej, kan de dobbelte anførselstegn have den virkning 602 00:43:31,960 --> 00:43:34,380 for at forårsage det til at blive evalueret alligevel. 603 00:43:34,380 --> 00:43:37,090 Det er lidt forvirrende. 604 00:43:37,090 --> 00:43:43,740 Hvis der er flere niveauer for at undslippe, såsom enkelte anførselstegn inde anførselstegn 605 00:43:43,740 --> 00:43:46,770 eller dobbelte anførselstegn inde apostroffer, skal du prøve at se, hvad der vil ske 606 00:43:46,770 --> 00:43:49,520 til en variabel, hvis du bruger en. 607 00:43:49,520 --> 00:43:53,410 Disse 2 situationer - dobbelt inde i single, enkelt inde i dobbelt - 608 00:43:53,410 --> 00:43:55,980 ikke nødvendigvis give dig det samme resultat. 609 00:44:02,520 --> 00:44:05,600 Miljø variabler, der er bundet C-shell variable. 610 00:44:05,600 --> 00:44:08,340 Miljø variabler er også variable i C-shell, 611 00:44:08,340 --> 00:44:11,250 og de er også variable i andre skaller også. 612 00:44:11,250 --> 00:44:15,230 I C-shell, er de forskellige sæt. 613 00:44:15,230 --> 00:44:18,130 De ting, jeg sagde før er omkring shell-variabler. 614 00:44:18,130 --> 00:44:21,300 Variabler miljø er et bestemt sæt af variabler 615 00:44:21,300 --> 00:44:28,650 med undtagelse af en række variabler, som vi kalder bundne variabler, 616 00:44:28,650 --> 00:44:30,640 som er meget vigtige, og vi vil komme ind i dem senere. 617 00:44:30,640 --> 00:44:34,950 Miljø variabler automatisk videre 618 00:44:34,950 --> 00:44:41,800 til skaller eller kommandoer, der kører fra din shell. 619 00:44:41,800 --> 00:44:46,220 De andre ting er ikke. Skallen variabler, kaldenavn er ikke. Miljø variabler er. 620 00:44:46,220 --> 00:44:48,630 Det er derfor vi kalder dem miljøvariabler, 621 00:44:48,630 --> 00:44:55,030 Ideen er, at miljøet strækker sig forbi netop din nuværende shell. 622 00:44:55,030 --> 00:45:00,510 De kan bruges til at definere ting for kommandoer. 623 00:45:00,510 --> 00:45:05,470 Her er et eksempel. PRINTER, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Begge disse variabler kan definere en printer, en kommando vil bruge til at udskrive ting. 625 00:45:12,270 --> 00:45:16,500 Hvis du har flere printere rundt, kan du ønsker at sætte en du kan lide. 626 00:45:16,500 --> 00:45:21,320 Grunden til at vi har 2 variabler er, at forskellige sæt af kommandoer blev skrevet 627 00:45:21,320 --> 00:45:23,870 ved hjælp af disse forskellige variabler. 628 00:45:23,870 --> 00:45:25,910 Du kan give dem forskellige værdier. 629 00:45:25,910 --> 00:45:28,860 Mest sandsynligt, du vil give dem begge samme værdi. 630 00:45:28,860 --> 00:45:35,840 Disse ting arbejde, fordi de kommandoer, der gør udskrivning 631 00:45:35,840 --> 00:45:40,740 var programmeret til at undersøge de værdier af disse variabler. 632 00:45:42,200 --> 00:45:46,150 Hvis et program ikke blev skrevet på den måde, hvis det blev skrevet for at gøre noget andet, 633 00:45:46,150 --> 00:45:48,280 variabel ville være irrelevant. 634 00:45:48,280 --> 00:45:52,530 Så styresystemet er ikke på udkig efter disse variabler 635 00:45:52,530 --> 00:45:55,210 hver gang du henviser til en printer. 636 00:45:55,210 --> 00:45:59,090 En kommando, der gør udskrivning er på udkig efter disse variabler, hvis det er programmeret på den måde. 637 00:46:11,030 --> 00:46:15,240 Disse variabler er ofte defineret i dine initialiseringsfiler 638 00:46:15,240 --> 00:46:19,440 men ikke nødvendigvis. 639 00:46:19,440 --> 00:46:21,050 Du kan definere dem på kommandolinjen. 640 00:46:21,050 --> 00:46:24,090 De kan defineres i en kommando. 641 00:46:24,090 --> 00:46:28,740 En kommando, der kører noget kunne have sin egen udvælgelse af variabler - 642 00:46:28,740 --> 00:46:32,390 variabler, der er unikke for en bestemt softwarepakke, for eksempel. 643 00:46:32,390 --> 00:46:36,740 De vil blive defineret, når du kører denne pakke. 644 00:46:39,690 --> 00:46:42,680 Hvordan er disse variabler videre til en sub-shell? 645 00:46:42,680 --> 00:46:48,210 Når en sub-shell er skrevet, betyder det ikke at skrive ind i dette område. 646 00:46:48,210 --> 00:46:53,260 Det område af sub-shell, der er afsat til miljøvariabler 647 00:46:53,260 --> 00:46:56,450 er ikke skrevet af sub-shell, det er skrevet af kopiering. 648 00:46:56,450 --> 00:47:00,530 Når du kører en almindelig kommando, som disse kommandoer til at udskrive eller hvad, 649 00:47:00,530 --> 00:47:03,840 de starter med at oprette en ny shell. 650 00:47:03,840 --> 00:47:06,190 Skallen skaber en shell og derefter overskriver en del af det 651 00:47:06,190 --> 00:47:08,800 med den kommando, du kører, hvilket er en smule forvirrende, 652 00:47:08,800 --> 00:47:10,740 men det er, hvordan disse kommandoer får miljøvariabler 653 00:47:10,740 --> 00:47:14,890 at de derefter henvise til senere. 654 00:47:21,920 --> 00:47:28,010 Kommandoen her for at definere variable setenv. 655 00:47:28,010 --> 00:47:36,470 Det er, hvordan du definerer det. Det er 3 elementer: setenv, variabel, værdi. 656 00:47:36,470 --> 00:47:44,710 Hvis du bare setenv uden argumenter, hvad får du? 657 00:47:47,220 --> 00:47:48,810 En liste over alle disse variabler. 658 00:47:48,810 --> 00:47:53,190 Igen, det er en dejlig lang liste, og i dette tilfælde, som i de andre, 659 00:47:53,190 --> 00:47:57,320 disse variabler er defineret i høj grad af mit login drift af selve råtanken 660 00:47:57,320 --> 00:47:59,740 snarere end af noget jeg gjorde. 661 00:47:59,740 --> 00:48:03,580 Der er en anden kommando her, printenv. 662 00:48:07,520 --> 00:48:10,340 At også udskriver miljøet. 663 00:48:10,340 --> 00:48:15,240 Bemærk denne sidste ting her, redaktør = VI. 664 00:48:15,240 --> 00:48:21,120 Det siger, at hvis jeg bruger noget, der kalder en editor 665 00:48:21,120 --> 00:48:25,530 og jeg ikke angiver en editor, og det giver mig valget, kan det give mig VI. 666 00:48:25,530 --> 00:48:37,280 Hvad hvis jeg gør printenv Editor? Det fortæller mig, hvad det er. 667 00:48:37,280 --> 00:48:41,340 Lige før, at der var en variabel, mindre. 668 00:48:41,340 --> 00:48:46,040 Disse er dine defaults muligheder, når jeg kører MINDRE kommando, 669 00:48:46,040 --> 00:48:49,360 som viser filer. 670 00:48:49,360 --> 00:48:55,910 Så hvis jeg gør det, kan printenv tage 1 argument eller 0 argumenter, 671 00:48:55,910 --> 00:48:58,070 ikke mere end 1. 672 00:49:01,800 --> 00:49:05,690 Der er andre kommandoer også, men vi kommer ikke til at komme ind i alt, i dag. 673 00:49:05,690 --> 00:49:11,010 Husk der var modifikatorer for shell-variabler som: h, 674 00:49:11,010 --> 00:49:14,350 som vil slippe det sidste element i en sti, 675 00:49:14,350 --> 00:49:17,950 eller: r, vil der falde en forlængelse. 676 00:49:17,950 --> 00:49:23,110 Dem, der nu gælder for de miljøvariabler også. De havde ikke vant til. 677 00:49:23,110 --> 00:49:24,960 Det plejede at være, de ikke kunne ændres. Nu kan de være. 678 00:49:24,960 --> 00:49:29,190 Det er en af ​​de fremskridt med udviklingen i skallerne i årenes løb. 679 00:49:29,190 --> 00:49:35,620 Jeg sagde, at skallerne som en del af de miljøer 680 00:49:35,620 --> 00:49:43,040 og shell variable i C-shell er, med visse undtagelser, forskellige sæt. 681 00:49:43,040 --> 00:49:46,790 Du kan oprette en miljøvariabel og en shell variabel med samme navn. 682 00:49:46,790 --> 00:49:49,220 De vil være forskellige variabler, de kan have forskellige værdier. 683 00:49:49,220 --> 00:49:53,090 Ændring af værdien af ​​en ikke vil ændre værdien af ​​den anden. 684 00:49:53,090 --> 00:49:58,070 Disse variabler er alle evalueres med dollartegn - $ a, $ whatever. 685 00:49:58,070 --> 00:50:02,340 Så hvad nu hvis du har det? Har du vide, hvilken en, du får? 686 00:50:02,340 --> 00:50:04,520 I min test fik jeg skallen variable, 687 00:50:04,520 --> 00:50:07,240 men dette er ikke dokumenteret, og du kan ikke stole på det. 688 00:50:07,240 --> 00:50:10,270 Så jeg spørger dig, er at skabe shell og miljøvariabler 689 00:50:10,270 --> 00:50:13,490 med de samme navne en god idé? Nej Okay. 690 00:50:13,490 --> 00:50:17,460 Hvad er de store undtagelser, hvor miljøet og shell-variabler 691 00:50:17,460 --> 00:50:19,860 er knyttet til hinanden? 692 00:50:19,860 --> 00:50:27,470 Der er disse 4. 693 00:50:32,030 --> 00:50:35,510 Capital brev TERM miljøvariabel, 694 00:50:35,510 --> 00:50:41,540 shell variable udtryk i små bogstaver, type terminal emulering. 695 00:50:41,540 --> 00:50:47,430 Jeg vil bare gå over her, og jeg har tænkt mig at gøre ekko, en nyttig kommando her, 696 00:50:47,430 --> 00:50:52,560 $ TERM $ sigt. Og der. 697 00:50:52,560 --> 00:51:00,570 xterm er en terminal type til vinduer vises i X Window System. 698 00:51:00,570 --> 00:51:04,330 xterm-farve er en variation af den, der tillader forskellige farver. 699 00:51:04,330 --> 00:51:06,580 Hvorfor definerer vi disse? Hvad er det godt for? 700 00:51:06,580 --> 00:51:09,740 Kommandoer, omarrangere skærmen som redaktør 701 00:51:09,740 --> 00:51:13,680 sende bestemte sekvenser, kaldet escape-sekvenser, 702 00:51:13,680 --> 00:51:18,160 til en terminal eller et vindue for at omarrangere det og så videre. 703 00:51:18,160 --> 00:51:20,990 Disse sekvenser er forskellige for forskellige typer af terminaler. 704 00:51:20,990 --> 00:51:23,100 Det fortæller den, hvilke af dem til at bruge. 705 00:51:23,100 --> 00:51:25,900 Nogle gange er der spørgsmål der. 706 00:51:25,900 --> 00:51:28,600 Du vil måske ændre det. 707 00:51:28,600 --> 00:51:30,780 Hvis tingene ikke fungerer, undertiden terminal typen er sat forkert, 708 00:51:30,780 --> 00:51:36,440 du kan være i stand til at ordne det ved at omdefinere begrebet variabel. 709 00:51:36,440 --> 00:51:43,420 I disse tilfælde ændre en variabel, miljøvariablen eller skallen variabel, 710 00:51:43,420 --> 00:51:45,970 bør ændre den anden. 711 00:51:45,970 --> 00:51:50,970 Jeg har opdaget gennem erfaring, at ændre TERM med blokbogstaver 712 00:51:50,970 --> 00:51:54,060 ikke altid ændre shell variable udtryk i små bogstaver. 713 00:51:54,060 --> 00:51:55,550 Dette er en fejl. 714 00:51:55,550 --> 00:51:59,400 Jeg ved ikke, om det er altid sandt. Det meste af tiden er det ikke sandt, men det kan være. 715 00:51:59,400 --> 00:52:02,490 Så hvis du laver en ændring, bare tjek det ud. 716 00:52:02,490 --> 00:52:05,830 Det er ikke ofte, at du har brug for at ændre denne værdi, men en gang imellem, du gør. 717 00:52:05,830 --> 00:52:08,260 Miljøvariablen BRUGER. 718 00:52:08,260 --> 00:52:12,070 Igen miljøvariablen med blokbogstaver, shell variabel i små bogstaver. 719 00:52:12,070 --> 00:52:13,710 Dette er dit brugernavn. 720 00:52:13,710 --> 00:52:16,730 Det er kun under ganske særlige omstændigheder 721 00:52:16,730 --> 00:52:18,420 at du ønsker at ændre det. 722 00:52:18,420 --> 00:52:22,350 Hvis dit brugernavn er en anden, kan det kaste alle mulige ting fra. 723 00:52:22,350 --> 00:52:26,040 Hjemmebibliotek, brugerens hjemmemappe. 724 00:52:26,040 --> 00:52:28,060 Igen, ville du ikke ønsker at ændre det. 725 00:52:28,060 --> 00:52:32,260 Bemærk i alle disse sager og den, som vi er ved at dække, stien variabel 726 00:52:32,260 --> 00:52:37,070 miljø-variabel er med store bogstaver, og det bundne shell variabel er med små bogstaver. 727 00:52:37,070 --> 00:52:39,240 Hvis du ændrer en, bør du ændre den anden. 728 00:52:39,240 --> 00:52:45,960 Denne form for binding kan ikke etableres, som du ikke kan binde 2 variabler, 729 00:52:45,960 --> 00:52:50,570 andre end disse 4, og bindingen i disse variabler kan ikke fortrydes, 730 00:52:50,570 --> 00:52:52,090 du kan ikke adskille dem. 731 00:52:52,090 --> 00:52:55,820 Så disse 4 par variabler er bundet af. 732 00:52:55,820 --> 00:52:59,020 De vil altid være. Ingen andre vil være. 733 00:52:59,020 --> 00:53:05,720 Desuden ville det være muligt at skabe variabler med samme navn 734 00:53:05,720 --> 00:53:07,780 af de modstående typer. 735 00:53:07,780 --> 00:53:11,600 Du kan gøre en shell variabel udtryk i små bogstaver 736 00:53:11,600 --> 00:53:14,990 eller en miljøvariabel TERM blokbogstaver. 737 00:53:14,990 --> 00:53:19,040 Disse variabler vil være uafhængig af disse parrede variabler 738 00:53:19,040 --> 00:53:20,780 og de ville være uafhængige af hinanden. 739 00:53:20,780 --> 00:53:23,780 Jeg kan ikke forestille mig, hvorfor du ville gøre det, medmindre du ønsker at forvirre folk. 740 00:53:24,600 --> 00:53:29,730 Denne ene her, sti variabel, dette er en virkelig vigtig. 741 00:53:29,730 --> 00:53:35,550 En anden ting er, at der kan være tilfælde, 742 00:53:35,550 --> 00:53:40,430 variabler med lignende Forbundne navne, der ikke er bundet til hinanden. 743 00:53:40,430 --> 00:53:45,000 Der kan være variabler, Shell og Shell, i store og små bogstaver. 744 00:53:45,000 --> 00:53:48,300 Baseret på det navn, du ikke ved, om denne variabel er en shell variabel 745 00:53:48,300 --> 00:53:51,580 eller en miljøvariabel, og de er ikke bundet til hinanden. 746 00:53:51,580 --> 00:53:55,300 Så den slags parrede navne er ikke ensbetydende med bundne variabler. 747 00:53:55,300 --> 00:53:58,830 Stien variable, som jeg viste før, 748 00:53:58,830 --> 00:54:01,880 er en liste over stinavne hvor skallen ser for kommandoer. 749 00:54:01,880 --> 00:54:12,320 Lad os komme over til dette vindue her og vi vil gøre echo $ PATH, versaler - 750 00:54:12,320 --> 00:54:20,230 miljøvariabel - echo $ sti, små bogstaver - shell variabel. 751 00:54:20,230 --> 00:54:24,980 Bemærk, at listen over mapper er den samme. Disse er bundet. 752 00:54:24,980 --> 00:54:26,590 Ændre én, ændrer du den anden. 753 00:54:26,590 --> 00:54:32,970 I miljøvariablen elementerne er adskilt af kolon. Bemærk, at. 754 00:54:32,970 --> 00:54:35,130 Skallen variable er adskilt af mellemrum. 755 00:54:35,130 --> 00:54:38,760 Dette miljø variabel er en enkelt streng. 756 00:54:38,760 --> 00:54:41,480 Skallen variabel er et array. 757 00:54:41,480 --> 00:54:43,490 Bourne shell havde ikke arrays. 758 00:54:43,490 --> 00:54:46,600 Bash gør, men det er allerede en fast del af skallen. 759 00:54:46,600 --> 00:54:48,660 Dette er en enkelt streng og ikke et array. 760 00:54:48,660 --> 00:54:50,420 C-shell altid haft arrays. 761 00:54:50,420 --> 00:54:52,630 Opstillingerne er meget nemmere at arbejde med. 762 00:54:52,630 --> 00:54:54,400 Du kan henvise til dele af det. 763 00:54:54,400 --> 00:55:02,350 Så echo $ sti [1], og jeg får / usr / bin, det første element. 764 00:55:02,350 --> 00:55:09,950 Igen, husk dollartegn står for det sidste element i oversigtslisten. 765 00:55:09,950 --> 00:55:16,850 Hvad sker der? Det forsøgte at finde dollar tegn som en variabel symbol. 766 00:55:16,850 --> 00:55:20,850 Jeg undslippe den. Ups. Det ville ikke tage at enten. 767 00:55:20,850 --> 00:55:23,690 Nogle af disse ting ikke fungerer så godt. 768 00:55:23,690 --> 00:55:28,140 Måske vil vi bare lade det ud. 769 00:55:28,140 --> 00:55:36,980 Asterisk refererer til det hele, men det er, hvad du får, hvis du ikke angiver et element. 770 00:55:36,980 --> 00:55:46,170 En anden måde at array-variable kan manipuleres, 771 00:55:46,170 --> 00:55:49,500 række elementer der, 7 elementer. 772 00:55:49,500 --> 00:55:53,410 Her sætter vi havelåge før variabelnavnet. 773 00:55:53,410 --> 00:55:58,280 Her er en anden. Sæt et spørgsmålstegn der. 774 00:55:58,280 --> 00:56:03,170 Det er en logisk værdi. Dette indikerer, at variablen eksisterer. 775 00:56:03,170 --> 00:56:05,160 Det er en anden måde at arbejde med variabler. 776 00:56:05,160 --> 00:56:06,660 Det, ved den måde, behøver ikke at være en array variabel. 777 00:56:06,660 --> 00:56:08,210 Det kunne være en hvilken som helst variabel. 778 00:56:08,210 --> 00:56:11,840 Og hvis jeg gør det, er der ikke sådan variabel, og jeg får en 0. 779 00:56:11,840 --> 00:56:14,990 En anden lille ting der om variable evalueringer. 780 00:56:23,670 --> 00:56:32,950 Tilbage til denne ene her, hvis en eller anden grund du ville arbejde med dette 781 00:56:32,950 --> 00:56:37,990 stedet for at arbejde med den vifte skallen variabel 782 00:56:37,990 --> 00:56:41,470 der er kommandoer, der kan adskille disse ting baseret på tyktarmen. 783 00:56:41,470 --> 00:56:44,080 I virkeligheden, hvis du vil gøre dette i Bash shell eventuelt 784 00:56:44,080 --> 00:56:47,110 en form for et script, ville det være nok, hvordan du ville gøre det. 785 00:56:47,110 --> 00:56:50,350 Men i C-shell, det er meget lettere at bruge array. 786 00:56:50,350 --> 00:56:58,250 I Bourne shell, er variable tildelt af et enkelt udtryk som dette, 787 00:56:58,250 --> 00:57:01,760 lide den måde, du kan tildele en variabel i et programmeringssprog, 788 00:57:01,760 --> 00:57:05,110 og her må der ikke være nogen mellemrum. 789 00:57:05,110 --> 00:57:09,110 Det er nødvendigt, at det er kun 1 streng. 790 00:57:09,110 --> 00:57:14,980 I Bourne-type skaller, alle variabler shell variable. 791 00:57:14,980 --> 00:57:19,250 Miljø variabler er en delmængde af de shell-variabler. 792 00:57:19,250 --> 00:57:24,060 De adskiller sig fra de ikke-miljøvariabler ved at eksportere. 793 00:57:24,060 --> 00:57:28,860 Kommandoen til at gøre det er eksporten, ligesom eksport printer. 794 00:57:28,860 --> 00:57:34,930 Hvis vi skulle definere en sådan variabel, 795 00:57:34,930 --> 00:57:38,480 hvis vi ønskede et trykkeri kommando til at finde det, ville det være en miljøvariabel, 796 00:57:38,480 --> 00:57:40,730 og det er, hvordan vi gør det ene. 797 00:57:40,730 --> 00:57:42,090 Her er der noget slags forvirrende. 798 00:57:42,090 --> 00:57:50,430 Dette udtryk, eksport til miljøet, stammer fra denne Bourne shell koncept, 799 00:57:50,430 --> 00:57:54,520 og alligevel dette udtryk anvendes i beskrivelser af den C-shell, 800 00:57:54,520 --> 00:57:57,920 hvor der ikke er en sådan kommando som eksport. 801 00:57:57,920 --> 00:58:06,200 Hvis du bare sige eksport af sig selv, får du en liste af eksporteret - 802 00:58:06,200 --> 00:58:10,620 Så hvis jeg bare eksporterer her, ikke sådan noget. 803 00:58:13,620 --> 00:58:15,200 Okay, der vi går. 804 00:58:15,200 --> 00:58:17,010 Disse ting, ved den måde, er også defineret af skallen. 805 00:58:17,010 --> 00:58:19,400 Jeg har ikke definere nogen af ​​disse af mig selv. 806 00:58:19,400 --> 00:58:23,550 Skallen gør alle mulige ting af sig selv. 807 00:58:23,550 --> 00:58:26,650 Den bør gøre tingene automatisk. 808 00:58:30,240 --> 00:58:36,880 I Bash eller Korn shell, kan du køre en kommando som denne, 809 00:58:36,880 --> 00:58:42,000 som både vil give en variabel en værdi, og eksportere det i 1 kommando. 810 00:58:42,000 --> 00:58:46,150 I Bourne skal de være adskilte kommandoer som eksport en. 811 00:58:46,150 --> 00:58:48,410 Her er et andet aspekt, der er forvirrende. 812 00:58:48,410 --> 00:58:52,220 Sættet kommando i C-shell definerer variabler 813 00:58:52,220 --> 00:58:55,550 og uden argumenter fortæller dig, hvad variablerne værdier er. 814 00:58:55,550 --> 00:59:01,140 I Bash shell, sæt kommando uden argumenter gør de samme ting, 815 00:59:01,140 --> 00:59:03,580 men med argumenter, det gør noget helt andet. 816 00:59:03,580 --> 00:59:06,200 Så det er de forskellige argumenter her. 817 00:59:06,200 --> 00:59:10,460 Nogle af disse er miljøvariabler, nogle af dem er shell-variabler. 818 00:59:10,460 --> 00:59:13,200 Alle af dem er shell-variabler rigtig. Nogle af dem er miljøvariabler. 819 00:59:15,690 --> 00:59:23,920 Sættet kommandoen med argumenter kan bruges til at betjene 820 00:59:23,920 --> 00:59:28,220 på de positionelle parametre til et script, 821 00:59:28,220 --> 00:59:33,910 der er en måde at få dem alle på én gang. 822 00:59:33,910 --> 00:59:36,150 Vi kan ikke rigtig gå ind i det i dag. 823 00:59:36,150 --> 00:59:39,580 Det kan også bruges til at ændre shell adfærd. 824 00:59:39,580 --> 00:59:46,700 Især i Bash der er variable, der vil bestemme, hvordan skallen opfører sig. 825 00:59:46,700 --> 00:59:51,310 Så er også bare denne ene kommando, som du kan se, denne kommando. 826 00:59:51,310 --> 00:59:59,050 Typeset efterfulgt af variable og variable typer anvendes i Korn og Bash skaller. 827 00:59:59,050 --> 01:00:04,970 Det er ikke obligatorisk, men det kan bruges til at begrænse de værdier af variabler, 828 01:00:04,970 --> 01:00:08,400 som kan være nyttige for at undgå fejl, og det er ret almindeligt. 829 01:00:08,400 --> 01:00:11,640 Så jeg bare nævne, at hvis du ser det et eller andet sted. 830 01:00:17,290 --> 01:00:19,160 Den hvor kommando. 831 01:00:19,160 --> 01:00:22,490 Husk jeg nævnte tidligere, hvor kommandoen i C-shell, 832 01:00:22,490 --> 01:00:28,750 som kan fortælle dig placeringen af ​​en kommando stinavn. 833 01:00:28,750 --> 01:00:32,580 Her er kommando substitution. 834 01:00:32,580 --> 01:00:41,900 Du skal finde på dit tastatur eller andet sted et tegn, der ligner dette. 835 01:00:41,900 --> 01:00:44,910 Placeringen på tastaturet kommer til at variere. 836 01:00:44,910 --> 01:00:47,050 Vi har kaldt det backquote. Det er på størrelse med et citat. 837 01:00:47,050 --> 01:00:48,720 Det går fra øverste venstre hjørne til nederste højre. 838 01:00:48,720 --> 01:00:52,690 Her på min Mac-tastatur er det i øverste venstre hjørne. 839 01:00:52,690 --> 01:00:58,150 Denne karakter kan bruges til at udføre en kommando inden for en kommando. 840 01:00:58,150 --> 01:01:03,400 Hvis du har et udtryk inde backquotes, 841 01:01:03,400 --> 01:01:07,080 dette udtryk er en kommando, det køres. 842 01:01:07,080 --> 01:01:09,010 Udgangen af ​​denne kommando 843 01:01:09,010 --> 01:01:11,980 derefter i stedet for hele backquote ekspression 844 01:01:11,980 --> 01:01:16,110 inde i en længere kommando, som derefter kører med, at produktionen 845 01:01:16,110 --> 01:01:22,010 som led i sin perlerække af argumenter og så videre. 846 01:01:22,010 --> 01:01:28,640 Her er en kommando, der bruger det. 847 01:01:28,640 --> 01:01:32,340 Lad os demonstrere driften her. 848 01:01:44,980 --> 01:01:49,090 Lad os gå op her, tage ud backquotes. 849 01:01:49,090 --> 01:01:54,410 Kontrol A får mig til begyndelsen af ​​linjen med Emacs redigering syntaks. 850 01:01:54,410 --> 01:02:00,380 Hidtil stinavne er, hvad hvor gør, 851 01:02:00,380 --> 01:02:05,040 men når jeg gør det på denne måde, er det så stik på denne liste over stinavne 852 01:02:05,040 --> 01:02:08,750 i stedet for hele denne backquote udtryk og kører ls-l på dem. 853 01:02:08,750 --> 01:02:11,120 Kind of bekvem, hva '? 854 01:02:11,120 --> 01:02:14,860 Så det er en pæn ting. Det er, hvordan backquotes virker. 855 01:02:14,860 --> 01:02:17,560 Lad os nu gå lidt længere nede. 856 01:02:17,560 --> 01:02:22,050 Disse alias. Jeg faktisk bruger disse. 857 01:02:22,050 --> 01:02:26,410 Jeg vil prøve at få denne i med 1 redigering. 858 01:02:34,900 --> 01:02:36,900 Okay. 859 01:02:36,900 --> 01:02:39,630 Lad os nu se, hvordan disse definitioner kom ud. 860 01:02:39,630 --> 01:02:44,930 alias LHB fortælle mig, hvordan det er defineret. 861 01:02:44,930 --> 01:02:51,210 Bemærk, det er netop dette, men de ydre citater er taget ud 862 01:02:51,210 --> 01:02:53,750 og udråbstegnet er taget fra. 863 01:02:53,750 --> 01:02:58,940 ! *, Komplet liste over alle de argumenter. 864 01:02:58,940 --> 01:03:03,580 I en Aliasdefinitionen den vil anvende tilbage til, hvor jeg bruger dette. 865 01:03:03,580 --> 01:03:10,620 LBH ksh bash. Okay. 866 01:03:10,620 --> 01:03:13,960 Se hvordan det virker? Det sparer mig nogle at skrive. 867 01:03:13,960 --> 01:03:16,440 Lad os gå lidt op bare for at nævne noget andet her. 868 01:03:19,150 --> 01:03:23,120 Bemærk her disse forskellige skaller. Jeg skulle have nævnt dette før. 869 01:03:23,120 --> 01:03:36,060 CSH har en 2 herovre, og det gør / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Vi kunne etablere en anden måde, de er faktisk den samme fil. 871 01:03:39,870 --> 01:03:43,150 Husk jeg sagde, hvis du skriver sh får du bash. 872 01:03:43,150 --> 01:03:47,390 Skriver dette, og du får dette. 873 01:03:47,390 --> 01:03:51,730 Men de er ikke forbundet. De har enkeltværelser, der. 874 01:03:51,730 --> 01:03:54,910 Og det er ikke den slags fil, der kan kalde en anden. 875 01:03:54,910 --> 01:03:59,460 Så dem er separate filer, C-shell dem er den samme fil. 876 01:03:59,460 --> 01:04:03,640 Tilbage hernede, den anden her, dette alias, 877 01:04:03,640 --> 01:04:09,090 bemærke, at kører denne kommando fil. 878 01:04:09,090 --> 01:04:13,810 At alias kører det. File fortæller dig typen af ​​en fil. 879 01:04:13,810 --> 01:04:20,330 Så FWH ksh bash. Okay. 880 01:04:20,330 --> 01:04:23,230 Det er outputtet af kommandoen file. 881 01:04:23,230 --> 01:04:24,630 Jeg ved ikke, om du ved, hvad det betyder her, 882 01:04:24,630 --> 01:04:26,750 Mach-O Universal Binary med 2 arkitekturer. 883 01:04:26,750 --> 01:04:30,470 Der er 2 mulige processor typer i Mac, 884 01:04:30,470 --> 01:04:34,780 og nogle programmer blev skrevet til at være i stand til at køre med begge, 885 01:04:34,780 --> 01:04:37,950 og filen kommando kan bestemme det, så det er, hvad det betyder. 886 01:04:37,950 --> 01:04:40,660 Begge disse filer blev skrevet på den måde. 887 01:04:40,660 --> 01:04:43,760 Så vi se, hvordan alias virker, vi ser, hvordan backquote virker, 888 01:04:43,760 --> 01:04:48,640 vi se, hvordan den faktiske fil ls eller fil virker. 889 01:04:52,050 --> 01:04:57,000 Dette virker måske ikke. Prøv "hvor hvor" og "LBH hvor". Okay, lad os prøve det. 890 01:04:57,000 --> 01:05:01,040 hvor hvor. 891 01:05:01,040 --> 01:05:03,500 hvor er en shell indbygget. 892 01:05:03,500 --> 01:05:06,970 Husk tidligere vi viste, at Bash afse hvor. 893 01:05:06,970 --> 01:05:10,080 Hvis du skriver hvor i Bash shell, får du en fejlmeddelelse. 894 01:05:10,080 --> 01:05:12,540 Det er bare en del af skallen snarere end at være en separat kommando. 895 01:05:12,540 --> 01:05:20,000 Hvad sker der, hvis jeg skriver LBH leder efter hvor? Se hvad der sker der. 896 01:05:20,000 --> 01:05:22,850 Ran hvor hvor, fik denne udgang, og derefter forsøgte at køre ls 897 01:05:22,850 --> 01:05:25,600 som l på hvor er en shell indbygget. 898 01:05:25,600 --> 01:05:28,790 hvor er der, men de andre ikke eksisterer. 899 01:05:28,790 --> 01:05:32,090 Ingen af ​​disse eksisterer, faktisk. 900 01:05:32,090 --> 01:05:35,560 Så det virker ikke altid, og det er også illustrerer, hvordan nogle ting 901 01:05:35,560 --> 01:05:39,580 gør ikke helt, hvad du måske har tænkt. 902 01:05:40,930 --> 01:05:43,010 Lad os gå lidt længere ned her. 903 01:05:44,890 --> 01:05:54,760 Denne her er i Bash. Det er også kommando substitution ligesom backquote. 904 01:05:54,760 --> 01:06:05,280 Men i modsætning til backquote, bruger denne variabel stil. 905 01:06:05,280 --> 01:06:09,860 Der er en række udtryk, som begynder med et dollartegn, 906 01:06:09,860 --> 01:06:16,070 og mens disse ikke er variabler, de lånte brugen af ​​dollar tegn 907 01:06:16,070 --> 01:06:19,570 at angive et udtryk for en slags. 908 01:06:19,570 --> 01:06:23,550 Det kan være omgivet af parenteser eller beslag eller dobbelt parenteser, 909 01:06:23,550 --> 01:06:26,320 som har et andet formål. 910 01:06:26,320 --> 01:06:29,500 Enlige parenteser her er en kommando substitution ligesom backquotes. 911 01:06:29,500 --> 01:06:32,720 Dobbelt parenteser er faktisk en aritmetisk operation. 912 01:06:32,720 --> 01:06:35,380 Der er andre grammatikker, andre operationer. 913 01:06:35,380 --> 01:06:41,520 Backquote syntaks er tilgængelig i Bash. 914 01:06:41,520 --> 01:06:46,780 Men denne ene er at foretrække. Det er meget lettere at læse, og det giver mulighed for indlejring. 915 01:06:46,780 --> 01:06:51,300 Du kan have inde $ (kommando) en anden kommando, 916 01:06:51,300 --> 01:06:54,590 noget lignende - 917 01:07:14,560 --> 01:07:18,210 Jeg får en liste der. 918 01:07:18,210 --> 01:07:21,670 Det ville fungere, hvis jeg havde backquote også. 919 01:07:32,050 --> 01:07:38,470 Hvad hvis jeg ønsker at gøre noget lignende - 920 01:08:03,390 --> 01:08:06,430 Du sandsynligvis ikke ville faktisk bruge denne kommando, 921 01:08:06,430 --> 01:08:14,160 men denne interne kommando substitution ekkoer navnene på alle filer, der begynder med en, 922 01:08:14,160 --> 01:08:18,229 så er dette en kører ls-l på disse filer, 923 01:08:18,229 --> 01:08:20,500 og så denne ene bare ekkoer output. 924 01:08:21,729 --> 01:08:24,479 Du ville sikkert ikke gøre dette, du ville bare gøre det ekko eller ls, 925 01:08:24,479 --> 01:08:29,450 men det illustrerer, hvordan indlejring af kommandoerne fungerer. 926 01:08:29,450 --> 01:08:34,380 Så bare en anden funktion her. 927 01:08:34,380 --> 01:08:37,450  Jeg nævnte dette tidligere, at når du har, hvor i C-shell, 928 01:08:37,450 --> 01:08:42,770 skrive værker i Bourne-type granater til lokalisering kommandoer. 929 01:08:48,939 --> 01:08:52,270 Indbyggede kommandoer, lige hvad jeg sagde der. 930 01:08:52,270 --> 01:08:54,640 Kommandoer er en del af skallen, som hvor. 931 01:08:54,640 --> 01:08:59,880 Når skallen udfører en kommando som ls, det lokaliserer det gennem stien, 932 01:08:59,880 --> 01:09:03,029 finder det i en mappe eller andet sted, 933 01:09:03,029 --> 01:09:05,800 lyder, at i hukommelsen, skaber en ny shell, 934 01:09:05,800 --> 01:09:08,960 læser ls eller hvad i skallen 935 01:09:08,960 --> 01:09:11,450 hvor miljøvariabler er allerede placeret, 936 01:09:11,450 --> 01:09:14,000 og så er det overfører henrettelse til det. 937 01:09:14,000 --> 01:09:18,319 Indbygget kommando, koden for denne kommando er inde i skallen, 938 01:09:18,319 --> 01:09:21,460 så skallen bare begynder udfører en del af sin egen kode. 939 01:09:21,460 --> 01:09:24,569 hvor er en sådan kommando. Det faktisk bliver hurtigere. 940 01:09:24,569 --> 01:09:28,380 Det behøver ikke at læse noget i hukommelsen, det er allerede i hukommelsen. 941 01:09:28,380 --> 01:09:32,460 Indbyggede kommandoer altid forrang kommandoer med samme navn. 942 01:09:32,460 --> 01:09:36,050 Kommandoer, der findes i telefonbøger i stien kan have samme navn, 943 01:09:36,050 --> 01:09:39,090 kommandoer i forskellige mapper, filer i forskellige mapper. 944 01:09:39,090 --> 01:09:41,740 Den ene, der sker tidligere i stien er den, du får. 945 01:09:41,740 --> 01:09:43,770 Hvis der er en indbygget kommando, får du altid det. 946 01:09:43,770 --> 01:09:47,890 Der er ingen måde at give det en lavere prioritet end en kommando i stien. 947 01:09:47,890 --> 01:09:54,140 Hvis du ønsker at få den sti kommando, kan du skrive den fulde sti. 948 01:09:54,140 --> 01:09:55,850 Hvis der var en kommando hvor i stien eller andet sted, 949 01:09:55,850 --> 01:09:58,440 du kunne skrive / bin / hvor og du ville få det. 950 01:09:58,440 --> 01:10:01,800 Hvis du ikke ønsker at skrive hele stien, kan du definere et alias. 951 01:10:01,800 --> 01:10:06,310 I virkeligheden, hvis du gav aliaset det samme navn som den indbyggede kommando, ville det arbejde 952 01:10:06,310 --> 01:10:08,790 fordi definitionen alias evalueres 953 01:10:08,790 --> 01:10:13,220 før skallen fastslår, at det er en indbygget kommando der bør gennemføres. 954 01:10:18,810 --> 01:10:23,440 Så det bliver lidt mere kompliceret med nogle kommandoer her. 955 01:10:23,440 --> 01:10:29,880 Tilfælde af nogle kommandoer er faktisk indbygget i kommandoer og i stien. 956 01:10:29,880 --> 01:10:34,140 En af dem er ekko, kommandoen jeg bare brugt lidt siden i disse eksempler. 957 01:10:34,140 --> 01:10:37,410 Echo er en kommando i vejen, og det er i hvert shell. 958 01:10:37,410 --> 01:10:40,580 De behøver ikke nødvendigvis alle opfører sig på samme måde. 959 01:10:40,580 --> 01:10:42,970 Det var oprindeligt en kommando i stien. 960 01:10:42,970 --> 01:10:45,280 Det blev bygget i de skaller senere. 961 01:10:45,280 --> 01:10:48,080 Fordi der er muligheder, der er afhængige af miljøet 962 01:10:48,080 --> 01:10:52,970 og kommandolinjeparametre, de indbyggede kommandoer 963 01:10:52,970 --> 01:10:57,030 blev skrevet til at fungere på samme måde som den kommando, der havde været i stien, 964 01:10:57,030 --> 01:10:59,670 det er usandsynligt, at de ville have været skrevet på den måde 965 01:10:59,670 --> 01:11:01,720 hvis kommandoen ikke allerede var blevet skrevet til stien. 966 01:11:01,720 --> 01:11:06,180 Så det har bivirkninger. Dens historie har virkninger her. 967 01:11:06,180 --> 01:11:08,380 Der er muligheder der. 968 01:11:14,280 --> 01:11:23,060 Der er også en mulighed, er defineret af en variabel i tcsh kaldet echo_style. 969 01:11:23,060 --> 01:11:27,700 Det er en af ​​disse variabler, der kan ændre den måde, ECHO arbejder. 970 01:11:27,700 --> 01:11:30,910 Der er andre tilfælde, hvor du kan tildele en variabel 971 01:11:30,910 --> 01:11:36,290 der ændrer den måde, at skallen operationen, herunder en indbygget kommando, fungerer. 972 01:11:36,290 --> 01:11:38,130 Det ville ikke påvirke noget andet 973 01:11:38,130 --> 01:11:40,640 da andre kommandoer ikke har adgang til de shell-variabler, 974 01:11:40,640 --> 01:11:42,090 kun de miljøvariabler. 975 01:11:42,090 --> 01:11:45,360 Men shell operationer kan læse shell-variabler. 976 01:11:45,360 --> 01:11:50,710 Det vil ikke arbejde for csh. Det er kun tcsh. Det er en af ​​de forbedringer. 977 01:11:58,540 --> 01:12:04,620 Tolker har sekvenser, når den evaluerer metategn, 978 01:12:04,620 --> 01:12:08,140 når den evaluerer variabler, aliaser, historie referencer. 979 01:12:08,140 --> 01:12:11,830 Der er en bestemt sekvens for disse ting. 980 01:12:11,830 --> 01:12:13,730 Hvis det gør tingene i en bestemt rækkefølge 981 01:12:13,730 --> 01:12:16,080 og bliver til noget, der er et udtryk for en slags 982 01:12:16,080 --> 01:12:20,650 som allerede er blevet evalueret, vil det ikke vurdere det igen. 983 01:12:20,650 --> 01:12:24,520 Hvis det bliver det, så vil det bare gå på de tegn. 984 01:12:24,520 --> 01:12:29,920 Så hvis evalueringen af ​​nogle udtryk som kommando substitution 985 01:12:29,920 --> 01:12:36,850 eller variabel eller hvad giver anledning til et udtryk 986 01:12:36,850 --> 01:12:39,240 som du ønsker at blive evalueret, 987 01:12:39,240 --> 01:12:42,510 der vil kun fungere, hvis denne evaluering opstår senere i sekvensen. 988 01:12:42,510 --> 01:12:45,010 Jeg håber, at jeg er klar der. 989 01:12:45,010 --> 01:12:50,460 At parsing sekvens, en operation i C-shell, 990 01:12:50,460 --> 01:12:56,490 er ikke det samme for indbyggede kommandoer, som det er for ikke-indbyggede kommandoer. 991 01:12:56,490 --> 01:12:58,890 Jeg er ikke sikker på om Bash der. 992 01:12:58,890 --> 01:13:02,450 For eksempel, hvis en shell variabel produceret en historie reference 993 01:13:02,450 --> 01:13:04,230 det sandsynligvis ikke ville gå tilbage i historien. 994 01:13:04,230 --> 01:13:06,010 Det ville bare få det udråbstegn. 995 01:13:06,010 --> 01:13:08,840 Faktisk kan vi bare forsøge at ud lige nu. 996 01:13:09,720 --> 01:13:18,240 sæt a =, og vi bliver nødt til at sætte dette i der. 997 01:13:30,690 --> 01:13:34,580 Åh, vent. Undskyld. Jeg gjorde det i Bash. Jeg ønskede at gøre det her. 998 01:13:53,470 --> 01:13:56,080 Se, så det ikke vurdere, at historien henvisning 999 01:13:56,080 --> 01:14:00,520 fordi det var allerede forbi det punkt at vurdere historie udtryk 1000 01:14:00,520 --> 01:14:02,720 når det vurderes variablen. 1001 01:14:02,720 --> 01:14:05,550 Så det er 1 effekt af parsing. 1002 01:14:05,550 --> 01:14:08,760 Og igen, er indbyggede kommandoer ikke gjort på samme måde. 1003 01:14:08,760 --> 01:14:11,230 Ok. Lad os gå til den næste her. 1004 01:14:11,230 --> 01:14:16,060 Dette er beregnet til at være 1 linje, men det gør det lettere at læse. 1005 01:14:19,130 --> 01:14:21,530 Hvad betyder det så? 1006 01:14:21,530 --> 01:14:28,640 Du husker måske, at vi kan vurdere asterisk som filnavn jokere, 1007 01:14:28,640 --> 01:14:33,890 og der er andre filnavn wildcards som spørgsmålstegn og beslag udtryk. 1008 01:14:33,890 --> 01:14:39,000 Den slags evaluering kaldes globbing. 1009 01:14:39,000 --> 01:14:46,290 sæt noglob i begyndelsen af ​​denne kommando siger ikke gør det. 1010 01:14:46,290 --> 01:14:53,370 frakoblet noglob siger gå tilbage til at gøre det. 1011 01:14:53,370 --> 01:14:56,440 Bemærk at sæt glob ville ikke have denne virkning. 1012 01:14:56,440 --> 01:15:00,800 I almindelig sprogbrug, ville sætte glob eller frakoblet noglob synes at være ækvivalent, 1013 01:15:00,800 --> 01:15:03,290 men her er det ikke. Det er frakoblet noglob. 1014 01:15:05,120 --> 01:15:07,910 Nu tIndstil. tIndstil stod for terminal sæt. 1015 01:15:07,910 --> 01:15:11,840 Det er ikke brugt, som ofte nu, men før vinduessystemer blev tilgængelige 1016 01:15:11,840 --> 01:15:15,760 og du havde en enkelt terminal, kan du nødt til at bestemme, hvilken type. 1017 01:15:15,760 --> 01:15:18,700 Og hvis noget var på vej over en Ethernet eller fra netværket, 1018 01:15:18,700 --> 01:15:21,120 du måske ønsker at sige, det er en VT100. 1019 01:15:21,120 --> 01:15:26,630 VT100 er lidt af en standard i terminalen virksomhed. Det kommer fra DEC terminalen. 1020 01:15:26,630 --> 01:15:35,270 Hvis du bare gøre dialup - bemærke, at? Dette går tilbage en måder, hva '? 1021 01:15:35,270 --> 01:15:39,520 Så hvis vi bare tIndstil herovre, 1022 01:15:39,520 --> 01:15:45,250 hvis jeg bare gøre tIndstil, er det at nulstille min terminal, men du kunne ikke se noget. 1023 01:15:45,250 --> 01:15:47,340 Det gjorde ikke rigtig ændre noget. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Okay. 1026 01:15:51,480 --> 01:15:53,350 setenv TERM xterm-farve. 1027 01:15:53,350 --> 01:15:57,080 Vi ved allerede, at udtrykket blev sat på den måde, så der ikke ændres. 1028 01:15:57,080 --> 01:15:58,860 Det er den måde, vi gerne vil gøre det. 1029 01:15:58,860 --> 01:16:07,080 Men bemærk at denne kommando, tIndstil-s, bare output disse kommandoer. Det gjorde ikke køre dem. 1030 01:16:07,080 --> 01:16:09,770 Det gjorde ikke køre disse kommandoer, det output dem. 1031 01:16:09,770 --> 01:16:13,650 Så dette er beregnet til at producere kommandoer, som derefter vil blive kørt. 1032 01:16:13,650 --> 01:16:16,360 Du husker kommandoen i filen jeg bare viste du havde en Q i det. 1033 01:16:16,360 --> 01:16:18,910 Så lad os gøre det. 1034 01:16:18,910 --> 01:16:23,750 Q-undertrykker nogle output, men det betyder ikke noget her, som du kan se. 1035 01:16:23,750 --> 01:16:27,980 Jeg er bare at gøre det for at vise dig, at det ikke har noget. 1036 01:16:27,980 --> 01:16:31,870 Dette er i backquote syntaks. 1037 01:16:31,870 --> 01:16:35,340 Bemærk backquote her backquote her. 1038 01:16:35,340 --> 01:16:37,680 Jeg udelade disse ting her. 1039 01:16:37,680 --> 01:16:39,570 Det er de tilfælde af at fortælle det, hvad de skal gøre 1040 01:16:39,570 --> 01:16:42,050 i tilfælde af særlige typer af terminaler - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, netværk, dialup, hvad har du. 1042 01:16:45,400 --> 01:16:48,050 Det betyder ikke noget her, fordi vi ikke rent faktisk gør nogen af ​​disse ting. 1043 01:16:48,050 --> 01:16:49,720 Jeg er bare illustrerer kommando. 1044 01:16:49,720 --> 01:16:55,170 Hvis jeg gør dette med backquote, hvad jeg kommer til at få? 1045 01:16:55,170 --> 01:17:00,210 Bemærk også her, at dette omfattede indstillede noglob og frakoblet noglob, 1046 01:17:00,210 --> 01:17:02,630 så dem bliver nu afskediget i definitionen. 1047 01:17:02,630 --> 01:17:05,380 Det var ikke altid sandt, men nu er de medtaget i denne kommando. 1048 01:17:05,380 --> 01:17:08,890 Men lad os se hvad der sker, hvis jeg gør det 1049 01:17:08,890 --> 01:17:12,570 og gå til begyndelsen af ​​linjen med Kontrol A og jeg gør det. 1050 01:17:14,380 --> 01:17:18,040 Okay, sæt: Kommando ikke fundet. Det er lidt underligt, er det ikke? 1051 01:17:18,040 --> 01:17:20,570 sæt er en velkendt kommando. Det er en del af skallen. 1052 01:17:20,570 --> 01:17:24,040 sæt: Kommando ikke fundet? Hvorfor er det? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Nå, lad os tænke over dette. 1054 01:17:26,790 --> 01:17:31,100 Det kører en backquote kommando substitution, 1055 01:17:31,100 --> 01:17:37,430 og der forekommer ved en bestemt del af sekvensen af ​​parsing kommandoen. 1056 01:17:37,430 --> 01:17:40,360 sæt er en indbygget kommando. 1057 01:17:40,360 --> 01:17:43,900 Så ved den tid, det gør denne kommando substitution, 1058 01:17:43,900 --> 01:17:48,280 det er allerede kommet forbi det punkt at identificere indbyggede kommandoer. 1059 01:17:48,280 --> 01:17:51,900 Så det behandler indstillet som om det var en kommando i stien. 1060 01:17:51,900 --> 01:17:55,440 Overflødigt at sige, det ikke finde det, og du får en fejl. 1061 01:17:55,440 --> 01:17:59,300 Well. Der er et eksempel på parsing sekvens. 1062 01:17:59,300 --> 01:18:01,460 Og hvad gør vi ved det? 1063 01:18:01,460 --> 01:18:04,800 Bemærk denne meget interessante kommando her, eval. 1064 01:18:04,800 --> 01:18:06,530 Jeg spekulerer på, hvad der gør. 1065 01:18:06,530 --> 01:18:08,760 Hvis man ser på den manuelle - og lad os bare gøre det 1066 01:18:08,760 --> 01:18:12,000 at vise, hvordan forvirrende disse håndbøger er - 1067 01:18:12,000 --> 01:18:19,400 mand tcsh, forvirret manual, finde ting her er heller ikke let. 1068 01:18:19,400 --> 01:18:31,850 Her går vi, eval arg, så vi kan have en eller flere argumenter 1069 01:18:31,850 --> 01:18:34,090 og der er en liste over ting der. 1070 01:18:34,090 --> 01:18:37,730 Behandler de argumenter som input til skallen 1071 01:18:37,730 --> 01:18:43,600 og udfører de resulterende kommandoer i forbindelse med den aktuelle skallen. 1072 01:18:43,600 --> 01:18:46,900 Dette er normalt bruges til at udføre kommandoer genereret som følge af kommando 1073 01:18:46,900 --> 01:18:51,310 eller variabel substitution fordi parsing sker, før disse udskiftninger. 1074 01:18:51,310 --> 01:18:52,580 Meget godt. 1075 01:18:52,580 --> 01:18:54,740 Og her er de endda henvise til tIndstil kommandoen for en stikprøve brug 1076 01:18:54,740 --> 01:18:57,700 som den jeg bare viste dig. 1077 01:18:57,700 --> 01:19:00,440 Nu er jeg nødt til at få vinduet tilbage til et nyttigt sted. 1078 01:19:03,150 --> 01:19:07,800 Lad os tage over her, og vi vil se, at eval bruges lige før det. 1079 01:19:07,800 --> 01:19:14,010 Så lad os se hvad der sker, hvis vi sætter - her går vi op med pilene til denne kommando 1080 01:19:14,010 --> 01:19:20,940 og Kontrol A til begyndelsen, eval. 1081 01:19:20,940 --> 01:19:22,850 Okay, så det fungerer. 1082 01:19:22,850 --> 01:19:26,440 Når du gør eval, det tager, hvad der kommer efter det og gør det til en kommando. 1083 01:19:26,440 --> 01:19:29,460 Dette giver dig mulighed for væsentlige tolke det to gange. 1084 01:19:29,460 --> 01:19:33,710 Afsnittet her kører denne kommando inde i backquotes, 1085 01:19:33,710 --> 01:19:36,210 får output. 1086 01:19:36,210 --> 01:19:42,850 Output formodes at blive kørt som de kommandoer her som disse 1087 01:19:42,850 --> 01:19:45,890 på denne ene, og denne ene. 1088 01:19:45,890 --> 01:19:50,100 Så disse kommandoer er nu her i denne sekvens, 1089 01:19:50,100 --> 01:19:58,950 men disse er indbyggede kommandoer, og det kan ikke få dem med det samme. 1090 01:19:58,950 --> 01:20:06,440 Så går vi til eval, eval samler det op, starter det hele forfra igen, og det virker. 1091 01:20:06,440 --> 01:20:18,460 Et eksempel både backquoting EVAL, parsing konsekvenser parsing 1092 01:20:18,460 --> 01:20:21,910 og en kommando, som sandsynligvis er meget lidt brug for dig i dag. 1093 01:20:21,910 --> 01:20:25,540 Okay. Okay, umask. 1094 01:20:25,540 --> 01:20:32,160 Lad os se på denne kommando her, umask 022. Jeg spekulerer på, hvad der gør. 1095 01:20:32,160 --> 01:20:38,420 Lad os bare skrive umask med intet efter det. 22.. Okay. 1096 01:20:38,420 --> 01:20:44,350 022 og gøre det igen. 1097 01:20:44,350 --> 01:20:48,580 Som du måske har gættet, umask uden argumenter fortæller dig den aktuelle maske; 1098 01:20:48,580 --> 01:20:51,760 umask med argumenter gør den det, men det var den ene havde jeg allerede. 1099 01:20:51,760 --> 01:20:53,800 Hvad betyder 022 betyder? 1100 01:21:01,650 --> 01:21:07,080 Det er her den beskyttelse af en fil. 1101 01:21:07,080 --> 01:21:11,440 De bestemmer, hvem der må læse eller skrive eller eksekvere filen. 1102 01:21:11,440 --> 01:21:16,560 Beskyttelse kaldes også tilladelser. 1103 01:21:16,560 --> 01:21:21,390 R står for læse, w for skrivning, 1104 01:21:21,390 --> 01:21:25,500 og x, som ikke er til stede der, står for udføre. 1105 01:21:25,500 --> 01:21:27,260 Der er 3 kategorier der. 1106 01:21:27,260 --> 01:21:33,540 De sidste 3 elementer er i den kategori af brugeren. De gælder for mig, for brugeren. 1107 01:21:33,540 --> 01:21:36,870 Disse 3 her gælder for gruppen. 1108 01:21:36,870 --> 01:21:41,590 Filen tilhører 1 gruppe, kan brugeren tilhøre flere grupper, 1109 01:21:41,590 --> 01:21:47,150 men hvis brugeren er i den gruppe, hvor filen tilhører, 1110 01:21:47,150 --> 01:21:51,090 så disse beskyttelser vil gælde for ham, hvis han ikke er brugeren. 1111 01:21:51,090 --> 01:21:54,230 Og dette er alle andre. 1112 01:21:55,540 --> 01:21:57,690 Disse kategorier er gensidigt udelukkende. 1113 01:21:57,690 --> 01:21:59,750 De bruger-beskyttelser gælder for ham, 1114 01:21:59,750 --> 01:22:03,780 gruppens beskyttelse gælder for medlemmer af gruppen andre end brugeren, 1115 01:22:03,780 --> 01:22:08,110 og de andre beskyttelser kun gælde for andre end brugeren og gruppens medlemmer folk. 1116 01:22:08,110 --> 01:22:12,320 Hvis der er en r eller aw eller x, betyder det, at der gives beskyttelse. 1117 01:22:12,320 --> 01:22:13,950 Hvis der er en bindestreg, betyder det, er det ikke. 1118 01:22:13,950 --> 01:22:16,690 Der faktisk er andre ting, der kan sættes i her foruden disse, 1119 01:22:16,690 --> 01:22:18,350 som jeg ikke vil komme ind nu. 1120 01:22:18,350 --> 01:22:24,450 Den umask definerer en standard for filer, som du opretter. 1121 01:22:24,450 --> 01:22:28,580 Og som en maske, dybest set det siger de bits, som du ikke sat. 1122 01:22:28,580 --> 01:22:30,450 Hvordan er dette blevet bits? 1123 01:22:30,450 --> 01:22:33,240 Hvis du tænker på hver af disse som en oktal nummer, 1124 01:22:33,240 --> 01:22:42,120 dette er det 1s smule, er dette den 2s, dette er 4s. 1125 01:22:42,120 --> 01:22:45,840 Så 0 til 7 1126 01:22:45,840 --> 01:22:51,770 vil beskrive, hvad kombinationen af ​​r s, w er, og x'er du har for disse 3 1127 01:22:51,770 --> 01:22:53,710 og derefter et tilsvarende antal for disse og derefter for disse. 1128 01:22:53,710 --> 01:23:12,030 Så 022 betyder 0 for andre, 2 for gruppen, 2 for brugeren. 1129 01:23:12,030 --> 01:23:15,870 Men dette er en maske. Masken er, hvad du ikke har. 1130 01:23:19,380 --> 01:23:20,610 Undskyld. Jeg har lige givet dig ting i den forkerte rækkefølge. 1131 01:23:20,610 --> 01:23:25,620 Det er de første 3. Disse 3 er brugeren, disse 3 er gruppen, disse 3 er den anden. 1132 01:23:25,620 --> 01:23:27,970 Undskyld jeg gav dig disse i den forkerte rækkefølge. 1133 01:23:27,970 --> 01:23:31,910 0, som er den første af dem, ikke vise værdien, 1134 01:23:31,910 --> 01:23:35,430 men hvis et tal ikke er der, det er et 0. 1135 01:23:35,430 --> 01:23:38,370 Det betyder, at alle 3 af disse ville være tilladt. 1136 01:23:38,370 --> 01:23:41,550 Bemærk, at i dette særlige ene x er ikke tilladt. 1137 01:23:41,550 --> 01:23:44,090 Årsagen er, at skallen er i stand til at bestemme 1138 01:23:44,090 --> 01:23:46,260 om en fil skal udføres eller ej. 1139 01:23:46,260 --> 01:23:49,800 Da dette ikke er en eksekverbar fil, gjorde det ikke indstille x. 1140 01:23:49,800 --> 01:23:54,000 De 2 midler, der skriver tilladelse, den anden kategori her, 1141 01:23:54,000 --> 01:23:56,500 den ene i midten, er nægtet. 1142 01:23:56,500 --> 01:23:58,500 Så igen, det er de ting, som den nægtet. 1143 01:23:58,500 --> 01:24:02,080 Nå, x er tilladt, men det er ikke her, fordi det ikke er eksekverbar 1144 01:24:02,080 --> 01:24:04,260 og tilsvarende for de andre. 1145 01:24:04,260 --> 01:24:08,880 Så det er en fælles umask. 1146 01:24:08,880 --> 01:24:14,630 En anden almindelig ene er 700 - give dig selv alt og ingen andre noget. 1147 01:24:14,630 --> 01:24:17,040 Og der er andre muligheder. 1148 01:24:21,340 --> 01:24:27,110 Jeg vil gå tilbage til. Brug af historie, jeg kan søge tilbage til det, LBH til der. 1149 01:24:27,110 --> 01:24:30,210 Okay. Så her, det er de skaller. 1150 01:24:30,210 --> 01:24:36,020 Bash, de ejer, der er system-konto, kan gøre alt. 1151 01:24:36,020 --> 01:24:41,210 Group og alle andre kan gøre læse eller udføre, men ikke skrive. 1152 01:24:41,210 --> 01:24:44,570 Denne ene ikke engang tillader ejeren at skrive til den. 1153 01:24:44,570 --> 01:24:46,460 Hvis ejeren ønskede at skrive til det, vil systemet konto, 1154 01:24:46,460 --> 01:24:48,020 han ville have til at ændre beskyttelsen først. 1155 01:24:48,020 --> 01:24:53,940 Men igen, det umask sætter standard ved at skjule det, 1156 01:24:53,940 --> 01:24:57,160 ved at angive de bits, der ikke vil blive sat. 1157 01:24:57,160 --> 01:25:04,380 Det er typisk i en af ​​dine initialiseringsfiler, som er. Cshrc for C-shell 1158 01:25:04,380 --> 01:25:07,500 eller. profilen for Bourne-type skaller. 1159 01:25:07,500 --> 01:25:12,520 Det kan være andre steder også, hvis der er andre initialisering filer på systemet. 1160 01:25:12,520 --> 01:25:14,610 Anyway, det er umask. 1161 01:25:14,610 --> 01:25:18,180 Der er noget slags ulige her, 1162 01:25:18,180 --> 01:25:22,800 og det er, hvorfor er der en enkelt kommando til dette? 1163 01:25:22,800 --> 01:25:28,690 Hvis jeg skulle skrive dette, ville jeg gøre det en variabel, umask = vis værdi. 1164 01:25:28,690 --> 01:25:31,100 Hvorfor er der en hel kommando netop til dette formål? 1165 01:25:31,100 --> 01:25:34,560 Årsagen er dette blot går tilbage til oprindelsen af ​​Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix var blot nogle programmerings projekt på Bell Labs i begyndelsen af ​​1970'erne. 1167 01:25:41,050 --> 01:25:42,610 Folk bare fik sammen til programmet. 1168 01:25:42,610 --> 01:25:45,290 De har aldrig tænkt sig at blive et verdensomspændende operativsystem. 1169 01:25:45,290 --> 01:25:47,250 Forskellige mennesker skrev forskellige dele uden at tænke meget 1170 01:25:47,250 --> 01:25:49,790 af hvordan de skal bruges - temmelig magre. 1171 01:25:49,790 --> 01:25:53,290 Og det kom sammen sådan, og det er stadig som den i visse henseender. 1172 01:25:53,290 --> 01:25:57,930 Så det afspejler den historie, og der er stadig disse uoverensstemmelser og ulige elementer i det. 1173 01:25:57,930 --> 01:26:00,750 Okay. Næste en her. 1174 01:26:08,170 --> 01:26:11,000 Som jeg skrev tidligere, er C-shell ikke rigtig brugt meget til programmering, 1175 01:26:11,000 --> 01:26:12,420 selvom det kan være. 1176 01:26:12,420 --> 01:26:15,080 Den udfører langsommere, igen afvejningen mellem interaktiv brug, 1177 01:26:15,080 --> 01:26:17,820 som har mere processorkraft involveret end hastighed, 1178 01:26:17,820 --> 01:26:20,710 der kan undvære behandlingen. 1179 01:26:20,710 --> 01:26:28,320 De ekstra funktioner tilføjet til Bourne skal af Korn og Bourne-again skaller 1180 01:26:28,320 --> 01:26:32,120 synes ikke at sinke dem, og jeg ved ikke, hvorfor det er. 1181 01:26:32,120 --> 01:26:36,310 Det kunne bare være bedre programmering, men jeg er ikke i stand til at vide. 1182 01:26:36,310 --> 01:26:40,420 Hastighed her faktisk ikke er sådan en big deal, selv om det er nævnt. 1183 01:26:40,420 --> 01:26:43,690 Årsagen er, at shell scripts faktisk få temmelig hurtigt. 1184 01:26:43,690 --> 01:26:46,450 Hvis der er en masse af kommandoer som i en beregningsteknikkerne program 1185 01:26:46,450 --> 01:26:49,110 ville du sikkert ikke gøre det i et shell script. 1186 01:26:49,110 --> 01:26:51,450 Operationerne der er forholdsvis enkel og ligetil. 1187 01:26:51,450 --> 01:26:53,960 Dem, jeg har oplevet, der er for langsomme 1188 01:26:53,960 --> 01:26:57,110 involvere gentagne anvendelser af langsomme kommandoer. 1189 01:26:57,110 --> 01:27:00,480 Jeg nævnte tidligere stream editor sed. Denne kommando er langsom. 1190 01:27:00,480 --> 01:27:03,760 Hvis du udfører SED mange gange, får du en langsom script, men det er ikke skallen, der er langsom. 1191 01:27:03,760 --> 01:27:07,920 Kører det i Bourne shell, vil ikke være meget hurtigere end at køre i C-shell, 1192 01:27:07,920 --> 01:27:10,070 selv om der er måske nogle fordele der. 1193 01:27:10,070 --> 01:27:12,760 De yderligere programmering kapaciteter, på den anden side, 1194 01:27:12,760 --> 01:27:17,920 er væsentlige grunde til, at du ville bruge de Bourne-type skaller. 1195 01:27:17,920 --> 01:27:21,390 C-shell har ulige funktioner til det - 1196 01:27:21,390 --> 01:27:25,250 det faktum, at du ikke ved, om en variabel er en shell variabel eller en miljøvariabel. 1197 01:27:25,250 --> 01:27:27,440 Det kan være meget forvirrende. 1198 01:27:27,440 --> 01:27:32,170 Det er ikke så let at skrive 1199 01:27:32,170 --> 01:27:35,930 blot baseret på din oplevelse af programmering i andre sprog. 1200 01:27:35,930 --> 01:27:41,350 Jeg tror du kan finde de Bourne-type skaller mere i overensstemmelse med din oplevelse. 1201 01:27:43,730 --> 01:27:49,270 Nogle scripts, men kan være tusindvis af linjer i længden. 1202 01:27:49,270 --> 01:27:52,450 Dem, jeg har set bruges til at lappe operativsystemer. 1203 01:27:52,450 --> 01:27:55,450 De kan udføre meget langsomt, men du behøver ikke køre dem meget ofte. 1204 01:27:55,450 --> 01:27:57,180 Det er kun, når du laver patching, 1205 01:27:57,180 --> 01:27:59,450 og det er kun systemadministratoren, der gør disse ting, 1206 01:27:59,450 --> 01:28:01,840 så det er egentlig ikke meget af et problem. 1207 01:28:01,840 --> 01:28:06,980 De, der er hundredvis af linjer lang faktisk at gennemføre forholdsvis hurtigt. 1208 01:28:06,980 --> 01:28:10,540 Hvori dette her, hvad er disse forbedringer? 1209 01:28:10,540 --> 01:28:13,170 Jeg har allerede nævnt et par af dem - arrays, beregninger, 1210 01:28:13,170 --> 01:28:20,540 de $ () udtryk for beregningerne i Bash shell, 1211 01:28:20,540 --> 01:28:23,050 Den anden form for kommando substitution. 1212 01:28:23,050 --> 01:28:25,360 Der findes forskellige typer af test-kommandoer 1213 01:28:25,360 --> 01:28:29,350 , som du kan gøre betingede tests på eksistensen af ​​en fil eller andre ting. 1214 01:28:29,350 --> 01:28:34,790 Her sidst, denne kommando her. 1215 01:28:34,790 --> 01:28:38,480 Hvad betyder dette gør, og hvorfor skulle nogen bruge det? 1216 01:28:51,170 --> 01:28:52,990 printenv variabelnavn. 1217 01:28:52,990 --> 01:28:56,130 Vi ved, hvad printenv gør. Det fortæller os, at værdien af ​​en variabel. 1218 01:28:56,130 --> 01:29:00,850 Og printenv variabelnavn vil ikke fortælle os meget, fordi der er ikke sådan variabel. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Men lad os give det noget meningsfuldt. 1221 01:29:13,420 --> 01:29:16,800 Det er ikke der enten. Okay. Jeg tror jeg aldrig defineret det. 1222 01:29:16,800 --> 01:29:18,020 Lad os lige tjekke mine omgivelser. 1223 01:29:18,020 --> 01:29:20,900 Dette er en anden kommando, som du kan inspicere dit miljø. 1224 01:29:20,900 --> 01:29:24,470 Der er gode gamle editor, den vi oplevede før. 1225 01:29:42,360 --> 01:29:44,120 Hvad betyder det så? 1226 01:29:44,120 --> 01:29:48,050 Her har vi en backquote udtryk. 1227 01:29:48,050 --> 01:29:50,370 Husk dette er C-shell. 1228 01:29:50,370 --> 01:29:54,850 Så printenv EDITOR vil give os en værdi af editor. Det er vi. 1229 01:29:54,850 --> 01:29:59,790 Og så vil det sætte denne værdi til variablen a, den indstillede kommando. 1230 01:29:59,790 --> 01:30:02,860 Så nu, hvis jeg gør echo $ a, jeg får vi. 1231 01:30:02,860 --> 01:30:05,850 Det synes ikke frygtelig nyttig. 1232 01:30:05,850 --> 01:30:08,080 Men det rent faktisk gør har et formål. 1233 01:30:08,080 --> 01:30:12,260 Da vi ikke ved, om en variabel er en shell variabel eller en miljøvariabel 1234 01:30:12,260 --> 01:30:16,280 ved hjælp af dollar tegn evaluering syntaks, kan vi bruge printenv 1235 01:30:16,280 --> 01:30:19,460 at sikre, at det er en miljøvariabel. 1236 01:30:19,460 --> 01:30:22,550 Så hvis der var en shell variabel redaktør, ville dette ikke have fået det. 1237 01:30:22,550 --> 01:30:25,640 Dette virker kun med miljøvariablen. 1238 01:30:25,640 --> 01:30:28,370 Hvis der var en shell variabel og jeg ville dens værdi, 1239 01:30:28,370 --> 01:30:29,980 Jeg er nødt til at finde en anden måde at gøre det. 1240 01:30:29,980 --> 01:30:33,530 En måde at gøre det ville være ved at gøre sæt og rørføring. 1241 01:30:33,530 --> 01:30:36,130 Dette er en af ​​de metategn, specialtegn. 1242 01:30:36,130 --> 01:30:38,370 Det sender produktionen af ​​sæt til noget andet. 1243 01:30:38,370 --> 01:30:40,650 Lad os se hvad vi kan finde der. 1244 01:30:40,650 --> 01:30:49,340 Ikke noget. Okay. Lad os bare se, hvad der er derinde alle sammen. 1245 01:30:49,340 --> 01:30:53,580 Det var echo_style, den ene jeg nævnte før. Okay, lad os gøre det. 1246 01:31:02,460 --> 01:31:06,230 Husk jeg nævnte før, echo_style 1247 01:31:06,230 --> 01:31:08,410 bestemmer den måde kommandoen echo vil køre. 1248 01:31:08,410 --> 01:31:10,940 bsd står for Berkeley Standard Distribution. 1249 01:31:10,940 --> 01:31:13,200 Dette er Berkeley Unix fra 1970'erne. 1250 01:31:13,200 --> 01:31:16,630 Det er en af ​​de måder, at ECHO kan køre. 1251 01:31:16,630 --> 01:31:22,310 Indstilling echo_style til denne værdi i TC-shell vil forårsage ekko til at opføre sig på den måde. 1252 01:31:22,310 --> 01:31:27,670 Så sæt gør det, men sæt kun får shell-variabler. 1253 01:31:27,670 --> 01:31:35,430 Det ville ikke finde EDITOR, hvilket ikke er en shell variabel. 1254 01:31:36,870 --> 01:31:38,050 Ikke noget. 1255 01:31:38,050 --> 01:31:39,660 Så det er en måde at adskille dem. 1256 01:31:39,660 --> 01:31:42,000 Men det faktum, at du er nødt til at gå igennem nogle mærkelige kommando som der 1257 01:31:42,000 --> 01:31:45,500 at skelne mellem shell variabler eller miljøvariabler 1258 01:31:45,500 --> 01:31:49,970 viser den slags upraktisk karakter af C-shell til nogle formål. 1259 01:31:52,290 --> 01:31:57,960 Og nu, sidste og måske det mindste er det man-siderne. 1260 01:31:57,960 --> 01:32:03,190 De af hvem du måske ved, at manden er den kommando kort til manuel. 1261 01:32:03,190 --> 01:32:08,610 Man siderne for skallerne er svære at læse. De er meget lange. 1262 01:32:08,610 --> 01:32:14,060 De er organiseret på en måde, der kan gøre det svært at finde det, du leder efter. 1263 01:32:14,060 --> 01:32:15,980 Så hvis du leder efter noget med et formål, 1264 01:32:15,980 --> 01:32:20,050 du kan ikke vide, om dette formål er en shell variabel eller noget andet, 1265 01:32:20,050 --> 01:32:21,630 så du kan ikke vide, hvor de skal lede efter det. 1266 01:32:21,630 --> 01:32:25,030 Du kan søge efter forskellige strenge, men strengene er ofte gentagne. 1267 01:32:25,030 --> 01:32:27,640 Så det er generelt svært at læse. 1268 01:32:27,640 --> 01:32:33,810 Vi har lige kigget på TC-shell mand side lidt før for at finde eval kommando. 1269 01:32:33,810 --> 01:32:36,610 Nogle ting går hurtigere. 1270 01:32:36,610 --> 01:32:38,860 En fremgangsmåde er at søge efter en streng. 1271 01:32:38,860 --> 01:32:40,360 Du kan bruge personsøger. 1272 01:32:40,360 --> 01:32:49,080 Personsøgeren har skråstreg til at lede efter en kommando eller en streng inde i en personsøger operation. 1273 01:32:49,080 --> 01:32:52,830 Man som standard vil bruge personsøgere, enten være mere eller mindre. 1274 01:32:52,830 --> 01:32:56,560 Jeg ved ikke, om du er fortrolig med dem, men de kan vise filer lidt efter lidt. 1275 01:32:56,560 --> 01:33:00,550 Jeg har brugt mindre at vise disse særlige filer, vi har her. 1276 01:33:00,550 --> 01:33:03,300 Du kan søge inde der. 1277 01:33:03,300 --> 01:33:04,880 Du kan prøve at bruge forskellige søgestrenge. 1278 01:33:04,880 --> 01:33:08,420 Også mand sider i forskellige operativsystemer kan ikke være den samme. 1279 01:33:08,420 --> 01:33:11,130 De kan være separate sider for csh og tcsh. 1280 01:33:11,130 --> 01:33:14,500 De er ikke på Mac, men de kunne være, hvis de er separate kommandoer. 1281 01:33:14,500 --> 01:33:19,000 Hvis sh ikke rigtig kalde Bash, sandsynligvis ville der være en separat man side. 1282 01:33:19,000 --> 01:33:25,820 Nogle systemer har separate mand sider bare for C-shell indbyggede kommandoer. 1283 01:33:25,820 --> 01:33:30,250 Nogle gange, hvis du ønsker at læse en beskrivelse af en indbygget kommando 1284 01:33:30,250 --> 01:33:35,350 det er også i vejen, ligesom ekko, skal du læse den mand siden på denne kommando på ekko 1285 01:33:35,350 --> 01:33:37,610 at bestemme, hvordan det vil fungere som en indbygget kommando 1286 01:33:37,610 --> 01:33:39,760 selvom du ikke kalder den indbyggede kommando. 1287 01:33:41,630 --> 01:33:46,090 Det er en ulempe af operativsystemet i almindelighed, ikke kun for de skaller, 1288 01:33:46,090 --> 01:33:50,710 selv om skallerne især mand sider er ganske lang, 1289 01:33:50,710 --> 01:33:56,180 dels fordi de har tilføjet nyttige funktioner til dem, hvilket kan være en positiv. 1290 01:33:56,180 --> 01:34:00,290 Okay. Er der nogen spørgsmål? Eventuelle emner, du ønsker at bringe op? 1291 01:34:00,290 --> 01:34:03,390 Noget relevant her? 1292 01:34:04,540 --> 01:34:07,100 Tja, det har været meget hyggeligt at tale med jer alle. 1293 01:34:07,100 --> 01:34:09,690 Jeg håber du fik noget ud af dette seminar 1294 01:34:09,690 --> 01:34:13,080 der vil være nyttige for dig i dine fremtidige bestræbelser. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]