>> [Hội thảo - Mai, vỏ Unix, môi trường]
[Douglas Kline - Đại học Harvard]
[Đây là CS50. - CS50.TV]
>> Chủ đề của ngày hôm nay là Unix.
Tôi Douglas Kline, chuyên gia, hoặc ít nhất là hợp lý người sử dụng có thẩm quyền, của vỏ.
Một vỏ là giao diện cho người sử dụng hệ điều hành của máy tính.
Tên là gây hiểu nhầm như, không giống như vỏ của động vật,
đó là khó khăn và bảo vệ, vỏ máy tính cho phép giao tiếp.
Vì vậy, màng xốp có lẽ sẽ là một phép ẩn dụ tốt hơn.
>> Vỏ ban đầu cho Unix là vỏ Bourne.
Bourne được viết B-O-U-R-N-E.
Bourne là một trong những tác giả ban đầu của Unix,
và do đó vỏ được mang tên ông.
Tên của vỏ như là một lệnh chỉ đơn giản là sh.
Đó là lệnh bạn có thể thực hiện.
Vỏ bắt đầu lúc đăng nhập.
Khi bạn đăng nhập vào máy tính, vỏ chỉ bắt đầu chạy cho bạn,
và đó là những gì có lệnh của bạn.
Nó có thể bắt đầu từ thời điểm khác cũng có.
Nếu bạn đưa ra một cửa sổ không có chỉ dẫn khác, nó sẽ bắt đầu một vỏ cho bạn.
Đó là làm thế nào mà bạn có thể đi đến một cửa sổ và bắt đầu gõ lệnh
và vv có ngay cả khi bạn không đăng nhập vào cửa sổ đó.
Ngoài ra, nếu bạn làm một đăng nhập từ xa,
sau đó nó sẽ bắt đầu một vỏ trên máy tính từ xa.
Và nó có thể chạy các lệnh mà không có một trình bao tương tác.
Điều đó có thể có nghĩa là trong hoạt động hiện tại của bạn,
và nó cũng có thể có nghĩa là một hoạt động từ xa.
Bạn có thể gửi một lệnh đến một máy tính khác,
trong đó bao gồm bắt đầu lên một bao ở đó.
Trong thực tế, nó phải bao gồm bắt đầu lên một vỏ có
ngay cả khi đó không phải là mục đích cuối cùng của bạn.
Khi một cái gì đó bắt đầu như thế này, nó không nhất thiết phải bắt đầu một vỏ mới.
Nếu bạn đưa ra một cửa sổ mới, nó có thể nói cho nó để mang đến một biên tập viên
hoặc một số lệnh khác.
Trong trường hợp đó, biên tập viên sẽ bắt đầu từ đầu.
Khi các biên tập viên kết thúc, cửa sổ kết thúc.
Đây là một chút khác thường nhưng nó có thể được thực hiện.
Trong những trường hợp, nó sẽ không thể là một vỏ.
Vì vậy, nó không nhất thiết phải là trường hợp đó một cửa sổ hoặc một số ứng dụng như vậy sẽ mang đến một trình bao.
>> Shell phân tích lệnh.
Phân tích cú pháp có nghĩa là xác định các yếu tố khác nhau và phân loại chúng.
Trong một lệnh, chuỗi hoàn chỉnh mà bạn gõ,
sẽ có 1 hoặc nhiều lệnh duy nhất để được thực thi.
Các yếu tố khác có thể có những lập luận.
Có cũng có thể là ký tự đặc biệt làm ảnh hưởng đến việc thực hiện một lệnh.
Họ có thể gửi đầu ra ở đâu đó khác hơn so với màn hình
nếu lệnh sẽ thường gửi nó vào màn hình.
Nó có thể chuyển hướng đầu vào, nó có thể làm những việc khác cũng có.
Có biểu tượng khác nhau khác, nhân vật, và vv.
Phân tích liên quan đến việc phát hiện và giải thích những điều đó.
>> Bây giờ, nếu không có nhiều câu hỏi, đó là thay vì có thể vì không có nhiều người hơn,
chúng tôi sẽ tiếp tục trang tiếp theo của tôi ở đây.
>> Tôi đã nói trước đó rằng Bourne vỏ là vỏ ban đầu.
Có những người khác.
Một là C-shell. Lệnh là csh.
Tên C-vỏ chỉ là một cách chơi chữ.
Vỏ này đã được giới thiệu với Berkeley Unix trong giữa những năm 1970.
Berkeley Unix là một sự kiện chuyên đề trong sự phát triển của Unix.
Đó là một cuộc cách mạng rất lớn và bao gồm việc giới thiệu các vỏ này.
Lý do cho rằng cách chơi chữ, C-vỏ,
là C-shell có một số đặc điểm trong nó mà giống với ngôn ngữ C,
mà bao Bourne không có -
hoặc nó không có tại thời điểm đó.
Ngoài ra còn có TC-vỏ.
Đây là một siêu của C-shell.
Nó có tính năng bổ sung, trong đó có nhiều hữu ích để sử dụng tương tác,
chẳng hạn như thu hồi lệnh trong cơ chế lịch sử,
mà tôi sẽ mô tả phần nào sau -
một cách đơn giản, mô hình sau khi một biên tập viên.
Nó cũng có các ràng buộc cho phép bạn liên kết một chuỗi phím tắt cho một lệnh dài hơn.
Chúng tôi sẽ không được nhận vào ngày hôm nay.
Nó có một số tính năng hữu ích cho lập trình.
Tuy nhiên, C-vỏ không thường được sử dụng cho lập trình shell.
Chương trình vỏ, nếu bạn chưa biết,
là chương trình bao gồm các đặc điểm vỏ.
Bạn có thể chạy các chương trình như.
Bạn viết một loạt các lệnh shell vào một tập tin và thực hiện các tập tin.
Bạn không cần phải biên dịch nó. Đây là một ngôn ngữ diễn giải.
Cụm từ C vỏ tại là không rõ ràng vì nó có thể chỉ tham khảo C-shell, csh,
hoặc cho tất cả các C-vỏ, bao gồm tcsh. Đó là một chút mơ hồ.
>> Một vỏ sau là Korn shell, ksh, được đặt tên sau khi các lập trình viên, Korn.
Vỏ này đã cố gắng để kết hợp vào 1 vỏ
những ưu điểm của C-vỏ để sử dụng tương tác
và Bourne shell cho lập trình.
Nó đã được sử dụng như một trình bao tương tác của một số người - một dân tộc thiểu số.
Sau đó, mặc dù đã có giới thiệu khác, vỏ Bash, BASH,
một lần nữa một cách chơi chữ, Bourne-again shell.
Đó là một phần mở rộng của vỏ Bourne. Korn vỏ cũng được. Cả hai đều là.
Nó có cùng một mục tiêu của Korn shell của amalgamating C-vỏ của
và lợi thế bao Bourne trong 1 vỏ.
Nhiều người trong số những cải tiến của vỏ Korn cũng được bao gồm trong Bash.
Bash, tuy nhiên, có hơn và do đó là một lợi thế.
Bourne-again shell và Korn shell được gọi là vỏ Bourne loại
bởi vì chúng bao gồm các đặc điểm Bourne vỏ của,
mà không phù hợp trong một số khía cạnh với C-vỏ.
Có vỏ khác bên cạnh đó, một số dự định sử dụng hạn chế,
có thể giới hạn ở một số lệnh, có lẽ mục đích chuyên biệt, không thường được sử dụng.
>> Rồi. Mục tiếp theo đây.
Bash shell đã trở thành liên kết với các hình thức khác nhau của Linux.
Tôi không chắc chắn nếu đó là sự thật của mọi hình thức.
Có nhiều hình thức đó, và tôi đã không sử dụng tất cả,
nhưng trong những người mà tôi đã sử dụng nó đã trở thành liên kết với nó.
Cho đến nay như tôi biết, không có gì về Bash là
mà làm cho nó bất kỳ tương thích hơn với Linux
hơn bất kỳ sự kết hợp khác của vỏ và hệ điều hành.
Tôi nghĩ rằng đây có thể chỉ là phản ánh khuynh hướng của các lập trình viên.
Nó có trở thành liên kết với Linux là một lý do để thích Bash để KSH
vì những điều có thể sẽ được viết trong đó và nó có khả năng lây lan.
Tôi sẽ cung cấp cho bạn những lý do khác cho rằng sau này.
Kịch bản shell Bourne nên chạy dưới vỏ Korn hoặc Bash.
Nếu bạn viết một cái gì đó cho vỏ Bourne,
có thể bạn có thể thực hiện nó dưới ksh hoặc bash.
Kịch bản Korn shell có thể sẽ chạy theo Bash, nhưng tôi không thể đảm bảo rằng.
Sau đây, kịch bản C-vỏ nên chạy theo TC-vỏ.
C-vỏ đã thực sự không bao giờ sử dụng rộng rãi cho các kịch bản
kể từ khi Bourne shell và sau đó là vỏ Bourne loại là thích hợp hơn cho mục đích đó.
Vì vậy, đó thực sự không phải là tất cả những gì quan trọng.
Có khá nhiều kịch bản shell Bourne được viết từ lâu,
trước khi Korn shell hoặc vỏ Bourne-again đã được giới thiệu.
Những người vẫn còn đang được sử dụng, một phần của hệ điều hành,
và do đó bạn sẽ tìm thấy chúng nếu bạn nhìn vào các hệ điều hành
hoặc một số gói chương trình cũ.
>> Bash là ở một mức độ trở thành một loại ngôn ngữ chung cho các hệ thống điều hành.
Nó đã được mở rộng đến Windows và VMS.
VMS, trong trường hợp bạn không biết, là một hệ điều hành độc quyền
Công ty Cổ phần Thiết bị kỹ thuật số mà vẫn được sử dụng, chủ yếu đằng sau hậu trường.
Và nếu nó sẽ được chạy trên hệ điều hành khác nhau,
có khả năng những người có xu hướng thay đổi cho nó.
Nhưng sự phát triển này là tương đối gần đây.
Nó chỉ mới bắt đầu, vì vậy tôi không thể dự đoán nếu điều này sẽ lần lượt ra thực sự thể là loại ngôn ngữ chung.
Ngoài ra, vì tên đường dẫn tập tin và các thư viện khác nhau
giữa các hệ điều hành khác nhau,
bạn có thể không có thể viết một kịch bản Bash trên một hệ điều hành
và sau đó chạy nó vào nhau.
Bạn có thể di chuyển nó giữa Unix khác nhau, Linux
Hệ điều hành Mac OS nhưng không nhất thiết phải Windows hoặc VMS.
Bạn có thể phải thay đổi tên đường dẫn tập tin giới thiệu,
và một số thư viện có thể khác nhau,
có thể ảnh hưởng đến cách mà một số lệnh làm việc
hoặc làm thế nào họ xử lý đối số và tương tự.
Bên cạnh đó, một cách thận trọng ở đây là không có đảm bảo
rằng tất cả các vỏ khác nhau tôi đã đề cập - Bourne shell, C-vỏ,
TC-vỏ, Korn shell, Bourne-again shell - sẽ có sẵn trong bất kỳ Unix
hoặc Linux hoặc máy tính Mac OS.
Họ chỉ đơn giản có thể không có mặt ở đó.
Đó là một trong những cảnh báo ở đây.
Đây là một hạn chế đáng tiếc ở đây kể từ khi bạn muốn điều để làm việc ở khắp mọi nơi,
nhưng không may, bạn không thể dựa vào đó.
>> Rồi. Tiếp theo đây.
Hãy nói rằng bạn muốn viết một kịch bản,
một chương trình bao gồm các lệnh trình bao.
Bạn viết lệnh của bạn, đặt chúng trong một tập tin, và thực hiện các tập tin.
Nếu bạn muốn bao gồm đối số?
Trong trường hợp hoạt động vỏ, đối số được gọi là các tham số hoặc tham số vị trí
và họ sẽ được gọi bằng một dấu đô la và số, $ 1, $ 2.
Vì vậy, nếu kịch bản có tên này, số đầu tiên của tôi có thể tranh luận 1
và thứ hai của tôi có thể lập luận 2,
và bên trong kịch bản của tôi nếu tôi muốn đề cập đến những điều này -
hãy xóa này vì tôi không thực sự đi để chạy nó -
trong kịch bản của tôi, tôi có thể có $ 1 để tham khảo arg1,
2 đô la, sẽ đi ra theo cách đó, arg2.
Vì vậy, những biểu tượng có sẵn để tham khảo đối số,
và những áp dụng cho tất cả các vỏ.
Ngoài ra, có những nhân vật khác.
$ * Đề cập đến toàn bộ danh sách tham số, tất cả chúng.
$ # Đề cập đến số lượng các đối số.
Một lần nữa, điều này áp dụng cho tất cả các vỏ.
Những biểu tượng, * và #, có thể được sử dụng với những ý nghĩa ở những nơi khác cũng có.
Chúng tôi sẽ không nhận được vào đó.
>> Shell dòng specifier. Là những gì vậy?
Hãy nói rằng bạn đã viết một kịch bản và đó là một lớp vỏ đặc biệt và bạn muốn chạy nó.
Làm thế nào để bạn biết những gì bao hệ điều hành của bạn sẽ sử dụng để chạy kịch bản của bạn?
Tại một thời điểm bạn có thể giả định rằng nó sẽ chạy nó trong vỏ Bourne
nếu bạn không nói cách khác,
nhưng mọi người không viết kịch bản trong Bourne bao nhiều nữa
và thậm chí bạn không thể dựa vào đó nữa.
Vì vậy, ở đây chúng tôi có một dòng specifier vỏ ngay tại đây.
Chỉ định Bash.
Lưu ý rằng nó xác định nó trong tên đường dẫn, / bin / bash.
Nếu một máy tính có vỏ Bash nhưng không phải trong thư mục bin, / bin, điều này sẽ không làm việc.
Đó là một vòng loại, thận trọng khác ở đây.
Dấu thăng là nhân vật dòng bình luận.
Áp dụng cho tất cả các vỏ.
Các trường hợp cụ thể ở đây, #! vào đầu một kịch bản, là một trường hợp đặc biệt.
Chỉ định vỏ, trong đó để chạy kịch bản.
Như tôi đã nói, nó có thể không phải là cùng một vị trí / bin.
Ngoài ra, có một điều ở đây.
Nếu bạn chỉ cần sử dụng dấu thăng không có dấu chấm than và tên đường dẫn,
cần chỉ ra một C-shell.
Tuy nhiên, tôi không khuyên bạn nên làm điều đó bởi vì tôi không thể đảm bảo
mà sẽ luôn luôn làm việc.
Nếu bạn muốn có một C-shell, nó sẽ là tốt hơn để nói như vậy.
Sau đó có một cái gì đó khá khó hiểu ở đây.
Nếu bạn sử dụng một dòng vỏ đặc tả như / bin / bash
và vỏ mà không có sẵn ở đó,
không có những điều như / bin / bash trên máy tính riêng,
hoặc vì nó không có Bash hoặc bởi vì nó ở một vị trí khác nhau,
bạn sẽ nhận được một lỗi nói với bạn rằng kịch bản bạn chạy không tồn tại.
Và tất nhiên kịch bản của bạn tồn tại, do đó thông báo lỗi là khó hiểu.
Lý do mà hệ điều hành cung cấp cho bạn báo lỗi
hay chính xác hơn, đó là trình bao tương tác của bạn mà bạn đang chạy này cho rằng lỗi,
là nó báo cáo lệnh bạn sử dụng, đó là tên của kịch bản.
Lệnh có hiệu quả được gọi là vỏ bằng tên của kịch bản.
Đó là nơi mà bạn nhận được thông báo lỗi khó hiểu.
Một cách khác để gọi shell script
là bằng cách xác định vỏ trên dòng lệnh, như ở đây.
Đây là một lệnh. Này nói chạy Bash và sau đó chạy kịch bản của tôi trong Bash.
Điều đó sẽ được ưu tiên hơn một dòng đặc tả,
và điều này có các tính năng cho phép bạn để cung cấp cho tên đường dẫn khác nhau.
Nếu bạn chỉ cần đưa ra một lệnh, hệ điều hành sẽ tìm kiếm lệnh
ở những nơi khác nhau.
Nếu nó có sẵn, cần tìm thấy nó.
Máy tính sẽ tìm thấy bất cứ nơi nào Bash nó nằm và chạy nó,
do đó bạn không cần phải sau đó phải được quan tâm về nơi nó tìm thấy nó.
Có những lo ngại tiềm năng khác ở đây,
như nếu có nhiều hơn 1 phiên bản của Bash, mà có thể mặc dù khó xảy ra.
Vì vậy, đó là một cách khác để đối phó với những điều này.
Dòng đặc tả có thể gọi bất kỳ vỏ.
Họ cũng có thể gọi những thứ khác hơn vỏ.
Ví dụ tôi có ở đây được sed, mà là biên tập viên dòng;
AWK, mà là một ngôn ngữ xử lý mẫu;
và perl, một ngôn ngữ kịch bản phát triển rất cao.
Nếu bạn đặt một dòng đặc tả cho thấy một trong những chương trình ngay từ đầu,
nó sẽ đi trực tiếp vào chương trình chứ không phải bắt đầu từ một trình bao.
Các chương trình có giới hạn khả năng của mình.
Perl là rất có khả năng. Sed là một biên tập viên. Nó có thể làm những việc vượt quá chỉ đơn giản là chỉnh sửa.
Nhưng nó có thể được khó khăn cho chương trình đó.
Ngoài ra, đối số và các công cụ để kịch bản hoặc là không thể hoặc khó hiểu.
Vì vậy, trong những trường hợp, với AWK hoặc sed, đó là, ít nhất là trong kinh nghiệm của tôi,
thích hợp hơn để viết một kịch bản và gọi AWK hoặc sed từ kịch bản
thay vì gọi AWK hoặc sed như dòng kịch bản đặc tả.
Perl là một ngôn ngữ rất đa dạng, như tôi đã nói.
Bạn không thể chạy các lệnh tương tác trong perl,
có nghĩa là bạn không thể kiểm tra các bộ phận của kịch bản mà bạn đang phát triển
bằng cách chạy chúng tương tác.
Tuy nhiên, nó là một ngôn ngữ rất có khả năng
và đã phát triển thành một công cụ được sử dụng rất rộng rãi.
Đó chỉ là một chút của một nhận xét về dấu ngoặc đơn dòng đặc tả.
>> Trong tất cả hoặc hầu hết các dạng Linux - một lần nữa, tôi không thể chắc chắn đó là tất cả -
và trong Mac OS, nếu bạn gõ csh bạn nhận được tcsh,
và nếu bạn gõ sh bạn nhận được bash.
Họ đã cố gắng có để cung cấp cho bạn các phiên bản tiên tiến hơn của những vỏ sò,
nhưng điều này có thể gây nhầm lẫn.
Nếu bạn viết một kịch bản sử dụng tcsh hoặc Bash các tính năng trong khi gọi csh hoặc sh
và sau đó cố gắng chạy nó trên một máy tính mà không có tcsh hoặc Bash,
bạn có thể nhận được một số lỗi nếu có lệnh trong đó
mà những vỏ không nhận ra.
Ngoài ra, bạn có thể gọi lên vỏ của bạn trên máy tính của bạn
gọi nó như sh hay csh và sau đó nhận được vỏ cao cấp hơn.
Bạn thậm chí có thể không nghĩ về thực tế là bạn đang sử dụng vỏ cao cấp hơn.
Vì vậy, đây là một cạm bẫy tiềm năng.
Thế nào là nó được thành lập mà nếu bạn gõ sh bạn nhận được Bash,
nếu bạn gõ csh bạn nhận được tsch?
Có những điều trong các máy tính này được gọi là liên kết
có thể kết nối với tên tập tin để tham khảo những điều tương tự.
Nó, hoặc có thể là 2 cái tên cho cùng một tập tin hoặc một tập tin mà mục đích là để chỉ đến tập tin khác.
Chúng được gọi là liên kết cứng và tượng trưng. Chúng tôi sẽ không đi vào đó nữa ngày hôm nay.
Cũng có thể có các file riêng biệt - 1 tập tin sh, 1 tập tin Bash -
nhưng cả hai đều chạy Bash.
Sau đó có vòng loại khác ở đây.
Nếu bạn đang gọi điện thoại một trong các vỏ của một tên,
bạn có thể nghĩ rằng bạn sẽ nhận được các chức năng tương tự như gọi nó bằng một cái tên khác.
Vâng, đó thực sự không phải là nhất thiết phải đúng.
Các lệnh này có thể kiểm tra tên mà họ được gọi là
và họ có thể, trên cơ sở của tên đó, hành xử khác nhau.
Có thể có vấn đề cố gắng để phù hợp với một tiêu chuẩn.
Một số bạn có thể đã nghe nói về các tiêu chuẩn POSIX hay cách khác,
có thể tính năng khác.
Điều này có thể được lựa chọn đôi khi bởi đối số dòng lệnh
hoặc bằng cách thiết lập các biến shell.
Gọi nó như sh hoặc bash thực sự có thể dẫn đến một thực hiện khác nhau
ngay cả khi nó cùng một tập tin mà bạn đang thực hiện.
Một điều cần xem xét là ngay cả khi máy tính khác có tcsh hoặc Bash,
nếu họ không liên kết như họ đang ở trên máy tính của bạn
nếu bạn có một máy tính địa phương Linux hay Mac OS,
sau đó một lần nữa bạn sẽ nhận được vỏ mà bạn gọi sh hay csh, không phải là người mà bạn có thể thích.
Bourne shell hiện nay có cải tiến ít hơn so với những người trong Bash
nhưng qua những người trong Bourne shell ban đầu.
Là kết quả của điều đó, thậm chí Bourne shell hiện tại, sh,
ngay cả khi nó không phải Bash, tương tự như các ngôn ngữ C hơn so với C-vỏ không.
Đó là không đúng sự thật khi C-vỏ lần đầu tiên được tạo ra, nhưng nó đã phát triển theo cách đó.
Bạn có thể nhận thấy ở đây là tất cả các tên vỏ trừ vỏ Bourne
có một cái gì đó để chỉ ra vỏ họ - csh, bash -
nhưng Bourne vỏ chỉ là sh.
Tại sao? Đó là vỏ ban đầu.
Đó là THE vỏ sau đó, không một vỏ,
và vì đó là THE vỏ, không có lý do để phân biệt với vỏ khác.
Vì vậy, đó là lý do tại sao nó có tên đó và vẫn còn hiện.
>> Đầu này đây là một đường từ một cơ sở dữ liệu mật khẩu cho tài khoản tôi có có
trên một máy tính khác.
Tôi sẽ cố gắng để có được tên đó để bạn có thể thấy rằng một phần ở cuối, vỏ.
Cơ sở dữ liệu mật khẩu giữ các đặc điểm đăng nhập cho tất cả người dùng.
Lúc đầu là tên người dùng, bạn có thể thấy 2 chữ cái cuối cùng của tôi bây giờ.
Các lĩnh vực ở đây được phân cách bằng dấu hai chấm.
Trường cuối cùng, bạn có thể thấy, là bin / tcsh, vỏ.
Đó là sự xác định vỏ.
Có điều gì đó thú vị ở đây.
Khi Unix đã được phát triển đầu tiên, chỉ có 1 vỏ,
vì vậy không có sự lựa chọn đó.
Vì vậy, tại sao họ cho phép một lĩnh vực trong cơ sở dữ liệu mật khẩu để xác định một vỏ?
Tôi không biết, nhưng nó may mắn là họ đã làm.
Nó khá khó khăn để thực hiện thay đổi trong các định dạng cơ sở dữ liệu mật khẩu
bởi vì nhiều chương trình tham khảo định dạng của nó
và sẽ phải được viết lại.
Đó là một phát triển vui vẻ hoặc ngẫu nhiên mà họ bao gồm lĩnh vực đó.
Đó là loại một dòng tập tin mật khẩu được sử dụng trên tất cả các máy tính Unix và Linux cho đến nay như tôi biết.
Mac có hệ thống riêng của mình.
Nó thực sự có một tập tin mật khẩu với các dòng ở định dạng đó,
nhưng đó không phải là nơi mà các đặc điểm người sử dụng được xác định.
Một nhận xét ngoặc đó.
>> Nếu bạn đang gọi điện thoại một vỏ, bạn có thể gọi nó như là một tiểu vỏ đạn hiện tại của bạn.
Vì vậy, nếu tôi đi đây, chúng ta hãy thoát khỏi những điều này.
Ở đây tôi đang ở C-shell.
Rằng biến, trong đó xác định chính xác bao của tôi,
thực sự không phải là luôn luôn là một cách đáng tin cậy xác định những gì bao bạn đang chạy,
nhưng trong trường hợp này nó được.
Nếu tôi chỉ cần gõ -
Bây giờ tôi đang trong Bash.
Một số điều sẽ được như vậy. ls nói với tôi lệnh của tôi.
Nếu tôi làm một đình chỉ trở lại C-vỏ của tôi, ls, tương tự. Phải không?
fg, tiền cảnh, trở lại vỏ Bash của tôi.
pwd, thư mục hiện tại, trở lại với C-shell.
pwd, khác nhau thư mục - thực sự không phải là một thư mục khác nhau trong trường hợp này.
Đó là cùng một thư mục.
Hãy nói rằng tôi muốn gọi một lệnh ở đây: nơi ls.
Điều đó làm những gì?
Nó nói với tôi mà lệnh ls,
một trong đó mang lại cho tôi một danh sách thư mục, nằm ở ls.
Chúng ta hãy quay trở lại Bash shell. Chúng ta hãy thử cùng một điều.
Hmm, thú vị có, trong đó: lệnh không được tìm thấy.
Tại sao vậy?
Nơi lệnh được xây dựng trong C-shell.
Đây không phải là một lệnh mà đã được đọc vào bộ nhớ từ một nơi khác và thực hiện.
C-shell chạy nó bằng cách chuyển thực hiện một phần của mã riêng của mình
và nó không phải trong Bash shell.
Vì vậy, Bash, không có một lệnh như vậy được xây dựng trong, trông cho nó, không tìm thấy nó,
và chúng tôi nhận được một lỗi.
Vì vậy, chúng tôi đã có một vỏ Bash chạy theo một C-shell, và chúng tôi gọi đó là một tiểu vỏ.
Và chỉ trong trường hợp bạn đang tò mò, Bash shell có cách riêng của mình định vị lệnh.
băm đề cập đến thực tế là nó có thể được thực hiện nhanh hơn,
được tìm thấy nhanh hơn.
Đó là một trong những cải tiến được xây dựng vào một số trong những vỏ.
>> Vỏ Bourne loại được ưa thích dành cho lập trình.
Họ có cấu trúc điều khiển như vòng, báo cáo có điều kiện,
các loại lệnh mà bạn có thể sử dụng trong ngôn ngữ lập trình như C
hoặc bất cứ ngôn ngữ. Có lẽ bạn đang lập trình trong Java hoặc bất cứ điều gì.
Vỏ có những người quá.
Vỏ Bourne loại, đặc biệt là Bash, có nhiều
và chúng được thiết kế với sự linh hoạt lớn hơn.
Bash shell có mảng. Bản gốc Bourne vỏ không.
Do đó có thể được thuận lợi đáng kể cho chương trình.
C-vỏ thực sự không có mảng nhưng không có rất nhiều những tính năng khác.
Vỏ Bourne loại sẽ thực hiện nhanh hơn
nếu họ không có các tính năng dành cho người dùng tương tác.
Bạn tải xuống thứ cho một mục đích, điều này tải chúng xuống cho mục đích khác.
Có mà thương mại-off ở đó.
Những tính năng được thiết kế để sử dụng tương tác
thực sự có ít hoặc không sử dụng cho kịch bản.
Nó có thể sử dụng một tiểu trình bao tương tác giống như một trong tôi bắt đầu có
để kiểm tra các lệnh mà bạn có ý định sử dụng trong một kịch bản.
Đó là những gì bạn không thể làm với perl. Bạn có thể làm điều đó với vỏ.
Ngay cả những cấu trúc như cho các vòng và vv có thể chạy tương tác.
Họ là đôi khi hữu ích để chạy tương tác,
nhưng nhiều khả năng bạn đang sử dụng chúng để phát triển một kịch bản.
>> Bí danh.
Điều này là có được về C-shell.
Cơ chế lịch sử, nơi bạn có được trở lại lệnh trước đó
hoặc các bộ phận của họ rằng bạn đã chạy.
Một lần nữa, về C-vỏ, vỏ Bourne và Korn shell có những điều này,
nhưng tôi sẽ không vào được.
Vì vậy, đây là một số bí danh hữu ích mà tôi có.
Thay vì gõ ls - đó là một lệnh phổ biến -
chỉ cần gõ l và tiết kiệm cho mình 1 nhân vật.
ls với tùy chọn khác nhau, tất cả những người làm việc.
Lưu ý rằng những định nghĩa có dấu ngoặc kép xung quanh.
Trong những trường hợp này, các báo giá là không cần thiết.
Nếu bạn có thể xác định những bí danh mà không có dấu ngoặc kép, nó vẫn sẽ làm việc.
Họ được khuyến khích.
Có những tình huống mà bạn không thể sử dụng các báo
bởi vì bạn muốn một cái gì đó xảy ra mà các báo giá sẽ ngăn chặn.
Đôi khi bạn có thể trích dẫn một phần của định nghĩa nhưng không phải tất cả của nó.
Nó cũng thường được khuyến cáo sử dụng dấu nháy đơn chứ không phải là dấu ngoặc kép.
Dấu ngoặc kép có tác dụng trên các định nghĩa biến,
đặc biệt là làm cho chúng được đánh giá chứ không phải là ngăn chặn nó.
Lý do tại sao chúng tôi muốn dừng lại việc đánh giá?
Và làm thế nào để dấu ngoặc kép làm điều đó cho chúng tôi?
>> Đây là một lệnh mà bạn có thể tìm thấy thú vị.
'Ls g *'
g *, như bạn đã biết, là một biểu thức ký tự đại diện
cho tất cả các tên tập tin bắt đầu bằng g.
Nếu tôi chỉ viết trong một lệnh ls g *, tôi sẽ nhận được một danh sách tất cả những cái tên trong thư mục hiện tại của tôi.
Nếu tôi xác định bí danh đó vì nó là ở đây với các dấu ngoặc kép,
nó sẽ chạy lệnh trong thư mục hiện tại của bạn mà bạn đang chạy nó.
Nhưng nếu bạn chạy các định nghĩa bí danh mà không có dấu ngoặc kép,
nó sẽ đánh giá các ký tự đại diện * g khi nó chạy lệnh định này.
Vì vậy, định nghĩa của bí danh sẽ được ls tiếp theo là danh sách các tập tin trong thư mục
trong đó lệnh bí danh được thực thi,
không phân biệt nơi bạn thực sự có ý định để chạy các lệnh.
Đây không phải là sử dụng nhiều, và các dấu nháy đơn ngăn chặn việc đánh giá các dấu hoa thị.
Vì vậy bạn chỉ có được định nghĩa con ls g *.
Sau đó, khi bạn chạy các bí danh, LGS, nó sau đó đặt mà ra.
Bây giờ không có dấu ngoặc kép, và nó sẽ đánh giá các dấu hoa thị khi bạn chạy các lệnh bí danh.
Vì vậy, đó là một điều.
Dấu ngoặc kép sẽ có cùng tác dụng ở đây,
nhưng có những trường hợp khác, trong đó dấu ngoặc kép sẽ không làm việc rất tốt.
>> Đây là một khác.
Bạn có thể biết lệnh grep.
Lệnh grep có thể được sử dụng để quét một tập tin cho đường dây có dây nhất định.
Vì vậy, hãy đi qua đây và tôi sẽ thoát ra khỏi vỏ Bourne của tôi.
Được rồi. Dưới đây là một tập tin.
Hãy nói rằng đó là chuỗi abc grep. Có nó được.
Nếu tôi làm zddd grep, tôi nhận được gì. Được rồi.
Vì vậy, nó tìm thấy một chuỗi, nó báo cáo, nó không tìm thấy, nó không báo cáo.
Nó ra bất kỳ dòng trong đó có chuỗi trên nó.
Có tất cả các loại tùy chọn ở đây mà bạn có thể tìm thấy trong tài liệu.
Đây là một cách để làm điều đó.
Những gì về việc này, bí danh grabc 'grep abc'?
Điều đó sẽ bao gồm 1 lập luận khi bí danh được xác định.
Vì vậy, nếu tôi làm điều đó ở đây, bây giờ nếu tôi làm grabc,
bây giờ là bí danh bao gồm hơn các lệnh đơn giản. Nó cũng có các đối số.
Cho đến nay công trình.
Tôi có một lệnh ở đây này, vì vậy đó là những dây khác nhau trong đó
và cho rằng điều này không tìm thấy bất cứ điều gì có vì nó không phù hợp.
>> Nếu tôi muốn bao gồm trong định nghĩa bí danh các tập tin mà tôi sẽ tìm kiếm
và tôi muốn cung cấp như một tham số để bí danh chuỗi mà tôi đang tìm kiếm?
Tôi có thể muốn nói abc như là đối số để bí danh của tôi,
nhưng các bí danh đã được xác định tập tin.
Và đó là nơi biểu hiện này có in
Chú ý ở đây chúng tôi có grep giống như trước đây.
Chúng tôi có các tập tin ở đây, chuỗi.
\ ^, Loại một biểu hiện kỳ ​​lạ, tôi cho rằng, nếu bạn không nhìn thấy điều này trước đây.
Dấu chấm than là một phần của cơ chế lịch sử C-shell.
Nó có thể nhớ lại lệnh trước đó, nó có thể nhớ lại các đối số cho các lệnh và vv.
Cơ chế lịch sử được sử dụng như một phần của răng cưa.
Nếu bạn chỉ định một dòng sau dấu chấm than, nó sẽ tham khảo dòng trong danh sách lịch sử,
mà chúng ta sẽ không được nhận vào tại vì nó là một toàn bộ chủ đề khác.
Nó có thể chỉ định một phần của một dòng.
Vì vậy, 3:02! Sẽ là đối số thứ hai của lệnh số 3.
Dấu sót ở đây trong biểu thức này là viết tắt của tham số đầu tiên.
Nếu bạn không cung cấp cho nó một dấu hiệu của lệnh mà bạn đang đề cập đến,
nó đề cập đến lệnh ngay lập tức trước,
và dấu sót là một biểu tượng cho tham số đầu tiên.
Bởi vì đó là dấu nháy và không phải là số lượng, bạn không cần phải sử dụng dấu hai chấm,
như vậy! ^ có nghĩa là tham số đầu tiên để các lệnh trước đó.
Một chút hỗn hợp lên đây.
Trong trường hợp này, khi bạn sử dụng như là một định nghĩa bí danh,
tài liệu tham khảo lịch sử đề cập trở lại các lệnh trong đó bí danh được sử dụng.
Vì vậy, điều này sẽ trở lại 1 lệnh như một hoạt động lịch sử,
nhưng như là một hoạt động bí danh nó đề cập đến lệnh mà bạn gõ,
nói, grstrings_file.
Chúng tôi có các dấu ngoặc kép ở đây trong đó. Các dấu gạch chéo ngược cho là những gì?
Trong trường hợp này, như những nơi khác, chúng tôi không muốn thực hiện cơ chế lịch sử
trong khi xác định bí danh.
Nếu chúng ta không có dấu gạch chéo ngược đó, vỏ sẽ kéo trong tham số đầu tiên
của lệnh ngay trước khi nó chạy lệnh này bí danh, mà chúng tôi không muốn.
Chúng tôi muốn điều này được xây dựng trong các lệnh bí danh để gọi trong một cuộc tranh luận sau.
Báo giá duy nhất không thoát khỏi một dấu chấm than, tài liệu tham khảo lịch sử.
Có lẽ bạn biết thoát biểu hiện có nghĩa là phải thay đổi ý nghĩa của một cái gì đó.
Trong trường hợp này, nó có nghĩa là dừng lại một cái gì đó từ việc có một ý nghĩa đặc biệt.
Ý nghĩa đặc biệt chấm than điểm là lịch sử.
Thoát ra và nó không có ý nghĩa đó.
Báo giá không làm điều đó, dấu gạch chéo ngược không.
Vì vậy, chúng tôi đang thực sự sử dụng 2 mức độ thoát đây.
Tôi sẽ chuyển lệnh này vào cửa sổ khác mà không cần gõ nó
bằng cách sử dụng các hoạt động chỉnh sửa, mà bạn có thể tìm thấy hữu ích.
Cái gì khác ở đây tôi sẽ chỉ cho bạn.
Nếu bạn chỉ cần gõ bí danh không có đối số, nó sẽ cho bạn tất cả các đối số của bạn.
Đây là một loạt các bí danh tôi đã có ở đây
bên cạnh những người mà tôi đã được sử dụng ở đây ngày hôm nay.
Nhưng nếu tôi chỉ cần gõ với tên của một bí danh, nó nói với tôi những gì nó có nghĩa.
Chú ý rằng các dấu ngoặc kép đã mất hết và các dấu gạch chéo ngược đã biến mất.
Chuỗi này ở đây là kết quả của định nghĩa của bí danh,
và bây giờ nó chỉ có! ^ trong đó.
Điều này sẽ nhìn vào chuỗi tập tin cho bất cứ điều gì.
Vì vậy, nếu tôi làm dây grstrings_file, tôi không cho nó bất cứ điều gì để tìm ở đó,
nhưng nó đang tìm kiếm trong chuỗi.
Nó không tìm thấy các dây từ trong chuỗi tập tin, nhưng nó tìm thấy abc.
Và nó không tìm thấy đó.
Vì vậy, ở đây chúng tôi đang đưa ra một lập luận mà lượt truy cập vào định nghĩa của bí danh,
được chèn vào nó.
Đó là nơi biểu hiện này xuất phát từ.
Bạn có thể sử dụng nhiều hơn 1.
Dấu sót là một biểu tượng cho tham số đầu tiên.
Nếu bạn muốn sử dụng một số thứ hai, sau đó bạn sẽ nói: 2.
Không có biểu tượng đặc biệt cho đối số thứ hai.
Và bởi vì bạn đang sử dụng một số, bạn sẽ phải sử dụng đại tràng.
Có, tuy nhiên, một sự lựa chọn ở đây.
Ký hiệu đô la là viết tắt của đối số cuối cùng.
Và bởi vì đây là một biểu tượng, bạn có thể bỏ đại tràng.
Vì vậy, nó sẽ là số cuối cùng trong danh sách.
Và đó cũng là một trong đó.
Dấu hoa thị có nghĩa là tất cả, vì vậy đây là danh sách đối hoàn chỉnh,
và một lần nữa, bạn có thể bỏ đại tràng bởi vì nó không phải là một số.
Tôi hy vọng tất cả các bạn đang quan sát tất cả điều này.
>> Cơ chế lịch sử có thể quay trở lại dòng trước đó trong danh sách lịch sử.
Bạn có thể làm điều này trong một định nghĩa bí danh.
Tôi chưa bao giờ nhìn thấy điều này được thực hiện.
Nó sẽ có tác dụng kéo ra lệnh trước đó từ danh sách lịch sử
khi bạn thực hiện các bí danh, mà có thể là các lệnh khác nhau
tùy thuộc vào khi nào và nơi bạn thực hiện nó.
Có thể hình dung bạn có thể muốn kéo ra một tham chiếu như vậy
chỉ để biết những gì một lệnh trước đó là.
Tôi chưa bao giờ nhìn thấy điều này xảy ra.
Tôi cho rằng ai đó có thể muốn, nhưng điều này là rất khó xảy ra.
Có một điều ở đây.
Nếu bạn sử dụng lịch sử-kiểu tham chiếu,
sau đó chỉ các đối số mà có một tham chiếu như vậy được sử dụng.
Nếu bạn có một định nghĩa bí danh mà không sử dụng một tài liệu tham khảo lịch sử-loại,
nếu nó chỉ trở thành sự khởi đầu của lệnh
và bạn có lập luận thêm, sau đó bất cứ điều gì bạn gõ sau đó
sẽ được thêm vào các lệnh.
Trong trường hợp này, ví dụ tôi chỉ cho có, chúng tôi sử dụng số đầu tiên;
chúng tôi không sử dụng bất kỳ những người khác.
Nếu đối số khác đã được đưa ra trên dòng lệnh, họ sẽ không được sử dụng.
Vì vậy, nếu bạn sử dụng tài liệu tham khảo lịch sử ở tất cả, sau đó bạn phải sử dụng nó để có được bất kỳ đối số.
>> Có một điều ở đây tôi chỉ muốn đề cập đến, một phần trong ngoặc,
cụ thể là cơ chế lịch sử này với dấu chấm than
quay trở lại với bản gốc C-shell.
Các tcsh giới thiệu các hoạt động lịch sử
mà sử dụng các loại lệnh và chuỗi từ các biên tập viên,
hoặc Emacs hoặc vi.
Ý kiến ​​cá nhân của tôi là Emacs là dễ dàng hơn để sử dụng cho mục đích này
ngay cả khi bạn sử dụng vi để chỉnh sửa thường xuyên của bạn.
Có lệnh Emacs khác nhau mà hiện nay thích nghi với lịch sử.
Kiểm soát P được các dòng trước đó trong danh sách lịch sử.
Một điều khiển P sẽ giúp bạn có được một trước đó.
Mũi tên lên làm điều tương tự.
Kiểm soát N được lệnh tiếp theo nếu bạn đã cuộn lại một cách khác nhau.
Mũi tên xuống nào đó quá.
Bạn có thể di chuyển từ trái sang phải với các mũi tên và những thứ khác.
Điều này có thể sử dụng các cơ chế lịch sử
dễ dàng hơn nhiều so với sử dụng cú pháp dấu chấm than,
nhưng bạn sẽ không sử dụng trong một định nghĩa bí danh.
Chúng ta sẽ đi qua một số thời gian khác.
>> Biến.
Bạn biết những gì biến là ngôn ngữ lập trình.
Vỏ có họ cũng có.
C-vỏ sử dụng lệnh thiết lập để gán các biến,
để thiết lập một biến với giá trị của b -
như tôi đã nói, một định nghĩa vô dụng nhưng một minh họa về cách thức này được sử dụng.
Lệnh thiết lập sẽ tạo ra một biến nếu nó không tồn tại.
Các tham số vị trí cho các kịch bản vỏ có thể được coi là các biến,
nhưng việc sử dụng chúng và các quy tắc cho họ có phần khác nhau.
Bạn không thể gán một giá trị đến $ 1 trong quá trình một kịch bản.
Bạn sẽ phải xác định một biến mới cho mục đích đó nếu một số bạn muốn.
Loại thiết lập không có đối số và bạn sẽ có được một danh sách của tất cả các biến hiện nay được xác định.
Và chúng ta hãy vượt qua vỏ khác của tôi ở đây và xem những gì chúng ta nhận được nếu chúng ta làm điều đó.
Một danh sách khá dài ở đó, phải không?
Di chuyển lên một chút. Nhìn vào tất cả những gì.
Một số trong những điều được xác định tự động bởi vỏ.
Vỏ tạo ra các biến và cung cấp cho nó một giá trị.
Một số trong số họ được xác định bởi vỏ nhưng sau đó xác định lại bởi người sử dụng
theo sở thích của mình.
Và một số trong số họ được tạo ra bởi người sử dụng tùy thuộc vào những gì ông ấy đang làm ngày hôm đó.
Đó chỉ là thiết lập không có đối số.
Có một tính năng kỳ lạ ở đây điều này.
Có phải là một trong hai không có khoảng trống giữa dấu bằng và tên biến
và giá trị hoặc không gian của cả hai bên dấu bằng,
như trong một này.
Điều này sẽ không làm việc, và điều này thực sự là một lệnh hợp lệ
nhưng nó sẽ không làm những gì bạn dự định.
Lệnh đó sẽ làm việc bởi vì nếu bạn chỉ nói thiết lập và một tên biến
không có dấu bằng, hoặc thiết lập và một tên biến với một dấu bằng và không có giá trị,
nó sẽ thiết lập các biến để giá trị null.
Vì vậy, thiết lập một = là một lệnh hợp lệ.
Lệnh tập hợp có thể định nghĩa nhiều hơn 1 biến trên cùng một dòng.
Vì vậy, lệnh này ở đây có tác dụng xác định cả a và b về null.
Có lẽ không phải những gì bạn muốn.
Điều này một ở đây, đề cập trước đó, sẽ dẫn đến một lỗi
vì = b không phải là một biểu thức hợp lệ.
Một tên biến không thể bắt đầu bằng dấu bằng.
Và có những điều hơn nữa đây.
Các dấu hai chấm được sử dụng để lựa chọn đối số từ dòng lịch sử,
và họ có thể được sử dụng - và tôi đã không đi vào trước - để thay đổi những điều đó.
Họ cũng có thể được sử dụng để sửa đổi các biến vỏ.
Điều này một đây, $ a, có giá trị.
: R sẽ cất cánh một phần mở rộng.
Một phần mở rộng sẽ được bất cứ điều gì sau một dấu chấm,
một dấu chấm và bất cứ điều gì sau đó vào cuối của một tập tin,
chỉ ở cuối danh sách sau các dấu gạch chéo cuối cùng.
Vì vậy, tôi có nó ở đây.
một là. Nó sẽ thả. O.
Nếu không có phần mở rộng, chỉ có tên đường dẫn sau dấu gạch chéo cuối cùng, nó sẽ không có hiệu lực.
a: h, mà biểu hiện thay đổi, sẽ đưa ra khỏi phần tử cuối cùng của danh sách thư mục,
một lần nữa, chỉ sau các dấu gạch chéo cuối cùng.
Vì vậy, / a / b / c trở thành / a / b,
nhưng điều này được thay đổi bởi vì các yếu tố sau khi danh sách là vô giá trị.
Ở đây có cái gì đó mà tôi cũng muốn nhấn mạnh.
Các vòng loại không tìm kiếm sự tồn tại của những tập tin này.
Họ chỉ cần nhìn cho chuỗi.
Đây là những dự định để thao tác tên tập tin, pathnames,
nhưng chúng có thể được sử dụng trên bất kỳ chuỗi ngay cả khi nó không phải là một tên tập tin.
Và họ không tìm sự tồn tại,
vì vậy nếu không có tập tin như vậy, / a / b / c, điều này sẽ vẫn làm việc.
Cho dù đó là sử dụng bất kỳ một câu hỏi, nhưng nó vẫn sẽ làm việc.
Biến khác nhau trong vỏ Bourne. Chúng tôi sẽ nhận được điều này sau.
Ký hiệu đô la có thể được thoát giống như dấu chấm than và dấu hoa thị.
Ký hiệu đô la có thể được thoát ra bằng dấu gạch chéo ngược hoặc dấu nháy đơn.
Dấu ngoặc kép có tác dụng kỳ lạ trong tất cả vỏ
buộc các đánh giá của một đồng đô la ký biểu hiện biến.
Vì vậy, nếu nó được thoát khỏi một cách, các dấu ngoặc kép có thể có tác
gây nó được đánh giá nào.
Đây là một chút bối rối.
Nếu có nhiều mức độ thoát, chẳng hạn như dấu nháy đơn trong dấu ngoặc kép
hoặc dấu ngoặc kép bên trong dấu ngoặc đơn, bạn nên kiểm tra để xem những gì sẽ xảy ra
cho một biến nếu bạn đang sử dụng một.
Những tình huống 2 - trong đôi duy nhất, bên trong duy nhất của đôi -
không nhất thiết phải cung cấp cho bạn kết quả tương tự.
Biến môi trường, biến C-vỏ bị ràng buộc.
Biến môi trường cũng là các biến trong C-vỏ,
và họ cũng là các biến trong vỏ khác quá.
Trong C-vỏ, họ là tập hợp riêng biệt.
Những điều tôi đã nói trước là về biến vỏ.
Biến môi trường là một tập hợp khác nhau của các biến
ngoại trừ một số biến mà chúng ta gọi là biến bị ràng buộc,
đó là rất quan trọng và chúng tôi sẽ nhận được vào những người sau này.
Biến môi trường sẽ được tự động thông qua ngày
để vỏ hoặc lệnh được chạy từ vỏ của bạn.
Những điều khác thì không. Các biến vỏ, bí danh là không. Biến môi trường là.
Đó là lý do tại sao chúng tôi gọi họ biến môi trường,
ý tưởng được rằng môi trường kéo dài quá khứ chỉ vỏ hiện tại của bạn.
Chúng có thể được sử dụng để xác định điều lệnh.
Đây là một ví dụ. MÁY IN, LPDEST.
Cả hai của những biến có thể xác định một máy in có một lệnh sẽ sử dụng để in những thứ.
Nếu bạn có nhiều máy in xung quanh, bạn có thể muốn đặt một trong những bạn thích.
Lý do chúng tôi có 2 biến là bộ khác nhau của các lệnh được viết
sử dụng các biến khác nhau.
Bạn có thể cung cấp cho họ những giá trị khác nhau.
Rất có thể bạn sẽ cung cấp cho họ cả hai cùng giá trị.
Những điều làm việc vì các lệnh làm in ấn
đã được lập trình để kiểm tra các giá trị của các biến này.
Nếu một chương trình đã không được viết theo cách đó, nếu nó được viết để làm cái gì khác,
biến sẽ là không thích hợp.
Vì vậy, các hệ điều hành không tìm kiếm các biến
mỗi khi bạn đề cập đến một máy in.
Một lệnh thực hiện in ấn đang tìm kiếm các biến nếu nó được lập trình theo cách đó.
Các biến này thường được xác định trong các tập tin khởi tạo của bạn
nhưng không nhất thiết.
Bạn có thể xác định họ trên dòng lệnh.
Chúng có thể được định nghĩa trong một lệnh.
Một lệnh chạy một cái gì đó có thể có lựa chọn riêng của mình biến -
biến là duy nhất cho một gói phần mềm đặc biệt, ví dụ.
Họ sẽ được xác định khi bạn chạy gói đó.
Làm thế nào được các biến được truyền cho một tiểu vỏ?
Khi một tiểu vỏ được viết, nó không viết vào khu vực đó.
Khu vực của tiểu vỏ đó là dành cho các biến môi trường
không được viết bởi các tiểu vỏ, nó được viết bằng cách sao chép.
Khi bạn chạy một lệnh thông thường, chẳng hạn như các lệnh in hoặc bất cứ điều gì,
họ bắt đầu bằng cách tạo ra một lớp vỏ mới.
Vỏ tạo ra một vỏ và sau đó ghi đè lên một phần của nó
với các lệnh mà bạn đang chạy, đó là một chút bối rối,
nhưng đó là cách các lệnh này có được các biến môi trường
rằng họ sau đó tham khảo sau này.
Lệnh ở đây để xác định setenv biến.
Đó là cách bạn định nghĩa nó. Đó là 3 yếu tố: setenv, biến, giá trị.
Nếu bạn chỉ cần setenv không có đối số, những gì bạn nhận được?
Một danh sách tất cả các biến.
Một lần nữa, đó là một danh sách dài đẹp và trong trường hợp này, như trong những người khác,
các biến này được xác định chủ yếu do hoạt động đăng nhập của tôi bằng vỏ thân
chứ không phải do bất cứ điều gì tôi đã làm.
Có một lệnh đây, printenv.
Mà cũng in ra môi trường.
Chú ý điều cuối cùng này đây, EDITOR = vi.
Điều đó nói rằng nếu tôi đang sử dụng một cái gì đó mà các cuộc gọi một biên tập viên
và tôi không chỉ định một biên tập viên và nó cho phép tôi lựa chọn, nó có thể cung cấp cho tôi vi.
Nếu tôi làm EDITOR printenv? Nó nói với tôi nó là gì.
Ngay trước đó, đã có một biến, LESS.
Đây là mặc định lựa chọn của bạn khi tôi chạy lệnh LESS,
hiển thị tập tin.
Vì vậy, nếu tôi làm điều đó, printenv có thể mất 1 đối số hoặc đối số 0,
không quá 1.
Có nhiều lệnh khác cũng có, nhưng chúng tôi sẽ không nhận được vào tất cả những gì ngày hôm nay.
Nhớ có các bổ cho các biến vỏ như: h,
mà sẽ thả các phần tử cuối cùng của một tên đường dẫn,
hoặc: r, sẽ hủy bỏ một phần mở rộng.
Những người đang áp dụng đối với các biến môi trường quá. Họ không sử dụng đến.
Nó được sử dụng để họ không thể được sửa đổi. Bây giờ họ có thể được.
Đó là một trong những tiến bộ với sự phát triển của các quả đạn trong những năm qua.
Tôi đã nói rằng vỏ như một phần của môi trường
và các biến shell trong C vỏ là, với một số trường hợp ngoại lệ, bộ riêng biệt.
Bạn có thể thiết lập một biến môi trường và biến vỏ có cùng tên.
Họ sẽ có các biến khác nhau, họ có thể có giá trị khác nhau.
Thay đổi giá trị của một sẽ không thay đổi giá trị của người khác.
Các biến này được tất cả các đánh giá với dấu $ - $ a, $ bất cứ điều gì.
Vì vậy, nếu bạn có điều này? Bạn có biết một trong những bạn nhận được?
Trong các thử nghiệm của tôi, tôi đã biến vỏ,
nhưng điều này là không phải tài liệu và bạn không thể dựa vào đó.
Vì vậy, tôi yêu cầu bạn, đang tạo ra vỏ và biến môi trường
với cùng tên một ý tưởng tốt? Số rồi.
Những trường hợp ngoại lệ lớn trong đó môi trường và vỏ biến là gì
được liên kết với nhau?
Có những 4.
Thư vốn biến môi trường hạn,
bao biến hạn trong chữ nhỏ, loại thi đua thiết bị đầu cuối.
Tôi chỉ sẽ đi qua đây và tôi sẽ làm tiếng vang, một lệnh hữu ích ở đây,
$ $ HẠN hạn. Và ở đó.
xterm là một loại thiết bị đầu cuối cho các cửa sổ hiển thị trong cửa sổ System x.
xterm-màu sắc là một biến thể của mà cho phép màu sắc khác nhau.
Tại sao chúng ta xác định những? Đây là những gì tốt không?
Lệnh sắp xếp lại màn hình giống như các biên tập viên
gửi trình tự đặc biệt, được gọi là trình tự thoát ra,
để một thiết bị đầu cuối hoặc một cửa sổ để sắp xếp lại nó và vv.
Những trình tự khác nhau cho các loại thiết bị đầu cuối.
Điều này cho nó mà những người sử dụng.
Đôi khi có những vấn đề đó.
Bạn có thể muốn thay đổi điều đó.
Nếu điều này không làm việc, đôi khi các loại thiết bị đầu cuối được thiết lập sai,
bạn có thể sửa chữa nó bằng việc xác định lại biến hạn.
Trong những trường hợp này, thay đổi một biến, các biến môi trường hoặc biến vỏ,
nên thay đổi một khác.
Tôi đã phát hiện ra thông qua kinh nghiệm mà thay đổi hạn bằng chữ in hoa
không phải luôn luôn thay đổi vỏ biến hạn bằng chữ nhỏ.
Đây là một lỗi.
Tôi không biết nếu đó là luôn luôn đúng. Phần lớn thời gian nó không phải là sự thật, nhưng nó có thể được.
Vì vậy, nếu bạn thực hiện một sự thay đổi, chỉ cần kiểm tra mà ra.
Nó không phải là thường xuyên mà bạn cần thay đổi giá trị đó, nhưng một lần trong một thời gian bạn làm.
Môi trường USER biến.
Một lần nữa, biến môi trường bằng chữ in hoa, bao biến bằng chữ nhỏ.
Đây là tên người dùng của bạn.
Nó chỉ trong những trường hợp rất đặc biệt
mà bạn sẽ muốn thay đổi điều đó.
Nếu tên của bạn là một người khác, nó có thể ném tất cả các loại vật tắt.
Thư mục, thư mục nhà của người dùng.
Một lần nữa, bạn sẽ không muốn thay đổi điều đó.
Thông báo trong tất cả các trường hợp này và một trong đó chúng tôi về để trang trải, biến con đường,
biến môi trường là bằng chữ in hoa và biến vỏ ràng buộc là chữ thường.
Nếu bạn thay đổi một, bạn nên thay đổi khác.
Loại ràng buộc không thể được thành lập như là bạn không thể liên kết 2 biến,
khác hơn những 4, và những ràng buộc trong các biến này không thể được hoàn tác,
bạn không thể tách chúng ra.
Vì vậy, những 4 cặp biến bị ràng buộc.
Họ sẽ luôn luôn được. Những người khác không có.
Ngoài ra, nó sẽ có thể tạo ra các biến có cùng tên
các loại đối diện.
Bạn có thể làm cho một thuật ngữ biến vỏ bằng chữ nhỏ
hoặc một môi trường hạn biến bằng chữ in hoa.
Các biến sẽ được độc lập của các biến kết hợp
và họ sẽ độc lập với nhau.
Tôi không thể tưởng tượng tại sao bạn sẽ làm điều đó, trừ khi bạn muốn gây nhầm lẫn người dân.
Điều này một ở đây, biến con đường, điều này là một thực sự quan trọng.
Một điều ở đây là có thể có trường hợp
các biến với tên ghép đôi tương tự mà không bị ràng buộc với nhau.
Có thể có các biến, SHELL và vỏ, vốn nhỏ và chữ cái.
Dựa trên tên đó, bạn không biết nếu biến đó là một biến vỏ
hoặc một biến môi trường, và họ không bị ràng buộc với nhau.
Vì vậy, loại tên cặp nào không bao hàm các biến bị ràng buộc.
Biến con đường, mà tôi đã được thấy trước,
là một danh sách các tên đường dẫn trong đó vỏ trông cho các lệnh.
Hãy qua cửa sổ này ở đây và chúng tôi sẽ làm echo $ PATH, chữ in hoa -
biến môi trường - echo $ con đường, chữ nhỏ - bao biến.
Chú ý rằng danh sách các thư mục là như nhau. Đây là những ràng buộc.
Thay đổi một, bạn thay đổi khác.
Trong biến môi trường các yếu tố được phân cách bằng dấu hai chấm. Chú ý rằng.
Các biến vỏ được ngăn cách bởi khoảng trắng.
Biến môi trường này là một chuỗi duy nhất.
Biến vỏ là một mảng.
Bourne vỏ không có mảng.
Bash không, nhưng điều này đã là một phần cố định của vỏ.
Đây là một chuỗi duy nhất và không phải là một mảng.
C-shell luôn luôn có mảng.
Các mảng được dễ dàng hơn để làm việc với.
Bạn có thể tham khảo các bộ phận của nó.
$ Path để tiếng vang [1] và tôi nhận được / usr / bin, yếu tố đầu tiên.
Một lần nữa, hãy nhớ đô la dấu hiệu tượng trưng cho phần tử cuối cùng của danh sách lịch sử.
Những gì xảy ra ở đó? Nó đã cố gắng để tìm thấy ký hiệu đô la như một biểu tượng biến.
Tôi thoát khỏi nó. Rất tiếc. Nó sẽ không mất một trong hai.
Một số những điều này không làm việc rất tốt.
Có lẽ chúng ta sẽ chỉ để lại mà ra.
Asterisk đề cập đến toàn bộ điều, nhưng đó là những gì bạn nhận được nếu bạn không chỉ định một phần tử.
Một cách khác mà các biến mảng có thể được thao tác,
số yếu tố có 7 yếu tố.
Ở đây chúng ta đặt dấu thăng trước tên biến.
Dưới đây là một số khác. Đặt một dấu chấm hỏi đó.
Đó là một giá trị hợp lý. Chỉ ra rằng biến tồn tại.
Đó là một cách khác để làm việc với các biến.
Rằng, bằng cách này, không phải là một biến mảng.
Đó có thể là bất kỳ biến.
Và nếu tôi làm, không có biến như vậy và tôi nhận được một 0.
Một điều ít có về đánh giá biến.
Trở lại này ở đây, nếu vì một lý do bạn muốn làm việc với điều này
chứ không phải là làm việc với mảng, biến vỏ,
có lệnh mà có thể tách riêng những điều này dựa trên đại tràng.
Trong thực tế, nếu bạn đang đi để được làm điều này trong Bash shell có thể,
một số loại của một kịch bản, đó sẽ là làm thế nào bạn có thể sẽ làm điều đó.
Nhưng trong C-vỏ nó dễ dàng hơn để sử dụng mảng.
Trong Bourne shell, các biến được chỉ định bởi một biểu thức duy nhất như thế này,
giống như cách bạn có thể gán một biến trong một ngôn ngữ lập trình,
và đây có phải là không có khoảng trống.
Đó là cần thiết rằng đó là chỉ 1 chuỗi.
Trong vỏ Bourne loại, tất cả các biến là các biến vỏ.
Biến môi trường là một tập hợp con của các biến shell.
Chúng được phân biệt với các biến không môi trường bằng cách xuất khẩu.
Các lệnh để làm điều đó là xuất khẩu, như xuất khẩu PRINTER.
Nếu chúng ta xác định một biến như vậy,
nếu chúng ta muốn có một lệnh in để tìm thấy nó, nó sẽ phải là một biến môi trường,
và đó là cách chúng tôi làm cho nó một.
Ở đây có điều gì đó loại khó hiểu.
Biểu hiện này, xuất khẩu đến môi trường, xuất phát từ khái niệm vỏ Bourne này,
và chưa biểu hiện được sử dụng trong mô tả của C-vỏ,
nơi không có lệnh như xuất khẩu.
Nếu bạn chỉ nói xuất khẩu của chính nó, bạn sẽ có được một danh sách các xuất khẩu -
Vì vậy, nếu tôi chỉ xuất khẩu ở đây, không có điều đó.
Được rồi, có chúng tôi đi.
Những điều này, bằng cách này, cũng được xác định bằng vỏ.
Tôi không xác định bất kỳ trong số này bằng bản thân mình.
Vỏ làm tất cả các loại vật của chính nó.
Nó nên làm những việc tự động.
Trong Bash hoặc Korn shell, bạn có thể chạy một lệnh như thế này,
mà cả hai sẽ cung cấp cho một biến một giá trị và xuất khẩu nó trong 1 lệnh.
Trong vỏ Bourne họ có được lệnh riêng biệt như xuất khẩu một.
Đây là một khía cạnh đó là khó hiểu.
Lệnh set trong C-vỏ định nghĩa biến
và không có đối số cho bạn biết giá trị của các biến là.
Trong Bash shell, lệnh thiết lập không có đối số làm điều tương tự,
nhưng với lập luận nó một cái gì đó hoàn toàn khác nhau.
Vì vậy, đây là những lập luận khác nhau ở đây.
Một số trong số này là biến môi trường, một số trong số đó là các biến shell.
Tất cả đều là các biến shell thực sự. Một số những người đang có biến môi trường.
Lệnh set với các đối số có thể được sử dụng để hoạt động
trên các thông số vị trí cho một kịch bản,
mà là một cách để nhận được tất cả cùng một lúc.
Chúng ta có thể không thực sự đi vào ngày hôm nay.
Nó cũng có thể được sử dụng để thay đổi hành vi vỏ.
Đặc biệt là trong Bash có các biến mà sẽ xác định cách cư xử vỏ.
Sau đó cũng chỉ là một câu lệnh này bạn có thể thấy, lệnh này.
Sắp chữ theo sau các biến và các loại biến được sử dụng trong vỏ Korn và Bash.
Nó không phải là bắt buộc nhưng nó có thể được sử dụng để hạn chế các giá trị của các biến,
có thể hữu ích để ngăn chặn các lỗi, và nó khá phổ biến.
Vì vậy, tôi chỉ nói đến là trong trường hợp bạn nhìn thấy nó ở đâu đó.
Lệnh nơi.
Nhớ tôi đã đề cập trước đó, nơi lệnh trong C-vỏ,
mà có thể cho bạn biết vị trí của một tên đường dẫn lệnh.
Đây là sự thay thế lệnh.
Bạn nên tìm một nơi nào đó trên bàn phím của bạn một nhân vật trông như thế này.
Vị trí trên bàn phím sẽ thay đổi.
Chúng tôi đã gọi nó là backquote. Đó là về kích thước của một báo giá.
Nó đi từ phía trên bên trái để giảm ngay.
Ở đây trên bàn phím máy Mac của tôi nó ở góc trên bên trái.
Nhân vật có thể được sử dụng để thực thi một lệnh trong một lệnh.
Nếu bạn có một biểu hiện bên trong backquotes,
biểu hiện đó là một lệnh, nó chạy.
Đầu ra của lệnh
sau đó được thay thế cho các biểu hiện toàn bộ backquote
bên trong một lệnh dài hơn sau đó chạy với đầu ra
như là một phần của chuỗi của các đối số và vv.
Đây là một câu lệnh trong đó sử dụng.
Hãy chứng minh các hoạt động ở đây.
Chúng ta hãy đi lên đây, đưa ra các backquotes.
Một kiểm soát được tôi đến đầu dòng với cú pháp chỉnh sửa Emacs.
Cho đến nay các tên đường dẫn là gì, nơi nào,
nhưng khi tôi làm điều đó như thế này, nó sau đó cắm trong đó danh sách các tên đường dẫn
ở vị trí của biểu thức này backquote toàn bộ và chạy ls-l trên chúng.
Loại tiện lợi, phải không?
Vì vậy, đó là một điều gọn gàng. Đó là cách làm việc backquotes.
Bây giờ hãy đi xuống một chút nữa.
Đây là bí danh. Tôi thực sự sử dụng các.
Tôi sẽ cố gắng để có được trong này với 1 hoạt động chỉnh sửa.
Được rồi.
Bây giờ chúng ta hãy xem làm thế nào những định nghĩa ra.
bí danh LWH nói với tôi như thế nào nó được định nghĩa.
Nhận thấy nó chỉ này, nhưng có dấu ngoặc kép bên ngoài đã được đưa ra
và dấu chấm than được lấy ra.
*, Danh sách đầy đủ của tất cả các đối số.
Trong một định nghĩa bí danh nó sẽ được áp dụng trở lại nơi mà tôi sử dụng này.
LWH ksh bash. Được rồi.
Xem làm thế nào mà làm việc? Nó tiết kiệm cho tôi một số cách gõ.
Chúng ta hãy đi lên một chút chỉ để đề cập đến một cái gì đó khác ở đây.
Nhận thấy ở đây những vỏ khác nhau. Tôi có nên nói điều này trước khi.
Các csh có 2 trên đây và do đó, / bin / tcsh.
Chúng ta có thể thiết lập bằng các phương tiện khác mà những người thực sự cùng một tập tin.
Nhớ tôi đã nói nếu bạn gõ sh bạn nhận được bash.
Loại này và bạn có được điều này.
Nhưng những người không liên quan. Những người có những người duy nhất ở đó.
Và điều này không phải là các loại tập tin mà có thể gọi nhau.
Vì vậy, đó là những tập tin riêng biệt; những C vỏ là cùng một tập tin.
Xuống đây, một trong những khác ở đây, bí danh này,
lưu ý đó là chạy lệnh này, tập tin.
Bí danh mà chạy đó. Tập tin cho bạn biết kiểu của một tập tin.
Vì vậy, FWH ksh bash. Được rồi.
Đó là kết quả của lệnh tập tin.
Tôi không biết nếu bạn biết điều này có nghĩa là ở đây,
Mach-O nhị phân phổ quát với 2 kiến ​​trúc.
Có 2 loại bộ vi xử lý có thể có trong Mac,
và một số chương trình được viết để có thể chạy với cả hai,
và lệnh tập tin có thể xác định rằng, đó là những điều này có nghĩa là.
Cả hai của những tập tin được viết theo cách đó.
Vì vậy, chúng ta thấy bí danh hoạt động, chúng tôi xem như thế nào backquote hoạt động,
chúng tôi xem như thế nào ls tập tin thực tế hoặc tập tin hoạt động.
Điều này có thể không làm việc. Hãy thử ", nơi mà" và "LWH nơi". Được rồi, chúng ta hãy cố gắng đó.
nơi nơi.
mà là một vỏ tích hợp.
Nhớ trước đó chúng tôi cho thấy Bash không có nơi.
Nếu bạn gõ nơi trong Bash shell, bạn nhận được một thông báo lỗi.
Nó chỉ là một phần của vỏ chứ không phải là một lệnh riêng biệt.
Điều gì xảy ra nếu tôi gõ LWH tìm kiếm ở đâu? Xem những gì xảy ra ở đó.
Chạy nơi đâu, có đầu ra này, và sau đó cố gắng chạy ls
như l vào nơi là một vỏ tích hợp.
nơi là có, nhưng những người khác không tồn tại.
Không có những tồn tại, thực sự.
Vì vậy, điều đó không luôn luôn làm việc, và nó cũng minh họa một số điều
không làm hoàn toàn những gì bạn có thể nghĩ.
Chúng ta hãy đi xuống một chút nữa đây.
Ở đây là trong Bash. Đó cũng là sự thay thế lệnh như backquote.
Nhưng không giống như backquote, nó sử dụng kiểu biến này.
Có một số các biểu thức bắt đầu bằng một ký hiệu đô la,
và trong khi đây không phải là biến, họ vay mượn việc sử dụng các ký hiệu đô la
để chỉ một biểu hiện của một số loại.
Có thể được bao quanh bởi dấu ngoặc đơn hoặc dấu ngoặc hoặc dấu ngoặc kép,
trong đó có một mục đích khác nhau.
Ngoặc đơn ở đây là một sự thay thế lệnh giống như backquotes.
Dấu ngoặc kép thực sự là một phép toán số học.
Có cú pháp khác, các hoạt động khác.
Cú pháp backquote có sẵn trong Bash.
Tuy nhiên, đây là một lợi thế. Nó dễ dàng hơn để đọc và nó cho phép làm tổ.
Bạn có thể có trong $ (lệnh) lệnh khác,
một cái gì đó giống như -
Tôi nhận được một danh sách đó.
Điều đó sẽ làm việc nếu tôi có backquote cũng có.
Nếu tôi muốn làm một cái gì đó giống như -
Có thể bạn sẽ không thực sự sử dụng lệnh này,
nhưng thay lệnh nội bộ này vang tên của tất cả các tập tin bắt đầu bằng một,
sau đó này chạy ls-l trên các tập tin,
và sau đó một này chỉ lặp lại đầu ra.
Bạn có lẽ sẽ không làm điều này, bạn chỉ muốn làm echo hoặc ls,
nhưng điều này minh họa cách làm tổ của các lệnh hoạt động.
Vì vậy, chỉ một tính năng ở đây.
Tôi đã đề cập điều này trước đó, rằng khi bạn có nơi ở C-vỏ,
loại công trình trong vỏ Bourne loại để định vị các lệnh.
Được xây dựng trong lệnh, chỉ là những gì tôi đã nói đó.
Lệnh là một phần của vỏ, giống như nơi.
Khi vỏ thực thi một lệnh như ls, nó nằm nó thông qua các con đường,
tìm thấy nó trong một số thư mục nào đó,
đọc mà vào bộ nhớ, tạo ra một lớp vỏ mới,
đọc lệnh ls hoặc bất cứ điều gì vào vỏ
nơi các biến môi trường đã được đặt,
và sau đó nó chuyển thực hiện với nó.
Được xây dựng trong lệnh, mã lệnh mà là bên trong vỏ,
do đó, các vỏ chỉ bắt đầu thực hiện một phần của mã riêng của mình.
mà là một lệnh như vậy. Nó thực sự được nhanh hơn.
Nó không phải đọc bất cứ điều gì trong bộ nhớ, nó đã có trong bộ nhớ.
Lệnh được xây dựng trong luôn luôn được ưu tiên hơn các lệnh có cùng tên.
Lệnh có trong thư mục trong đường dẫn có thể có cùng tên,
lệnh trong thư mục khác nhau, các tập tin trong thư mục khác nhau.
Một trong đó xảy ra trước đó trong con đường là một trong những bạn sẽ nhận được.
Nếu có một lệnh được xây dựng trong, bạn luôn luôn nhận được nó.
Không có cách nào để cho nó một ưu tiên thấp hơn một lệnh trong đường dẫn.
Nếu bạn muốn nhận được rằng lệnh đường dẫn, bạn có thể gõ tên đường dẫn đầy đủ.
Nếu có một lệnh, nơi trong đường dẫn ở đâu đó,
bạn có thể gõ / bin / ở đâu và bạn sẽ nhận được nó.
Nếu bạn không muốn gõ toàn bộ tên đường dẫn, bạn có thể xác định một bí danh.
Trong thực tế, nếu bạn đã cho bí danh cùng tên với các lệnh tích hợp, nó sẽ làm việc
vì định nghĩa bí danh được đánh giá
trước khi vỏ xác định rằng đó là một lệnh được xây dựng trong đó phải được thực hiện.
Sau đó điều này được nhiều hơn một chút phức tạp với một số lệnh ở đây.
Trường hợp của một số lệnh thực sự được xây dựng trong các lệnh và trong các con đường.
Một trong số đó là tiếng vang, lệnh tôi chỉ được sử dụng một thời gian ngắn trước trong những ví dụ.
Echo là một lệnh trong đường dẫn và nó trong mỗi vỏ.
Họ không nhất thiết tất cả các hành xử theo cùng một cách.
Ban đầu nó được một lệnh duy nhất trong con đường.
Nó được xây dựng vào vỏ sau.
Bởi vì có những lựa chọn phụ thuộc vào môi trường
và các tùy chọn dòng lệnh, các lệnh được xây dựng trong
được viết để hoạt động giống như các lệnh đã được trong con đường,
nó không chắc họ đã được viết theo cách đó
nếu lệnh đã không đã được viết cho các con đường.
Vì vậy, đây có tác dụng phụ. Lịch sử của nó có tác dụng ở đây.
Có những lựa chọn đó.
Ngoài ra còn có một tùy chọn được định nghĩa bởi một biến trong tcsh gọi là echo_style.
Đó là một trong các biến này có thể thay đổi cách mà vang vọng công trình.
Có những trường hợp khác, trong đó bạn có thể gán một biến
thay đổi cách mà các hoạt động vỏ, bao gồm một lệnh tích hợp, hoạt động.
Nó sẽ không ảnh hưởng đến bất cứ điều gì khác
kể từ khi các lệnh khác không có quyền truy cập vào các biến vỏ,
chỉ các biến môi trường.
Nhưng hoạt động vỏ có thể đọc các biến shell.
Điều đó sẽ không làm việc cho csh. Đó chỉ là tcsh. Đó là một trong những cải tiến.
Phân tích cú pháp có trình tự khi đánh giá metacharacters,
khi đánh giá các biến, bí danh, tài liệu tham khảo lịch sử.
Có một trình tự cụ thể cho những việc này.
Nếu có điều trong một trình tự cụ thể
và được cho cái gì đó là một biểu hiện của một loại
mà đã được đánh giá, nó sẽ không đánh giá nó một lần nữa.
Nếu nó được nó, sau đó nó sẽ chỉ cần vượt qua trên các nhân vật.
Vì vậy, nếu đánh giá của một số biểu hiện như thay thế lệnh
hoặc biến hoặc bất cứ điều gì đưa đến một biểu hiện
mà bạn sẽ muốn được đánh giá,
rằng sẽ chỉ làm việc nếu đánh giá xảy ra sau đó trong chuỗi.
Tôi hy vọng tôi là rõ ràng ở đó.
Rằng trình tự phân tích, một hoạt động trong C-vỏ,
là không giống nhau cho xây dựng trong các lệnh như nó là dành cho không được xây dựng trong lệnh.
Tôi không chắc chắn về Bash có.
Ví dụ, nếu một biến vỏ tạo ra một tài liệu tham khảo lịch sử,
nó có thể sẽ không trở lại trong lịch sử.
Nó sẽ chỉ nhận được các dấu chấm than.
Trong thực tế, chúng tôi chỉ có thể cố gắng mà ra ngay bây giờ.
thiết lập một = và chúng tôi sẽ phải đặt này trong đó.
Oh, chờ đợi. Xin lôi. Tôi đã làm điều này trong Bash. Tôi muốn làm điều đó ở đây.
Nhìn thấy, vì vậy nó đã không đánh giá rằng tài liệu tham khảo lịch sử
bởi vì nó đã được qua các điểm đánh giá biểu thức lịch sử
khi đánh giá các biến.
Vì vậy, đó là 1 tác dụng của phân tích cú pháp.
Và một lần nữa, được xây dựng trong các lệnh không được thực hiện theo cùng một cách.
Được rồi. Chúng ta hãy đi đến kế tiếp đây.
Điều này có thể dùng để 1 dòng, nhưng nó làm cho nó dễ dàng hơn để đọc.
Điều đó làm những gì?
Bạn có thể nhớ lại rằng chúng ta có thể đánh giá dấu hoa thị như ký tự đại diện tên tập tin,
và có những ký tự đại diện tên tập tin khác như dấu chấm hỏi và biểu khung.
Đó là loại đánh giá được gọi là globbing.
thiết lập noglob vào đầu của lệnh này cho biết không làm điều đó.
noglob unset nói trở lại làm điều đó.
Lưu ý rằng bộ glob sẽ không có hiệu lực đó.
Trong ngôn ngữ bình thường, thiết lập glob hoặc noglob unset dường như là tương đương,
nhưng ở đây nó không phải là. Nó noglob unset.
Bây giờ Tset. Tset đứng cho bộ thiết bị đầu cuối.
Nó không được sử dụng thường xuyên, nhưng trước khi hệ thống có cửa sổ trở nên có sẵn
và bạn đã có một thiết bị đầu cuối duy nhất, bạn có thể phải xác định loại.
Và nếu một cái gì đó đang đến trên một Ethernet hoặc từ mạng,
bạn có thể muốn nói đó là một vt100.
VT100 là loại một tiêu chuẩn trong kinh doanh thiết bị đầu cuối. Nó xuất phát từ thiết bị đầu cuối tháng mười hai.
Nếu bạn chỉ làm quay số - nhận thấy rằng? Điều này đi lại một cách, phải không?
Vì vậy, nếu chúng ta chỉ cần Tset trên đây,
nếu tôi chỉ làm Tset, nó đặt lại thiết bị đầu cuối của mình, nhưng bạn không nhìn thấy bất cứ điều gì.
Nó đã không thực sự thay đổi bất cứ điều gì.
-S
Được rồi.
HẠN setenv xterm màu.
Chúng tôi đã biết rằng thuật ngữ đã được thiết lập theo cách đó, do đó đã không thay đổi.
Đó là cách chúng tôi muốn làm điều đó.
Nhưng chú ý rằng lệnh, Tset-s, chỉ ra các lệnh này. Nó đã không chạy chúng.
Nó không chạy các lệnh này, nó xuất chúng.
Vì vậy, đây được dự định để sản xuất các lệnh mà sau đó sẽ được chạy.
Bạn nhớ các lệnh trong tập tin mà tôi chỉ cho thấy bạn đã có một Q trong đó.
Vì vậy, hãy làm điều đó.
Q ngăn chặn một số đầu ra, nhưng điều đó không quan trọng ở đây, bạn có thể thấy.
Tôi chỉ làm điều đó cho bạn thấy rằng nó không quan trọng.
Đây là trong cú pháp backquote.
Lưu ý các backquote đây, backquote đây.
Tôi bỏ qua những điều này ở đây.
Đây là những trường hợp nói cho nó biết phải làm gì
trong trường hợp của các loại đặc biệt của thiết bị đầu cuối -
Ethernet, mạng, quay số, những gì có bạn.
Nó không quan trọng ở đây bởi vì chúng ta không thực sự làm bất kỳ những điều này.
Tôi chỉ minh họa lệnh.
Nếu tôi làm điều này với backquote, những gì tôi sẽ nhận được?
Cũng nhận thấy ở đây rằng điều này bao gồm các noglob bộ và noglob unset,
do đó, những hiện đang dôi dư trong định nghĩa.
Đó không phải luôn luôn đúng, nhưng bây giờ họ đang có trong lệnh này.
Nhưng hãy xem những gì sẽ xảy ra nếu tôi làm điều đó
và đi đến đầu dòng với điều khiển A và tôi làm điều đó.
Được rồi, hãy đặt: Lệnh không tìm thấy. Đó là loại lẻ, phải không?
thiết lập là một lệnh nổi tiếng. Đó là một phần của vỏ.
thiết lập: Lệnh không tìm thấy? Tại sao vậy?
Hmm. Vâng, chúng ta hãy nghĩ về điều này.
Nó đang chạy một lệnh backquote thay thế,
và xảy ra ở một phần nào đó của chuỗi các phân tích cú pháp lệnh.
thiết lập là một lệnh được xây dựng trong.
Vì vậy, do thời gian nào đó lệnh thay thế,
nó đã nhận được qua các điểm xác định được xây dựng trong lệnh.
Vì vậy, nó xử lý các thiết lập như thể nó là một lệnh trong đường dẫn.
Không cần phải nói, nó không tìm thấy nó và bạn nhận được một lỗi.
Tốt. Có một ví dụ về trình tự phân tích.
Và chúng ta làm gì về điều đó?
Chú ý lệnh này rất thú vị ở đây, eval.
Tôi tự hỏi điều gì đó không.
Nếu bạn nhìn vào hướng dẫn - và chúng ta hãy làm điều đó
để hiển thị như thế nào khó hiểu các hướng dẫn sử dụng là -
người đàn ông tcsh, bối rối dẫn sử dụng, tìm kiếm những điều ở đây không phải là dễ dàng cả.
Ở đây chúng tôi đi, eval arg, vì vậy chúng tôi có thể có 1 hoặc nhiều đối số
và có một danh sách những thứ đó.
Xử lý các đối số là đầu vào cho vỏ
và thực hiện các lệnh kết quả trong bối cảnh của vỏ hiện hành.
Điều này thường được sử dụng để thực hiện các lệnh tạo ra như là kết quả của lệnh
hoặc thay thế các biến bởi vì phân tích xảy ra trước khi những thay thế.
Rất tốt.
Và ở đây họ thậm chí còn đề cập đến lệnh Tset cho việc sử dụng mẫu
như một trong những tôi chỉ cho các bạn.
Bây giờ tôi có để có được cửa sổ trở lại một nơi hữu ích.
Hãy ở đây và chúng ta sẽ thấy eval được sử dụng ngay trước đó.
Vì vậy, chúng ta hãy xem những gì sẽ xảy ra nếu chúng ta đặt - ở đây chúng tôi đi lên với các mũi tên để lệnh
và kiểm soát A đến đầu, eval.
Được rồi, vì vậy nó hoạt động.
Khi bạn làm eval, phải mất những gì đến sau khi nó và làm cho nó một lệnh.
Điều này cho phép bạn phân tích về cơ bản nó hai lần.
Phần ở đây chạy lệnh này trong backquotes,
được đầu ra.
Đầu ra là nghĩa vụ phải được chạy như là các lệnh ở đây như thế này
tại này và điều này.
Vì vậy, các lệnh đều có ở đây theo thứ tự này,
nhưng được xây dựng trong các lệnh và nó không thể nhận được chúng ngay lập tức.
Vì vậy, chúng tôi đi đến eval, eval chọn đó lên, bắt đầu toàn bộ điều trên một lần nữa, và nó hoạt động.
Một ví dụ cả hai backquoting, eval, phân tích, hậu quả của việc phân tích,
và một lệnh mà có lẽ rất ít sử dụng cho bạn hiện nay.
Được rồi. Được rồi, umask.
Hãy xem xét lệnh này đây, umask 022. Tôi tự hỏi điều gì đó không.
Chúng ta hãy chỉ cần gõ umask không có gì sau nó. 22. Được rồi.
022 và làm điều đó một lần nữa.
Như bạn có thể đoán, umask không có đối số cho bạn biết mặt nạ hiện hành;
umask với các đối số làm cho nó có, nhưng đó là một trong tôi đã có.
Không 022 có nghĩa là gì?
Đây là những sự bảo vệ ở đây cho một tập tin.
Họ xác định ai được phép đọc hoặc viết hoặc thực hiện các tập tin.
Bảo vệ cũng được gọi là quyền truy cập.
R là viết tắt của đọc, w để viết,
và x, đó là không có mặt ở đó, là viết tắt của thực thi.
Có 3 loại đó.
3 yếu tố cuối cùng là trong danh mục của người dùng. Những áp dụng đối với tôi, người sử dụng.
Những 3 ở đây áp dụng cho nhóm.
Các tập tin thuộc về 1 nhóm, người sử dụng có thể thuộc về một số nhóm,
nhưng nếu người dùng là trong nhóm mà tập tin này thuộc về,
sau đó các biện pháp bảo vệ sẽ được áp dụng với anh ta nếu anh ta không phải là người sử dụng.
Và điều này là tất cả mọi người khác.
Các loại này là loại trừ lẫn nhau.
Sự bảo vệ người sử dụng áp dụng với anh ta,
sự bảo vệ nhóm áp dụng đối với thành viên của nhóm khác với người sử dụng,
và các biện pháp bảo vệ khác chỉ áp dụng cho người khác hơn so với người sử dụng và các thành viên trong nhóm.
Nếu có một r hoặc aw hoặc x, có nghĩa là bảo vệ được cấp.
Nếu có một dấu gạch ngang, nó có nghĩa là nó không phải là.
Thực tế, có những thứ khác mà có thể được đặt tại đây, bên cạnh đó,
mà tôi sẽ không nhận được vào ngay bây giờ.
Umask định nghĩa một mặc định cho các tập tin mà bạn tạo ra.
Và như một mặt nạ, về cơ bản nó nói các bit mà bạn không đặt.
Làm thế nào đã trở thành bit này?
Nếu bạn nghĩ rằng mỗi khi một số bát phân,
đây là chút 1s, đây là 2s, đây là 4s.
Vì vậy, từ 0 đến 7
sẽ mô tả những sự kết hợp của r của, w, và x của bạn có cho những 3
và sau đó một số lượng tương tự cho những điều này và sau đó cho các.
Vì vậy, có nghĩa là 022 0 cho khác, 2 nhóm, 2 cho người sử dụng.
Nhưng đây là một mặt nạ. Mặt nạ là những gì bạn không có.
Tôi xin lỗi. Tôi chỉ cho bạn những điều theo thứ tự sai.
Đó là lần đầu tiên 3. Những 3 là người sử dụng, những 3 là nhóm, những 3 là khác.
Xin lỗi tôi đã cho bạn những sai thứ tự.
0, đó là lần đầu tiên của những người, không hiển thị giá trị,
nhưng nếu một số không có, đó là một 0.
Điều đó có nghĩa tất cả 3 trong số này sẽ được cho phép.
Chú ý rằng trong một này đặc biệt x không được phép.
Lý do là vỏ có khả năng xác định
xem một tập tin phải được thực hiện hay không.
Vì đây không phải là một tập tin thực thi, nó đã không thiết lập x.
2 phương tiện mà cho phép ghi thể loại thứ hai ở đây,
một ở giữa, bị từ chối.
Vì vậy, một lần nữa, đó là những điều mà nó bị từ chối.
Vâng, x được cho phép nhưng nó không phải là ở đây bởi vì nó không thực thi
và tương tự cho những người khác.
Vì vậy, đó là một umask chung.
Một trong những phổ biến là 700 - cung cấp cho mình tất cả mọi thứ và không ai khác bất cứ điều gì.
Và có những khả năng khác.
Tôi sẽ quay trở lại đó. Bằng cách sử dụng lịch sử tôi có thể tìm kiếm lại cho rằng, để có LWH.
Được rồi. Vì vậy, ở đây, đó là những vỏ.
Bash, chủ sở hữu là người tài khoản hệ thống, có thể làm tất cả mọi thứ.
Nhóm và mọi người khác có thể làm đọc hoặc thực hiện nhưng không viết.
Điều này thậm chí không cho phép chủ sở hữu để viết thư cho nó.
Nếu chủ sở hữu muốn viết thư cho nó, các tài khoản hệ thống,
ông sẽ phải thay đổi bảo vệ đầu tiên.
Nhưng một lần nữa, umask đặt mặc định bằng cách che nó,
bằng cách chỉ ra các bit sẽ không được thiết lập.
Điều này thường là một trong các tập tin khởi tạo của bạn, đó là cshrc cho C-shell.
hoặc hồ sơ cá nhân cho vỏ Bourne loại..
Nó có thể được ở nơi khác cũng có thể nếu có những tập tin khởi tạo khác trên hệ thống.
Dù sao, đó là umask.
Có điều gì đó loại lẻ ở đây,
và đó là, tại sao lại có một lệnh duy nhất cho điều này?
Nếu tôi được viết bài này, tôi sẽ làm cho nó một biến, umask = một số giá trị.
Tại sao lại có một toàn bộ lệnh chỉ dành cho mục đích này?
Lý do là điều này chỉ quay ngược lại nguồn gốc của Unix.
Unix đã được chỉ là một số dự án lập trình tại Bell Labs vào đầu năm 1970.
Mọi người chỉ cùng nhau cho chương trình.
Họ không bao giờ dự định nó để trở thành một hệ điều hành trên toàn thế giới.
Những người khác nhau viết các phần khác nhau mà không cần suy nghĩ rất nhiều
làm thế nào họ sẽ được sử dụng - chứ không sơ sài.
Và nó đến với nhau như thế, và nó vẫn như thế trong một số khía cạnh.
Vì vậy, phản ánh lịch sử, và vẫn còn có những vấn đề này và các yếu tố kỳ lạ của nó.
Được rồi. Tiếp theo đây.
Như tôi đã viết trước đó, C-vỏ là không thực sự được sử dụng rất nhiều cho các chương trình,
mặc dù nó có thể được.
Nó thực hiện chậm hơn, một lần nữa thương mại-off giữa việc sử dụng tương tác,
trong đó có xử lý hơn liên quan đến tốc độ hơn,
mà có thể làm mà không cần chế biến.
Các tính năng bổ sung thêm vào vỏ Bourne của Korn và Bourne-again vỏ
dường như không làm chậm họ xuống, và tôi không biết tại sao đó là.
Nó chỉ có thể lập trình tốt hơn, nhưng tôi không ở một vị trí để biết.
Tốc độ ở đây thực sự không phải là một việc lớn như vậy, mặc dù nó được đề cập.
Lý do là kịch bản shell thực sự có được khá nhanh.
Nếu có rất nhiều các lệnh như trong một chương trình calculational,
có thể bạn sẽ không làm điều đó trong một kịch bản.
Các hoạt động có khá đơn giản và dễ hiểu.
Những cái mà tôi đã có kinh nghiệm mà là quá chậm
liên quan đến các ứng dụng lặp đi lặp lại các lệnh chậm.
Trước đó tôi đã đề cập các biên tập viên dòng sed. Lệnh đó là chậm.
Nếu bạn thực hiện sed nhiều lần, bạn sẽ nhận được một kịch bản chậm, nhưng nó không phải là vỏ đó là chậm.
Chạy nó trong bao Bourne sẽ không được nhanh hơn nhiều so với chạy nó trong C-vỏ,
mặc dù có thể một số lợi thế đó.
Khả năng lập trình bổ sung, mặt khác,
là lý do quan trọng tại sao bạn sẽ sử dụng vỏ Bourne loại.
C-shell có các tính năng kỳ lạ với nó -
thực tế là bạn không biết nếu một biến là một biến vỏ hoặc một biến môi trường.
Nó có thể rất khó hiểu.
Nó không phải dễ dàng như vậy để viết
chỉ dựa trên kinh nghiệm của bạn về lập trình bằng ngôn ngữ khác.
Tôi nghĩ rằng bạn có thể tìm thấy các vỏ Bourne loại phù hợp hơn với kinh nghiệm của bạn.
Một số kịch bản, mặc dù, có thể là hàng ngàn dòng dài.
Những người mà tôi đã nhìn thấy là được sử dụng để vá hệ điều hành.
Những người có thể thực hiện rất chậm, nhưng bạn không chạy những người rất thường xuyên.
Nó chỉ khi bạn đang làm vá,
và nó chỉ có người quản lý hệ thống những người làm những điều đó,
vì vậy nó không thực sự nhiều của một vấn đề.
Những người có hàng trăm đường dài thực sự thực hiện khá nhanh chóng.
Đề cập đến ở đây, những cải tiến là gì?
Tôi đã đề cập đến một vài trong số họ - mảng, tính toán,
các $ () biểu hiện cho tính toán trong Bash shell,
các loại khác của sự thay thế lệnh.
Có nhiều loại khác nhau của các lệnh kiểm tra
mà bạn có thể làm các xét nghiệm có điều kiện về sự tồn tại của một tập tin hoặc những thứ khác.
Cuối cùng ở đây, lệnh này ở đây.
Điều này làm những gì, và tại sao ai sẽ sử dụng nó?
variablename printenv.
Chúng tôi biết những gì printenv không. Nó cho chúng ta biết giá trị của một biến.
Và variablename printenv sẽ không cho chúng tôi rất nhiều vì không có biến như vậy.
Trống.
Nhưng chúng ta hãy cung cấp cho nó một cái gì đó có ý nghĩa.
Đó không phải là ở đó. Được rồi. Tôi đoán tôi không bao giờ xác định điều đó.
Chúng ta hãy kiểm tra môi trường của tôi.
Đây là một lệnh mà bạn có thể kiểm tra môi trường của bạn.
Có EDITOR cũ tốt, là chúng ta đã thấy trước đây.
Điều đó làm những gì?
Ở đây chúng ta có một biểu hiện backquote.
Hãy nhớ điều này là C-shell.
Vì vậy, EDITOR printenv sẽ cho chúng ta một giá trị của EDITOR. Đó là vi.
Và sau đó nó sẽ thiết lập giá trị đó để biến một, các lệnh đặt.
Vì vậy, bây giờ nếu tôi làm echo $ a, tôi nhận được vi.
Điều đó dường như không quá hữu ích.
Tuy nhiên, nó thực sự không có một mục đích.
Vì chúng ta không biết liệu một biến là một biến vỏ hoặc một biến môi trường
bằng cách sử dụng cú pháp đánh giá ký hiệu đô la, chúng ta có thể sử dụng printenv
để đảm bảo rằng nó là một biến môi trường.
Vì vậy, nếu có một trình soạn thảo biến bao, việc này sẽ không nhận được nó.
Điều này chỉ làm việc với các biến môi trường.
Nếu có một biến vỏ và tôi muốn giá trị của nó,
Tôi sẽ phải tìm cách khác để làm điều đó.
Một cách để làm điều đó sẽ là bằng cách làm bộ và đường ống.
Đây là một trong những metacharacters, ký tự đặc biệt.
Nó sẽ gửi đầu ra của các thiết lập để một cái gì đó khác.
Hãy xem những gì chúng ta có thể tìm thấy ở đó.
Không có gì. Được rồi. Chúng ta hãy xem những gì ở trong đó tất cả cùng nhau.
Đó là echo_style, là tôi đã đề cập trước đây. Được rồi, chúng ta hãy làm điều đó.
Nhớ tôi đã đề cập trước đây, echo_style
xác định cách lệnh echo sẽ chạy.
bsd là viết tắt của phân phối chuẩn Berkeley.
Đây là Berkeley Unix từ những năm 1970.
Đó là một trong những cách mà tiếng vang có thể chạy.
Thiết lập echo_style giá trị đó trong TC-vỏ sẽ gây tiếng vang để hành xử theo cách đó.
Vì vậy, thiết lập nào đó, nhưng chỉ được thiết lập các biến shell.
Nó sẽ không tìm thấy EDITOR, mà không phải là một biến vỏ.
Không có gì.
Vì vậy, đó là một cách để phân biệt chúng.
Nhưng thực tế là bạn phải đi qua một số lệnh lạ như thế
để phân biệt giữa các biến vỏ hoặc biến môi trường
cho thấy loại chất thực tế của C-vỏ cho một số mục đích.
Và bây giờ, cuối cùng và có thể ít nhất, đây là trang người đàn ông.
Những người bạn có thể biết, người đàn ông là ngắn lệnh bằng tay.
Các trang người đàn ông cho vỏ là khó đọc. Họ rất dài.
Chúng được tổ chức theo một cách mà có thể làm cho nó khó khăn để tìm thấy những gì bạn đang tìm kiếm.
Vì vậy, nếu bạn đang tìm kiếm một cái gì đó với một mục đích,
bạn có thể không biết mục đích đó là một biến vỏ hay cái gì khác,
vì vậy bạn có thể không biết được nơi để tìm nó.
Bạn có thể tìm kiếm các chuỗi khác nhau, nhưng các dây thường được lặp đi lặp lại.
Vì vậy nói chung khó đọc.
Chúng tôi chỉ nhìn vào người đàn ông trang TC-vỏ một chút trước khi tìm thấy lệnh eval.
Một số điều đi nhanh hơn.
Một cách tiếp cận là để tìm kiếm một chuỗi.
Bạn có thể sử dụng máy nhắn tin.
Máy nhắn tin có dấu gạch chéo để tìm một lệnh hoặc một chuỗi trong một hoạt động máy nhắn tin.
Người đàn ông theo mặc định sẽ sử dụng máy nhắn tin, hoặc có thể là nhiều hay ít.
Tôi không biết nếu bạn đã quen thuộc với những người, nhưng những người có thể hiển thị tập tin từng chút một.
Tôi đã sử dụng LESS để hiển thị các tập tin cụ thể, chúng tôi đã có ở đây.
Bạn có thể tìm kiếm trong đó.
Bạn có thể thử sử dụng chuỗi tìm kiếm khác nhau.
Cũng trang người đàn ông trong các hệ điều hành khác nhau có thể không được như vậy.
Họ có thể là các trang riêng biệt cho csh và tcsh.
Họ không phải là trên Mac, nhưng họ có thể là nếu những người đang có lệnh riêng biệt.
Nếu sh không thực sự gọi Bash, có lẽ sẽ là một người đàn ông trang riêng biệt.
Một số hệ thống có trang người đàn ông riêng biệt chỉ dành cho C-vỏ được xây dựng trong lệnh.
Đôi khi, nếu bạn muốn đọc một mô tả của một lệnh được xây dựng trong
đó cũng trong đường dẫn, như tiếng vang, bạn cần phải đọc trang người đàn ông trên đó lệnh trên tiếng vang
để xác định như thế nào nó sẽ làm việc như là một lệnh được xây dựng trong
ngay cả khi bạn không gọi lệnh được xây dựng trong.
Đó là một nhược điểm của hệ điều hành nói chung, không chỉ cho các vỏ,
mặc dù đối với vỏ đặc biệt là trang người đàn ông khá dài,
một phần vì họ đã thêm tính năng hữu ích cho họ, có thể là một tích cực.
Được rồi. Được có bất kỳ câu hỏi? Bất kỳ chủ đề mà bạn muốn đưa lên?
Bất cứ điều gì liên quan ở đây?
Vâng, nó rất đẹp nói chuyện với tất cả các bạn.
Tôi hy vọng bạn có một cái gì đó của hội thảo này
mà sẽ có ích cho bạn trong những nỗ lực tương lai của bạn.
[CS50.TV]