Hướng dẫn cho người mới bắt đầu với Shell Scripting: Khái niệm cơ bản

Mục lục:

Hướng dẫn cho người mới bắt đầu với Shell Scripting: Khái niệm cơ bản
Hướng dẫn cho người mới bắt đầu với Shell Scripting: Khái niệm cơ bản

Video: Hướng dẫn cho người mới bắt đầu với Shell Scripting: Khái niệm cơ bản

Video: Hướng dẫn cho người mới bắt đầu với Shell Scripting: Khái niệm cơ bản
Video: 3 MẸO DÙNG APPLE MAPS MÀ BẠN NÊN BIẾT... - YouTube 2024, Tháng tư
Anonim
Thuật ngữ "shell scripting" đượ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 tập 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, tìm hiểu các dòng lệnh tốt hơn, và trục xuất các nhiệm vụ quản lý tập tin tẻ nhạt.
Thuật ngữ "shell scripting" đượ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 tập 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, tìm hiểu các dòng lệnh tốt hơn, và trục xuất các nhiệm vụ quản lý tập tin tẻ nhạt.

Shell Scripting là gì?

Là một người dùng Linux có nghĩa là bạn chơi xung quanh với dòng lệnh. Giống như 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à chỉ và nhấp chuột. Bạn càng sử dụng và tìm hiểu dòng lệnh, bạn càng thấy được tiềm năng của nó. Vâng, dòng lệnh chính nó là một chương trình: shell. Hầu hết các bản phân phối Linux ngày nay đều sử dụng Bash và đây là những gì bạn đang thực sự nhập các 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 tin batch. Đây là những tệp văn bản nhỏ mà bạn có thể điền vào bằng các lệnh để thực thi và Windows sẽ chạy chúng lần lượt. Đó 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 trò chơi trong phòng thí nghiệm máy tính ở trường trung học 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 bản giả mạo shell giá rẻ.

Shell script cho phép chúng ta lập trình lệnh trong chuỗi và có hệ thống thực thi chúng như một sự kiện kịch bản, giống như các tập tin batch. Chúng cũng cho phép các hàm hữu ích hơn, chẳng hạn như lệnh thay thế. Bạn có thể gọi một lệnh, như ngày tháng, và sử dụng nó như là một phần của lược đồ đặt tên tệp. Bạn có thể tự động sao lưu và mỗi tập tin sao chép có thể có ngày hiện tại được nối vào cuối tên của nó. Các tập lệnh cũng không chỉ là lời gọi của lệnh. Đó là các chương trình theo ý 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ư vòng lặp ‘for’, nếu / sau đó là các câu lệnh khác, v.v. - trực tiếp trong giao diện của hệ điều hành của bạn. Và, bạn không phải học ngôn ngữ khác bởi vì bạn đang sử dụng những gì bạn đã biết: dòng lệnh.
Shell script cho phép chúng ta lập trình lệnh trong chuỗi và có hệ thống thực thi chúng như một sự kiện kịch bản, giống như các tập tin batch. Chúng cũng cho phép các hàm hữu ích hơn, chẳng hạn như lệnh thay thế. Bạn có thể gọi một lệnh, như ngày tháng, và sử dụng nó như là một phần của lược đồ đặt tên tệp. Bạn có thể tự động sao lưu và mỗi tập tin sao chép có thể có ngày hiện tại được nối vào cuối tên của nó. Các tập lệnh cũng không chỉ là lời gọi của lệnh. Đó là các chương trình theo ý 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ư vòng lặp ‘for’, nếu / sau đó là các câu lệnh khác, v.v. - trực tiếp trong giao diện của hệ điều hành của bạn. Và, bạn không phải học ngôn ngữ khác bởi 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 mà bạn đã biết, trong khi học các mặt hàng chủ lực 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? Script nó! Cần một phím tắt cho một lệnh thực sự phức tạp? Script nó! Bạn muốn xây dựng một giao diện dòng lệnh rất dễ sử dụng cho một thứ gì đó? Script nó!

Trước khi bắt đầu

Trước khi chúng tôi bắt đầu loạt kịch bản, hãy xem một số thông tin cơ bản. Chúng tôi sẽ sử dụng bash shell, hầu hết các bản phân phối Linux đều 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 nên bạn có thể viết kịch bản bất kể nền tảng của mình. 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 với ít hoặc không cần phải tinh chỉnh.

Việc viết kịch bản có thể dễ dàng sử dụng các đặc quyền "quản trị viên" hoặc "siêu người dùng", vì vậy tốt nhất bạn nên kiểm tra các tập lệnh trước khi đưa chúng vào hoạt động. Cũng sử dụng cảm giác thông thường, như đảm bảo bạn có bản sao lưu của các tệp bạn sắp chạy tập lệnh. Cũng rất quan trọng để sử dụng các tùy chọn phù hợp, như –i cho lệnh rm, để tương tác của bạn là bắt buộc. Điều này có thể ngăn chặn 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ố.

Ở cốt lõi của họ, các tập lệnh chỉ là các tệp văn bản thuần túy. 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… 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 đa dạng thức 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 có quyền thích hợp. Bạn có thể làm cho các tập lệnh thực thi bằng cách chạy lệnh sau trên đó:

chmod +x ~/somecrazyfolder/script1

Điều này sẽ cho phép bất kỳ ai chạy tập lệnh cụ thể đó. Nếu bạn muốn hạn chế việc sử dụng nó chỉ với người dùng của bạn, bạn có thể sử dụng thay vào đó:

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ư sau:

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” trong thư mục chính của mình:

~/bin

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 thi hành đượ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 tập lệnh ở đây, bạn chỉ 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 bạn đặ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:

which [command]

Rất nhiều người đặt tên kịch bản đầu tiên của họ là “test” 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à bởi vì nó xung đột với lệnh kiểm tra, điều này không làm gì nếu không có đối số. Luôn đảm bảo 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 đang làm những việc bạn không định làm!

Nguyên tắc tập lệnh

Như tôi đã đề cập trước đây, mọi tệp kịch bản đều là văn bản thuần túy.Tuy nhiên, điều đó không có nghĩa là bạn có thể viết những gì bạn muốn tất cả. Khi một tập tin văn bản được thực hiện, các shell sẽ phân tích chúng thông qua các đầu mối để xem chúng có phải là tập lệnh hay không và cách 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.
Như tôi đã đề cập trước đây, mọi tệp kịch bản đều là văn bản thuần túy.Tuy nhiên, điều đó không có nghĩa là bạn có thể viết những gì bạn muốn tất cả. Khi một tập tin văn bản được thực hiện, các shell sẽ phân tích chúng thông qua các đầu mối để xem chúng có phải là tập lệnh hay không và cách 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.
  1. Mỗi tập lệnh phải có "#! / Bin / bash"
  2. Mỗi dòng mới là một lệnh mới
  3. Dòng chú thích bắt đầu bằng #
  4. Các lệnh được bao quanh bởi ()

Hash-Bang Hack

Khi trình bao 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à bằng cách tạo dòng đầu tiên của bạn:

#!/bin/bash

Nếu bạn sử dụng một trình bao khác, hãy thay thế đường dẫn của nó ở đây. Dòng chú thích bắt đầu bằng dấu (#), nhưng thêm dấu (!) Và đường dẫn vỏ sau khi nó là loại 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 vỏ mà dòng này trỏ tới.

Dòng mới = Lệnh mới

Mỗi dòng mới sẽ đượ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. Ví dụ, nếu / else / else, 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 máu vào dòng tiếp theo, vì điều này có thể cắt ngắn lệnh trước đó và cung cấp cho bạn một lỗi trê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 với #s

Nếu bạn bắt đầu một dòng với dấu #, dòng này 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ề những gì đầu ra của lệnh trước đó, 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 nhỏ bạn nhận xét thành nhiều dòng mà tất cả bắt đầu bằng một băm. Sử dụng nhiều nhận xét là một phương pháp hay để lưu giữ, vì nó cho phép bạn và những người khác chỉnh sửa tập lệnh của bạn dễ dàng hơn. Ngoại lệ duy nhất là 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 trước, lệnh thay thế đã được thực hiện với các dấu tick đơn (`, chia sẻ phím ~). Chúng tôi sẽ không chạm vào điều này, nhưng vì hầu hết mọi người đi và khám phá sau khi tìm hiểu các khái niệm cơ bản, có thể bạn nên sử dụng dấu ngoặc đơn để thay thế. Điều này chủ yếu là do khi bạn làm tổ - đặt các lệnh bên trong các lệnh khác - các dấu ngoặc đơn hoạt động tốt hơn.

Tập lệnh đầu tiên của bạn

Hãy bắt đầu bằng một tập lệnh đơn giản cho phép bạn sao chép tệp và thêm ngày vào cuối tên tệp. Hãy gọi nó là "datecp". Trước tiên, hãy kiểm tra xem liệu tên đó xung đột với một cái gì đó:

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.
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:

touch ~/bin/datecp

Image
Image

Và, hãy thay đổi sự cho phép 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 bạn chọn. Như tôi đã nói, tôi thích sự đơn giản của nano.
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 bạn 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à đặt vào dòng đầu tiên tiên quyết và nhận xét về những gì tập lệnh này thực hiện.

Tiếp theo, hãy khai báo một biến. Nếu bạn đã từng lấy đại số, bạn có thể biết đó là cái gì. Một biến cho phép chúng ta lưu trữ thông tin và làm những việc với nó. Các biến có thể “mở rộng” 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 đó bạn có thể nói rằng cùng một biến để lưu trữ thông tin khác nhau và bất kỳ lệnh nào xuất hiện sau đó sẽ sử dụng thông tin mới. Đó là một trình giữ chỗ thực sự ưa thích.
Tiếp theo, hãy khai báo một biến. Nếu bạn đã từng lấy đại số, bạn có thể biết đó là cái gì. Một biến cho phép chúng ta lưu trữ thông tin và làm những việc với nó. Các biến có thể “mở rộng” 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 đó bạn có thể nói rằng cùng một biến để lưu trữ thông tin khác nhau và bất kỳ lệnh nào xuất hiện sau đó sẽ sử dụng thông tin mới. Đó là một trình giữ chỗ thực sự ưa thích.

Chúng ta sẽ đưa vào biến nào? Vâng, hãy lưu trữ ngày và giờ! Để thực hiện đ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 tạo đầu ra của lệnh date:

Hãy sử dụng lần lặp cuối cùng của lệnh date, “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 tôi đã lưu tập lệnh này ngay bây giờ, chúng tôi có thể chạy tập lệnh và nó sẽ cung cấp cho chúng tôi đầu ra của lệnh ngày như chúng tôi mong đợi:
Nếu chúng tôi đã lưu tập lệnh này ngay bây giờ, chúng tôi có thể chạy tập lệnh và nó sẽ cung cấp cho chúng tôi đầu ra của lệnh ngày như chúng tôi mong đợi:
Nhưng, hãy làm điều gì đó khác biệt. Hãy đặt tên biến, như date formatted cho lệnh này. Cú pháp thích hợp cho điều này là như sau:
Nhưng, hãy làm điều gì đó khác biệt. Hãy đặt tên biến, như date formatted cho lệnh này. Cú pháp thích hợp cho điều này là như sau:

variable=$(command –options arguments)

Và đối với chúng tôi, chúng tôi sẽ xây dựng nó như thế này:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

Đây là những gì chúng ta gọi là thay thế lệnh. Về cơ bản, chúng tôi nói với bash rằng bất cứ khi nào biến "date formatted" xuất hiện, để chạy lệnh bên trong dấu ngoặc đơn. Sau đó, bất kỳ đầu ra các lệnh cho nên được hiển thị thay vì tên của biến, "date formatted".
Đây là những gì chúng ta gọi là thay thế lệnh. Về cơ bản, chúng tôi nói với bash rằng bất cứ khi nào biến "date formatted" xuất hiện, để chạy lệnh bên trong dấu ngoặc đơn. Sau đó, bất kỳ đầu ra các lệnh cho nên được hiển thị thay vì tên của biến, "date formatted".

Dưới đây là một kịch bản ví dụ và đầu ra của nó:

Image
Image
Lưu ý rằng có hai khoảng trống trong đầu ra. Khoảng trống trong dấu ngoặc kép của lệnh echo và khoảng trống trước biến được hiển thị. Không sử dụng không gian nếu bạn không muốn chúng hiển thị. Cũng lưu ý rằng không có dòng "echo" được thêm vào này, tập lệnh sẽ hoàn toàn không có đầu ra.
Lưu ý rằng có hai khoảng trống trong đầu ra. Khoảng trống trong dấu ngoặc kép của lệnh echo và khoảng trống trước biến được hiển thị. Không sử dụng không gian nếu bạn không muốn chúng hiển thị. Cũng lưu ý rằng không có dòng "echo" được thêm vào này, tập lệnh sẽ hoàn toàn không có đầu ra.

Hãy quay lại kịch bản của chúng tôi. Tiếp theo, hãy thêm 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. Trước đây sẽ yêu cầu bạn xác minh trước khi ghi đè lên một tập tin, và sau đó sẽ hiển thị những gì đang được xuống trên dòng lệnh.
Điều này sẽ gọi lệnh sao chép, với các tùy chọn –i và –v. Trước đây sẽ yêu cầu bạn xác minh trước khi ghi đè lên một tập tin, và sau đó sẽ hiển thị những gì đang được xuống trên dòng lệnh.

Tiếp theo, bạn có thể thấy tôi đã thêm tùy chọn “$ 1”.Khi kịch bản lệnh, một 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 ringtone.mp3

Đối số đầu tiên là ‚ÄúTrogdor2.mp3‚Äù và đối số thứ hai là‚ Äúringtone.mp3‚Äù.

Nhìn lại kịch bản của chúng ta, chúng ta có thể thấy rằng chúng ta tham chiếu 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 cần cung cấp hai đối số cho 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ế bằng đối số đầu tiên ‚Äúcp‚ Äìiv‚Äù.
Điều này có nghĩa là khi chúng tôi chạy tập lệnh, chúng tôi cần cung cấp hai đối số cho 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ế bằng đối số đầu tiên ‚Äúcp‚ Äìiv‚Äù.

Đối số thứ hai, $ 2, sẽ hoạt động như 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 nhau. Chúng tôi đã thêm một khoảng thời gian và chúng tôi đã tham chiếu biến ‚Äúdate_formatted‚Äù từ phía trên. Tò mò như những gì điều này không?

Đây là những gì xảy ra khi kịch bản được chạy:

Bạn có thể thấy rằng tập tin đầu ra được liệt kê như bất cứ điều gì tôi đã nhập cho $ 2, theo sau là một khoảng thời gian, sau đó đầu ra của lệnh ngày! Làm cho tinh thần, phải không?
Bạn có thể thấy rằng tập tin đầu ra được liệt kê như bất cứ điều gì tôi đã nhập cho $ 2, theo sau là một khoảng thời gian, sau đó đầu ra của lệnh ngày! Làm cho tinh thần, phải khô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ữ nội dung!

Shell kịch bản là trung tâm làm cho hệ điều hành của bạn làm việc cho bạn. Bạn không cần phải học một ngôn ngữ lập trình mới để làm cho nó xảy ra. 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ĩ về những gì bạn có thể sử dụng nó cho.

Bạn có kịch bản? 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 điều nữa trong loạt bài này!

Đề xuất: