Hướng dẫn cho người mới bắt đầu về Shell Scripting Những điều cơ bản
Thuật ngữ shell shell script script được đề cập thường xuyên trong các diễn đàn Linux, nhưng nhiều người dùng không quen thuộc với nó. Học phương pháp lập trình dễ dàng và mạnh mẽ này có thể giúp bạn tiết kiệm thời gian, học dòng lệnh tốt hơn và loại bỏ các tác vụ quản lý tệp tẻ nhạt.
Shell Scripting là gì?
Trở thành người dùng Linux có nghĩa là bạn chơi xung quanh với dòng lệnh. Dù muốn hay không, chỉ có một số điều được thực hiện dễ dàng hơn nhiều thông qua giao diện này hơn là bằng cách chỉ và nhấp. Bạn càng sử dụng và tìm hiểu dòng lệnh, bạn càng thấy tiềm năng của nó. Vâng, chính dòng lệnh là một chương trình: shell. Hầu hết các bản phân phối Linux hiện nay đều sử dụng Bash và đây là những gì bạn thực sự nhập lệnh vào.
Bây giờ, một số bạn đã sử dụng Windows trước khi sử dụng Linux có thể nhớ các tệp bó. Đây là những tệp văn bản nhỏ mà bạn có thể điền vào các lệnh để thực thi và Windows sẽ lần lượt chạy chúng. Đó là một cách thông minh và gọn gàng để hoàn thành một số việc, như chạy các trò chơi trong phòng thí nghiệm máy tính ở trường trung học của bạn khi bạn không thể mở các thư mục hệ thống hoặc tạo lối tắt. Các tệp hàng loạt trong Windows, trong khi hữu ích, là một mô phỏng shell script giá rẻ.
Các kịch bản Shell cho phép chúng ta lập trình các lệnh theo chuỗi và để hệ thống thực thi chúng như một sự kiện theo kịch bản, giống như các tệp bó. Chúng cũng cho phép các chức năng hữu ích hơn nhiều, chẳng hạn như thay thế lệnh. Bạn có thể gọi một lệnh, như ngày tháng và sử dụng đầu ra của nó như là một phần của sơ đồ đặt tên tệp. Bạn có thể tự động sao lưu và mỗi tệp được sao chép có thể có ngày hiện tại được gắn vào cuối tên của nó. Các kịch bản không chỉ là các lệnh. Họ là những chương trình theo cách riêng của họ. Viết kịch bản cho phép bạn sử dụng các chức năng lập trình - chẳng hạn như các vòng lặp 'for', các câu lệnh if / then / other, v.v. - trực tiếp trong giao diện của hệ điều hành. Và, bạn không phải học một ngôn ngữ khác vì bạn đang sử dụng những gì bạn đã biết: dòng lệnh.
Đó thực sự là sức mạnh của kịch bản, tôi nghĩ vậy. Bạn có thể lập trình với các lệnh bạn đã biết, trong khi học các yếu tố chính của hầu hết các ngôn ngữ lập trình chính. Cần phải làm một cái gì đó lặp đi lặp lại và tẻ nhạt? Kịch bản nó! Cần một lối tắt cho một lệnh thực sự phức tạp? Kịch bản nó! Bạn muốn xây dựng một giao diện dòng lệnh thực sự dễ sử dụng cho một cái gì đó? Viết kịch bản!
Trước khi bắt đầu
Trước khi chúng tôi bắt đầu loạt kịch bản của mình, hãy bao gồm một số thông tin cơ bản. Chúng tôi sẽ sử dụng shell bash, mà hầu hết các bản phân phối Linux sử dụng nguyên bản. Bash cũng có sẵn cho người dùng Mac OS và Cygwin trên Windows. Vì nó rất phổ biến, bạn sẽ có thể viết kịch bản bất kể nền tảng của bạn. Ngoài ra, miễn là tất cả các lệnh được tham chiếu tồn tại, các tập lệnh có thể hoạt động trên nhiều nền tảng mà không cần chỉnh sửa.
Việc viết kịch bản có thể dễ dàng sử dụng các đặc quyền của người quản trị và các siêu người dùng của người dùng Cameron, vì vậy tốt nhất bạn nên kiểm tra các tập lệnh trước khi bạn làm việc. Cũng sử dụng thông thường, như đảm bảo rằng bạn có bản sao lưu của các tệp bạn sắp chạy tập lệnh. Điều thực sự quan trọng là sử dụng các tùy chọn phù hợp, như -i cho lệnh rm, để yêu cầu tương tác của bạn. Điều này có thể ngăn ngừa một số sai lầm khó chịu. Như vậy, hãy đọc qua các tập lệnh bạn tải xuống và cẩn thận với dữ liệu bạn có, chỉ trong trường hợp có sự cố xảy ra.
Tại cốt lõi của họ, các kịch bản chỉ là các tập tin văn bản đơn giản. Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào để viết chúng: gedit, emacs, vim, nano Thẻ Danh sách này tiếp tục. Chỉ cần chắc chắn lưu nó dưới dạng văn bản thuần túy, không phải là văn bản phong phú hoặc tài liệu Word. Vì tôi thích sự dễ sử dụng mà nano cung cấp, tôi sẽ sử dụng nó.
Quyền và tên tập lệnh
Các tập lệnh được thực thi như các chương trình và để điều này xảy ra, chúng cần phải có các quyền thích hợp. Bạn có thể tạo các tập lệnh thực thi bằng cách chạy lệnh sau trên nó:
chmod + x ~ / somecrazyfolder / script1
Điều này sẽ cho phép bất cứ ai chạy tập lệnh cụ thể đó. Nếu bạn muốn hạn chế sử dụng nó cho chỉ người dùng của bạn, bạn có thể sử dụng điều này thay thế:
chmod u + x ~ / somecrazyfolder / script1
Để chạy tập lệnh này, bạn sẽ phải cd vào thư mục thích hợp và sau đó chạy tập lệnh như thế này:
cd ~ / somecrazyfolder
./ script1
Để làm cho mọi thứ thuận tiện hơn, bạn có thể đặt các tập lệnh trong thư mục bin bin trong thư mục chính của bạn:
~ / thùng
Trong nhiều bản phân phối hiện đại, thư mục này không còn được tạo theo mặc định, nhưng bạn có thể tạo nó. Đây thường là nơi các tệp thực thi được lưu trữ thuộc về người dùng của bạn chứ không phải cho người dùng khác. Bằng cách đặt các tập lệnh ở đây, bạn có thể chạy chúng bằng cách nhập tên của chúng, giống như các lệnh khác, thay vì phải cd xung quanh và sử dụng tiền tố './'.
Tuy nhiên, trước khi đặt tên cho tập lệnh, bạn nên thực hiện lệnh sau để kiểm tra xem bạn đã cài đặt chương trình có sử dụng tên đó chưa:
mà [lệnh]
Rất nhiều người đặt tên cho các kịch bản ban đầu của họ là thử nghiệm, một và khi họ cố gắng chạy nó trong dòng lệnh, không có gì xảy ra. Điều này là do nó xung đột với lệnh thử nghiệm, không làm gì nếu không có đối số. Luôn chắc chắn rằng tên tập lệnh của bạn không xung đột với các lệnh, nếu không bạn có thể thấy mình làm những việc bạn không định làm!
Hướng dẫn viết kịch bản
Như tôi đã đề cập trước đó, mọi tệp script về cơ bản là văn bản thuần túy. Điều đó không có nghĩa là bạn có thể viết những gì bạn muốn tất cả willy-nilly. Khi một tệp văn bản được cố gắng thực thi, các shell sẽ phân tích chúng để tìm manh mối về việc chúng có phải là tập lệnh hay không và làm thế nào để xử lý mọi thứ đúng cách. Bởi vì điều này, có một vài hướng dẫn bạn cần biết.
- Mọi kịch bản đều có trong phiên bản #! / Bin / bash
- Mỗi dòng mới là một lệnh mới
- Dòng nhận xét bắt đầu bằng dấu #
- Các lệnh được bao quanh bởi ()
Hack Hash-Bang
Khi shell phân tích cú pháp thông qua tệp văn bản, cách trực tiếp nhất để xác định tệp dưới dạng tập lệnh là tạo dòng đầu tiên của bạn:
#! / bin / bash
Nếu bạn sử dụng shell khác, thay thế đường dẫn của nó ở đây. Các dòng chú thích bắt đầu bằng băm (#), nhưng thêm bang (!) Và đường dẫn shell sau đó là một kiểu hack sẽ bỏ qua quy tắc nhận xét này và sẽ buộc tập lệnh thực thi với trình bao mà dòng này trỏ.
Dòng mới = Lệnh mới
Mỗi dòng mới nên được coi là một lệnh mới hoặc một thành phần của một hệ thống lớn hơn. Chẳng hạn, các câu lệnh if / then / other sẽ tiếp quản nhiều dòng, nhưng mỗi thành phần của hệ thống đó nằm trong một dòng mới. Đừng để một lệnh chảy vào dòng tiếp theo, vì điều này có thể cắt ngắn lệnh trước đó và gây ra lỗi cho bạn ở dòng tiếp theo. Nếu trình soạn thảo văn bản của bạn đang làm điều đó, bạn nên tắt gói văn bản để ở bên an toàn. Bạn có thể tắt gói văn bản trong bit nano nhấn ALT + L.
Bình luận thường xuyên với #s
Nếu bạn bắt đầu một dòng bằng #, dòng đó sẽ bị bỏ qua. Điều này biến nó thành một dòng bình luận, nơi bạn có thể tự nhắc nhở mình về đầu ra của lệnh trước đó là gì, hoặc lệnh tiếp theo sẽ làm gì. Một lần nữa, tắt gói văn bản hoặc chia bạn nhận xét thành nhiều dòng bắt đầu bằng hàm băm. Sử dụng nhiều bình luận là một cách tốt để giữ, vì nó cho phép bạn và những người khác điều chỉnh các tập lệnh của bạn dễ dàng hơn. Ngoại lệ duy nhất là vụ hack Hash-Bang đã nói ở trên, vì vậy đừng theo dõi #s với! S. ;-)
Các lệnh được bao quanh bởi dấu ngoặc đơn
Trong những ngày cũ, việc thay thế lệnh được thực hiện với các dấu tick đơn (', chia sẻ phím ~). Chúng ta sẽ không chạm vào điều này, nhưng vì hầu hết mọi người đi ra ngoài và khám phá sau khi học những điều cơ bản, có lẽ nên đề cập rằng bạn nên sử dụng dấu ngoặc đơn thay thế. Điều này chủ yếu là vì khi bạn lồng - đặt các lệnh bên trong các lệnh khác - dấu ngoặc đơn hoạt động tốt hơn.
Kịch bản đầu tiên của bạn
Hãy bắt đầu với một tập lệnh đơn giản cho phép bạn sao chép các tệp và nối ngày vào cuối tên tệp. Chúng ta hãy gọi nó là datecpiên. Trước tiên, hãy kiểm tra xem tên đó có mâu thuẫn với điều gì không:
Bạn có thể thấy rằng không có đầu ra của lệnh nào, vì vậy tất cả chúng ta đều được thiết lập để sử dụng tên này.
Hãy tạo một tệp trống trong thư mục ~ / bin:
chạm ~ / bin / datecp
Và, hãy thay đổi quyền ngay bây giờ, trước khi chúng ta quên:
Hãy bắt đầu xây dựng kịch bản của chúng tôi sau đó. Mở tập tin đó trong trình soạn thảo văn bản của bạn lựa chọn. Như tôi đã nói, tôi thích sự đơn giản của nano.
nano ~ / bin / datecp
Và, hãy tiếp tục và đưa vào dòng đầu tiên tiên quyết, và nhận xét về những gì kịch bản này làm.
Tiếp theo, hãy khai báo một biến. Nếu bạn đã từng học đại số, có lẽ bạn biết đó là gì. Một biến cho phép chúng ta lưu trữ thông tin và làm mọi thứ với nó. Biến có thể mở rộng phạm vi khi được tham chiếu ở nơi khác. Đó là, thay vì hiển thị tên của họ, họ sẽ hiển thị nội dung được lưu trữ của họ. Sau này bạn có thể nói cùng một biến đó để lưu trữ thông tin khác nhau và bất kỳ lệnh nào xảy ra sau đó sẽ sử dụng thông tin mới. Đó là một giữ chỗ thực sự ưa thích.
Những gì chúng ta sẽ đưa ra trong biến? Vâng, hãy lưu trữ ngày và thời gian! Để làm điều này, chúng tôi sẽ gọi lệnh ngày.
Hãy xem ảnh chụp màn hình bên dưới để biết cách xây dựng đầu ra của lệnh date:
Bạn có thể thấy rằng bằng cách thêm các biến khác nhau bắt đầu bằng%, bạn có thể thay đổi đầu ra của lệnh thành những gì bạn muốn. Để biết thêm thông tin, bạn có thể xem trang hướng dẫn sử dụng lệnh date.
Chúng ta hãy sử dụng lần lặp cuối cùng của lệnh date, ngày date +% m_% d_% y-% H.% M.% SÊ và sử dụng nó trong tập lệnh của chúng tôi.
Nếu chúng ta lưu tập lệnh này ngay bây giờ, chúng ta có thể chạy nó và nó sẽ cung cấp cho chúng ta đầu ra của lệnh date như chúng ta mong đợi:
Nhưng, hãy làm điều gì đó khác đi. Hãy đặt một tên biến, như date_formatted cho lệnh này. Cú pháp thích hợp cho việc này như sau:
biến = $ (đối số lệnh -options)
Và đối với chúng tôi, chúng tôi sẽ xây dựng nó như thế này:
date_formatted = $ (ngày +% m_% d_% y-% H.% M.% S)
Đây là những gì chúng ta gọi thay thế lệnh. Về cơ bản, chúng tôi đang nói với bash rằng bất cứ khi nào biến số date date_formatted 'xuất hiện, để chạy lệnh bên trong dấu ngoặc đơn. Sau đó, bất cứ đầu ra nào mà các lệnh đưa ra sẽ được hiển thị thay vì tên của biến, ngày date_formatted.
Đây là một kịch bản ví dụ và đầu ra của nó:
Lưu ý rằng có hai khoảng trắng ở đầu ra. Không gian trong dấu ngoặc kép của lệnh echo và khoảng trắng phía trước biến được hiển thị. Đừng sử dụng dấu cách nếu bạn không muốn chúng xuất hiện. Cũng lưu ý rằng nếu không có dòng echo echo bổ sung này, tập lệnh sẽ hoàn toàn không có đầu ra.
Hãy quay lại với kịch bản của chúng tôi. Hãy thêm phần tiếp theo vào phần sao chép của lệnh.
cp -iv $ 1 $ 2. $ date_formatted
Điều này sẽ gọi lệnh sao chép, với các tùy chọn -i và -v. Cái trước sẽ yêu cầu bạn xác minh trước khi ghi đè lên một tệp và cái sau sẽ hiển thị những gì đang bị tắt trên dòng lệnh.
Tiếp theo, bạn có thể thấy tôi đã thêm tùy chọn 1 $ USD. Khi viết kịch bản, ký hiệu đô la ($) theo sau là một số sẽ biểu thị đối số được đánh số đó của tập lệnh khi nó được gọi. Ví dụ, trong lệnh sau:
cp -iv Trogdor2.mp3 nhạc chuông.mp3
Đối số đầu tiên là Tiếng Trogdor2.mp3. Và đối số thứ hai là Nhạc chuông.mp3.
Nhìn lại kịch bản của chúng tôi, chúng tôi có thể thấy rằng chúng tôi đang tham khảo hai đối số:
Điều này có nghĩa là khi chúng tôi chạy tập lệnh, chúng tôi sẽ cần cung cấp hai đối số để tập lệnh chạy chính xác. Đối số đầu tiên, $ 1, là tệp sẽ được sao chép và được thay thế làm đối số đầu tiên của lệnh cp cp -iv..
Đối số thứ hai, $ 2, sẽ đóng vai trò là tệp đầu ra cho cùng một lệnh. Nhưng, bạn cũng có thể thấy rằng nó khác. Chúng tôi đã thêm một khoảng thời gian và chúng tôi đã tham chiếu biến số date_formatted của người dùng từ trên. Tò mò về những gì nó làm?
Đây là những gì xảy ra khi tập lệnh được chạy:
Bạn có thể thấy rằng tệp đầu ra được liệt kê là bất cứ thứ gì tôi nhập với giá 2 đô la, theo sau là một khoảng thời gian, sau đó là đầu ra của lệnh date! Có ý nghĩa, đúng?
Bây giờ khi tôi chạy lệnh datecp, nó sẽ chạy tập lệnh này và cho phép tôi sao chép bất kỳ tệp nào vào một vị trí mới và tự động thêm ngày và giờ vào cuối tên tệp. Hữu ích cho việc lưu trữ công cụ!
Shell scripting là trung tâm của việc làm cho hệ điều hành của bạn làm việc cho bạn. Bạn cũng không phải học một ngôn ngữ lập trình mới để biến nó thành hiện thực. Hãy thử viết kịch bản với một số lệnh cơ bản ở nhà và bắt đầu nghĩ xem bạn có thể sử dụng lệnh này để làm gì.
Bạn có kịch bản không? Có lời khuyên nào cho người mới? Chia sẻ suy nghĩ của bạn trong các ý kiến! Có nhiều hơn để đến trong loạt bài này!