Hướng dẫn cho người mới bắt đầu viết kịch bản lệnh Linux Shell
Để bắt đầu - hãy làm rõ tiêu đề đó. Linux có nhiều hơn một vỏ có thể, và kịch bản bất kỳ của chúng là một chủ đề có thể dễ dàng đóng gói một cuốn sách đầy đủ. Những gì chúng ta sẽ làm là bao gồm các yếu tố cơ bản của một kịch bản bash . Nếu bạn không biết bạn đang sử dụng trình bao nào, nó có thể là bash . Quá trình này sẽ quen thuộc với bất kỳ ai đã làm việc với các tệp dơi của DOS, về cơ bản nó cũng là một khái niệm tương tự. Bạn chỉ cần đặt một loạt các lệnh vào một tập tin văn bản và chạy nó. Sự khác biệt xuất phát từ thực tế là các tập lệnh bash có thể làm nhiều hơn các tệp lô. Trong thực tế, bash scripting không phải là tất cả những gì xa so với một ngôn ngữ chính thức như Python. Hôm nay, chúng tôi sẽ giới thiệu một số vấn đề cơ bản như đầu vào, đầu ra, đối số và biến.
Lưu ý : Nếu chúng tôi muốn thực sự mang tính kỹ thuật, bash không phải là trình bao chỉ dành cho Linux. Phần lớn (mặc dù có thể không phải tất cả) những điều sau sẽ áp dụng cho bất kỳ hệ thống kiểu UNIX nào, bao gồm Mac OSX và BSD.
Chào thế giới
Đó là truyền thống để bắt đầu một "ngôn ngữ" mới bằng cách tạo ra một kịch bản đơn giản để đưa ra dòng chữ “Hello World!”. Thật dễ dàng, chỉ cần mở trình soạn thảo văn bản yêu thích của bạn và nhập như sau:
#! / bin / bash echo Xin chào thế giới!
Chỉ với hai dòng, nó không thể đơn giản hơn nhiều, nhưng dòng đầu tiên đó, #! / Bin / bash, có thể không rõ ràng ngay lập tức. Hai ký tự đầu tiên (thường được gọi là hashbang) là một tín hiệu đặc biệt. Nó cho Linux biết rằng tập lệnh này nên được chạy qua / bin / bash shell, trái ngược với vỏ C hoặc vỏ Korn hoặc bất kỳ thứ gì khác mà bạn có thể đã cài đặt. Không có nó, không có cách nào dễ dàng cho Linux để nói chính xác kiểu shell script này là gì. Ví dụ, một tập lệnh Python có thể sẽ bắt đầu bằng #! / Usr / bin / python .
Sau đó chỉ là câu lệnh echo, nó sẽ in các từ sau khi nó đến terminal (về mặt kỹ thuật, với đầu ra tiêu chuẩn ).
Chạy tập lệnh của bạn
Như thường là trường hợp với Linux, có nhiều cách để thực hiện công việc này. Cách cơ bản nhất là gọi bash thủ công và cho nó tập tin kịch bản, như trong
#Filename có thể là bất cứ điều gì, .sh là một thực tế phổ biến cho các kịch bản shell. bash myscript.sh
Người đọc thông minh có thể đang nghĩ “ Nhưng chờ đã, chúng tôi đã không đặt thứ băm đó vào để nó có thể biết sử dụng bash? Tại sao tôi phải chạy bash bằng tay? ”Và câu trả lời là" Bạn không ". Ít nhất, bạn sẽ không có nếu chúng tôi đã dành một chút thời gian để làm cho kịch bản thực thi một mình.
Trong ví dụ trước, chúng tôi đã khởi chạy bash và gửi kịch bản. Bây giờ chúng tôi sẽ tiết kiệm cho mình một số thời gian trong tương lai bằng cách làm cho các tập lệnh thực thi vì vậy chúng tôi không cần phải chạy bash bằng tay. Đó là dễ dàng như một lệnh duy nhất.
chmod + x myscript.sh
Và bây giờ nó có thể được chạy với tên tập tin trực tiếp.
Biến và đối số
Các biến trong bash có thể hơi khó hiểu hơn một số ngôn ngữ kịch bản khác, một phần vì chúng đôi khi cần được bắt đầu bằng ký tự $ và đôi khi không phải - tùy thuộc vào những gì bạn đang làm. Lấy ví dụ sau.
PATH = $ PATH: / home / josh / tập lệnh
Chúng tôi đề cập đến cùng một biến, PATH, hai lần. Khi không có $, nhưng thời gian khác có. Có một vài cách mà bạn có thể nhớ khi một $ là thích hợp, nhưng tác giả này sử dụng một ẩn dụ "nói chuyện". Nếu tôi đang nói chuyện với biến (chẳng hạn như gán nó một giá trị mới) tôi gọi nó bằng tên ngắn, trong trường hợp này PATH. Nếu tôi đang nói về một biến (chẳng hạn như nhận được giá trị hiện tại của nó) nó sẽ có một tiêu đề chính thức hơn ($ PATH). Lý do chính xác và hoạt động bên trong của thiết kế này nằm ngoài phạm vi của hướng dẫn này, vì vậy, chỉ cần nhớ rằng bạn cần bao gồm $ nếu bạn đang cố gắng tìm nạp thông tin trong một biến.
Bây giờ chúng ta sẽ sử dụng một biến trong kịch bản của chúng ta. Thay đổi dòng thứ hai để trông giống như sau:
#! / bin / bash echo Xin chào $ 1!
Và chạy lại tập lệnh của bạn, nhưng lần này bao gồm tên của bạn sau tên tập lệnh.
Bash tự động gán các biến nhất định cho bạn, bao gồm một vài biến như $ 1, $ 2 vv giữ mỗi đối số được truyền cho tập lệnh. Các biến có thể được gán lại và đổi tên theo bất kỳ cách nào bạn muốn, vì vậy bạn có thể viết lại kịch bản trước đó
#! / bin / bash firstname = $ 1 lastname = $ 2 echo Xin chào $ firstname $ lastname!
Như bạn thấy, không có dấu hiệu $ khi gán giá trị cho biến, nhưng bạn cần chúng khi kéo thông tin ra ngoài.
Điều kiện và vòng lặp
Không có tập lệnh nào có thể nhận được rất xa mà không có khả năng phân tích hoặc lặp lại dữ liệu. Phương pháp phổ biến nhất để xác định một hành động là sử dụng câu lệnh if. Nó hoạt động giống như bạn mong đợi - NẾU một cái gì đó THEN làm công cụ ELSE làm một cái gì đó khác nhau. Ví dụ này so sánh chuỗi ký tự mà chúng ta đã lưu trong biến firstname và so sánh nó với một số văn bản được mã hóa cứng. Nếu chúng khớp nhau, nó sẽ in ra đầu ra đặc biệt. Nếu không, nó vẫn tiếp tục như bình thường.
#! / bin / bash firstname = $ 1 lastname = $ 2 nếu ["$ firstname" == "Josh"] sau đó echo "What a great name" khác echo Xin chào $ firstname $ lastname! fi
Cuối cùng, thành phần cốt lõi tiếp theo là khả năng lặp của dữ liệu trên bash. Các cơ chế lặp thông thường cho bash là FOR, WHILE và UNTIL. Chúng ta sẽ bắt đầu với thời gian, vì nó đơn giản nhất.
#! / bin / bash counter = 0 #Khi bộ đếm nhỏ hơn 10, giữ vòng lặp trong khi [$ counter -lt 50]; do echo $ counter cho phép counter = counter + 1 được thực hiện
Ví dụ đó tạo ra một biến truy cập, bắt đầu một vòng lặp while và tiếp tục lặp (và thêm một lần vào bộ đếm) cho đến khi nó đạt đến giới hạn, trong trường hợp này là 50. Bất kỳ điều gì sau khi câu lệnh được thực hiện sẽ thực thi khi vòng lặp hoàn tất.
UNTIL hoạt động tương tự, nhưng ngược lại WHILE. Một vòng lặp while sẽ tiếp tục miễn là biểu thức của nó là true (ngược lại dưới 50). Vòng lặp cho đến có cách tiếp cận ngược lại, và sẽ được viết thành
cho đến [$ counter -gt 50]; làm
Trong ví dụ này, "trong khi nhỏ hơn 50" và "cho đến khi lớn hơn 50" sẽ có kết quả gần như giống hệt nhau (sự khác biệt là một trong đó sẽ bao gồm số 50 chính nó, và khác sẽ không. Hãy thử nó ra cho chính mình để xem cái nào, và tại sao.)
Phần kết luận
Như đã nói ở trên, nó sẽ mất nhiều hơn một bài viết Bắt đầu đơn để chứng minh đầy đủ sức mạnh của kịch bản bash. Các phần được hiển thị ở đây có thể được xem như là các thành phần cốt lõi của cách bash hoạt động và đủ để hiển thị cho bạn các nguyên tắc cơ bản đằng sau kịch bản lệnh shell trong Linux. Nếu bạn thực sự muốn thâm nhập vào lòng can đảm và bắt đầu thực hiện một số tập lệnh tuyệt vời, hãy xem hướng dẫn tham khảo bash chính thức của GNU tại đây. Chúc mừng kịch bản!