Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Bắt đầu với Bash scripting cho sysadmins

Bash shell chắc chắn không phải là shell duy nhất ở đó, nhưng nó là một trong những loại mạnh nhất. Điều này làm cho nó trở thành một lựa chọn phổ biến cho các quản trị viên hệ thống cần phát triển các ứng dụng nghiêm túc vượt ra ngoài "danh sách giặt" đơn giản của các lệnh để chạy trên hệ thống. Có rất nhiều cách sử dụng tuyệt vời cho các trình bao khác (ví dụ:tôi mặc định là Tcsh cho các móc Git), nhưng Bash là một lựa chọn dễ dàng cho việc viết kịch bản nghiêm túc và đây là lý do tại sao.

Chức năng

Để tạo một hàm trong tập lệnh Bash, hãy sử dụng từ khóa function :

 function foo {
# code here
}

Các hàm rất hữu ích cho các lập trình viên vì chúng giúp giảm bớt sự dư thừa trong mã. Ít dư thừa trong mã làm giảm số lượng bảo trì cần thiết vì nếu bạn cần thay đổi một giá trị, bạn chỉ phải tìm nó một lần (trong chức năng của nó) thay vì mỗi lần nó được sử dụng.

Cách Bash xếp chồng lên nhau

Các chức năng được hỗ trợ khá tốt trong shell, ngoại trừ Tcsh.

  • Vỏ Korn: Sử dụng cú pháp tương tự như Bash
  • Zsh: Sử dụng cú pháp tương tự như Bash
  • Cá: Sử dụng chức năng tùy chỉnh lệnh để tạo và thao tác các chức năng
  • Tcsh: Đôi khi, bạn có thể khắc phục việc thiếu các chức năng trong Tcsh bằng cách sử dụng goto nhưng hiếm khi là lựa chọn tối ưu.

Chuyển hướng

Chuyển hướng đầu vào và đầu ra là một chức năng khá tiêu chuẩn trong bất kỳ ngôn ngữ lập trình và kịch bản nào, và nó vốn dĩ xảy ra khi bạn đang sử dụng shell. Bạn nhập văn bản; bạn nhận được đầu ra. Một số shell mạnh mẽ hơn những shell khác và như bạn có thể đoán, Bash cung cấp cho bạn gần như mọi tùy chọn có thể tưởng tượng được.

Khái niệm cơ bản rất đơn giản:sử dụng một số > các ký tự để chuyển hướng đầu ra và một số < ký tự để chuyển hướng đầu vào. Tuy nhiên, có một số chỉ định đặc biệt cho các loại đầu vào và đầu ra cụ thể. Ví dụ:thông báo lỗi chuyển đến luồng có tên stderr , được chỉ định là 2> cho các mục đích chuyển hướng. Ví dụ:lệnh này chuyển hướng thông báo lỗi đến tệp có tên output.log :

 $ ls /void 2> output.log 

Cách Bash xếp chồng lên nhau

Chuyển hướng là một chức năng tiện lợi tuyệt vời khi tương tác với một shell và trong khi tất cả các shell chính đều hỗ trợ một số cách chuyển hướng, không phải tất cả các tính năng đều có sẵn trong tất cả các shell.

  • Vỏ Korn: Sử dụng cú pháp tương tự như Bash
  • Zsh: Sử dụng cú pháp tương tự như Bash
  • Cá: Hỗ trợ một phần
  • Tcsh: Hỗ trợ một phần

Nguồn

Khi bạn tạo nguồn một tệp trong trình bao, bạn đang nhập tệp vào môi trường trình bao của mình. Hầu hết các trình bao xử lý điều này một cách thành thạo, nhưng một số trình bao cung cấp một vài tính năng bổ sung để thuận tiện cho bạn.

Ví dụ:khi bạn sử dụng nguồn trong Bash, nó tìm kiếm thư mục hiện tại của bạn cho tệp bạn tham chiếu. Nếu nó không thể tìm thấy tệp để tạo nguồn, nó sẽ tìm kiếm PATH của bạn để thay thế. Đó là một phần thưởng nhỏ, nhưng nó rất tiện lợi vì nó cho phép bạn lưu trữ các chức năng phổ biến ở một vị trí tập trung trên ổ đĩa của bạn và sau đó xử lý môi trường của bạn như một môi trường phát triển tích hợp (IDE). Bạn không phải lo lắng về nơi các chức năng của mình được lưu trữ, vì bạn biết chúng ở địa phương tương đương với / usr / include , vì vậy, bất kể bạn đang ở đâu khi bạn tìm nguồn, Bash sẽ tìm thấy chúng.

Cách Bash xếp chồng lên nhau

Bash là trình bao duy nhất tìm kiếm cả thư mục hiện tại và PATH của bạn khi bạn sử dụng nguồn hoặc lệnh viết tắt (và đúng POSIX-ly) . ký hiệu.

Liên kết khóa

Nhiều shell cho phép bạn tùy chỉnh cách bạn tương tác với chúng và tất nhiên, bất kỳ tương tác nào với giao diện dựa trên văn bản đều bắt đầu bằng việc nhập. Trong Bash, bạn có thể xem sơ đồ bàn phím hiện tại của mình:

 $ bind -V | grep keymap 

Để thay đổi sơ đồ bàn phím của bạn (ví dụ:từ Emacs thành Vi):

 $ bind 'set keymap vi' 

Cách Bash xếp chồng lên nhau

Chỉ Bash và Zsh cung cấp các cài đặt trước được tích hợp sẵn cho các ràng buộc chính.

Lịch sử

Bash có giao diện lịch sử lệnh mạnh mẽ nhất so với bất kỳ trình bao nào. Phiên bản Bash của lịch sử cho phép tìm kiếm ngược, truy xuất nhanh, chỉnh sửa lịch sử (bao gồm xóa các mục nhập theo số dòng) và hơn thế nữa. Tất cả các shell khác kết hợp lại khớp với giao diện lịch sử của Bash, nhưng không có cái nào (kể cả Zsh, thường bắt chước Bash) khớp với nó.

Thao túng lịch sử

Lịch sử lệnh không phải là cách duy nhất để tương tác với quá khứ của bạn. Bash có một bộ sưu tập phong phú các ký hiệu viết tắt cho phép bạn nhớ lại và thậm chí sửa đổi các lệnh trong lịch sử trình bao của mình.

Ví dụ:để chạy lại lệnh gần đây nhất (kết quả của   history | tail -n1 , sử dụng khoảng trắng ở đầu , được chỉ định ở đây bởi   , để giữ lệnh lịch sử ngoài lịch sử của bạn), bạn có thể chỉ cần nhập !! thành Bash:

 $ wc -w luarocks.xml 
1284 luarocks.xml
$ !!
1284 luarocks.xml

Để chạy lệnh gần đây nhất trong khi thay thế một phần của lệnh đó bằng lệnh khác, bạn có thể sử dụng thay thế chuỗi:

 $ wc -w luarocks.xml 
1284 luarocks.xml
$ ^ -w ^ -l
$ wc -l luarocks.xml
214 luarocks.xml

Có rất nhiều phím tắt như vậy, tất cả đều được ghi lại trong trang thông tin và trang web Bash man. Phải thừa nhận rằng nhiều thủ thuật này dành cho người dùng nâng cao, những người mà tương tác Bash lặp đi lặp lại và nhàm chán đến mức các tổ hợp phím khó hiểu, dường như ngẫu nhiên lại hữu ích. Zsh bắt chước Bash một cách hiệu quả, nhưng không có trình bao nào khác mang lại loại hiệu quả tối đa này.

Cách Bash xếp chồng lên nhau

Các lệnh lịch sử của Bash không bị trùng khớp với bất kỳ trình bao nào khác (Zsh đến gần, nhưng thiếu một số tùy chọn, chẳng hạn như khả năng xóa theo số dòng).

Mảng liên kết

Hầu hết các trình bao cung cấp khả năng tạo, thao tác và truy vấn các mảng được lập chỉ mục. Trong tiếng Anh đơn giản, một mảng được lập chỉ mục là danh sách những thứ có tiền tố là một số. Danh sách những thứ này, cùng với số được chỉ định, được gói gọn trong một biến duy nhất một cách thuận tiện, giúp bạn dễ dàng "mang" nó vào mã của mình.

Tuy nhiên, Bash bao gồm khả năng tạo các mảng liên kết và xử lý các mảng này giống như bất kỳ mảng nào khác. Mảng kết hợp cho phép bạn tạo danh sách các cặp khóa và giá trị, thay vì chỉ các giá trị được đánh số.

Điều thú vị về mảng kết hợp là các khóa có thể tùy ý:

 $ statement -A userdata 
$ userdata [name] =seth
$ userdata [pass] =8eab07eb620533b083f241ec4e6b9724
$ userdata [login] =`date --utc +% s`

Truy vấn bất kỳ khóa nào:

 $ echo "$ {userdata [name]}" 
seth
$ echo "$ {userdata [login]}"
1583362192

Hầu hết các hoạt động mảng thông thường mà bạn mong đợi từ một mảng đều có sẵn.

Cách Bash xếp chồng lên nhau

Bash là trình bao duy nhất cung cấp hỗ trợ đầy đủ cho các mảng liên kết (một lần nữa, Zsh xuất hiện gần nhưng thiếu các chức năng để liệt kê các khóa).

Chọn Bash cho shell script

Một số tiện ích trong Bash không tương thích với POSIX. Về lý thuyết, điều đó có nghĩa là bạn có thể viết một tập lệnh Bash không chạy như mong đợi trên một hệ thống không có Bash. Nếu điều đó xảy ra, có nghĩa là tập lệnh của bạn không phải là "di động".

Tuy nhiên, trên thực tế, Bash là phần mềm mã nguồn mở và miễn phí, vì vậy bất kỳ ai cũng có thể cài đặt nó, cho dù họ chạy Linux, BSD, OpenIndiana, Windows hay macOS. Việc cài đặt Bash không yêu cầu người dùng sử dụng Bash làm trình bao mặc định của họ hoặc thậm chí khởi chạy nó một cách có ý thức, bởi vì một tập lệnh shell tốt xác định shell mà nó sử dụng trong shebang trên cùng của nó dòng ( #! / bin / bash , chẳng hạn).

Khi nghi ngờ, hãy thêm Bash làm phần phụ thuộc của tập lệnh shell của bạn (ngay cả khi đó là phần phụ thuộc duy nhất) trong tài liệu của bạn để cảnh báo người dùng rằng đó là tập lệnh Bash chứ không phải tập lệnh shell chung.

Bash có nhiều tiện ích và tôi thấy rằng những điều đó vượt trội hơn mối quan tâm về việc liệu người dùng có cài đặt Bash hay không. Cũng như với Python hoặc Java hoặc bất kỳ phần mềm nào khác, đôi khi có những phần phụ thuộc. Nếu bạn thích Bash và thấy tốc độ nhanh và phím tắt của nó hữu ích, đừng tự đánh đổi.

Tải xuống sách điện tử của chúng tôi về Bash scripting cho sysadmins!