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ẻ.
Đó 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
- Mỗi tập lệnh phải có "#! / Bin / bash"
- Mỗi dòng mới là một lệnh mới
- Dòng chú thích bắt đầu bằng #
- 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ì đó:
Hãy tạo một tệp trống trong thư mục ~ / bin:
touch ~/bin/datecp
Và, hãy thay đổi sự cho phép ngay bây giờ, trước khi chúng ta quên:
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.
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.
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)
Dưới đây là một kịch bản ví dụ và đầu ra của nó:
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
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 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â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!