Làm cách nào để chuyển đối số trong tập lệnh Bash?

How Do I Pass Argument Bash Script



Hầu hết Người dùng Linux Mint 20 thấy mình bị mắc kẹt khi chuyển một đối số trong một tập lệnh bash. Bạn có thể chuyển các đối số cho bất kỳ tập lệnh bash nào khi nó được thực thi. Có một số cách đơn giản và hữu ích để chuyển đối số trong tập lệnh bash. Trong hướng dẫn bài viết này, chúng tôi sẽ cho bạn biết về một số cách rất dễ dàng để chuyển và sử dụng các đối số trong các tập lệnh bash của bạn.

Chuyển đối số bằng các biến mặc định:

Tạo một tệp mới với bất kỳ tên nào bằng cách sử dụng lệnh cảm ứng, ví dụ: file.sh.







$chạm vàotên tập tin



Mở tệp mới tạo này và thêm một số tập lệnh bash vào nó. Tôi đã thêm một số biến mặc định, ví dụ: Do đó, $ 1, $ 2 và $ 3. Bất kỳ đối số nào sẽ được chuyển qua terminal sẽ được lưu trữ trong các biến đã nêu.







Bạn phải chạy tệp này bằng lệnh ./ theo sau là một số đối số. Như bạn có thể thấy trong hình rằng khi tôi chuyển các đối số, một lỗi xảy ra: Quyền bị từ chối. Điều này là do tệp này không có quyền thực thi.

$./tên tệp đối số1 đối số2

Vì vậy, để cấp quyền thực thi cho tệp này, hãy sử dụng lệnh sudo chmod để thực hiện.



$sudo chmod+ x tên tệp

Bây giờ, hãy chạy lại tệp bằng cách sử dụng lệnh trên. Lần này tôi đã cung cấp các lập luận khác nhau. Bạn sẽ thấy các đối số mới được truyền vào được lưu trữ trong các biến mặc định.

Chuyển tên tập lệnh Shell làm đối số:

Bây giờ, sử dụng cùng một tệp file.sh cũ với một chút thay đổi trong các biến mặc định của nó. Bạn phải thêm biến $ 0 trong tập lệnh như được hiển thị.

Khi chạy cùng một lệnh ./ shell script, tên của shell script của bạn, ví dụ: ./filename sẽ được lưu trữ trong biến $ 0 như một đối số.

Truyền đối số dưới dạng một mảng thành biến:

Bắt đầu với cùng một tệp file.sh, bạn phải thêm một số dòng bổ sung trong tập lệnh cũ. Khai báo một biến có tên là mảng. Thêm một biến mặc định [được bảo vệ bằng email] sẽ lưu trữ các đối số do người dùng nhập vào dưới dạng một mảng. Các đối số này sẽ được phân tích cú pháp thành mảng biến. Dòng cuối cùng sẽ hiển thị tất cả các đối số của mảng biến được sắp xếp theo số chỉ mục.

Thực thi tập lệnh shell ./. Bạn sẽ thấy rằng nó sẽ hiển thị các đối số hoặc giá trị được lưu trữ dưới dạng một mảng trong [email protected] được phân tích cú pháp thành mảng biến nhưng không hiển thị tên tập lệnh shell trong câu lệnh echo thứ hai. Bạn sẽ có kết quả sau.

$./tên tệp đối số1 đối số2

Sử dụng cùng một tệp với cùng một tập lệnh. Chỉ cần xóa $ {array [3]} khỏi dòng cuối cùng như trong hình.

Sau khi thực hiện lệnh ./, bạn sẽ thấy một kết quả tương tự như bạn đã nhận được trong ví dụ trên mà không có thay đổi.

Bạn cũng có thể nhận được kết quả tương tự bằng cách thay thế dòng cuối cùng của tập lệnh bash bằng một từ duy nhất. Bạn chỉ cần thêm [email bảo vệ] trong câu lệnh echo và nó sẽ hiển thị các đối số có trong mảng biến này.

Vì vậy, chạy lại lệnh ./, bạn sẽ nhận được kết quả tương tự.

Kiểm tra tổng số đối số được thông qua:

Ngược lại, nếu bạn muốn biết tổng số đối số được người dùng truyền vào, bạn cũng có thể làm điều đó. Với mục đích này, bạn chỉ cần thay thế [email được bảo vệ] bằng $ # trong echo.

Một lần nữa thực hiện lệnh ./, bây giờ bạn sẽ thấy toàn bộ số liệu của các đối số được truyền vào tập lệnh. Trong trường hợp của chúng tôi, 3 đối số được chuyển dưới dạng giá trị.

Tạo từng dòng đầu ra của đối số:

Tạo một tệp test.sh mới trong thư mục chính. Thêm tập lệnh bash như được hiển thị.

Bây giờ hãy chạy cùng một lệnh cũ với các đối số khác nhau. Đầu tiên, bạn sẽ thấy lỗi: Quyền bị từ chối.

Bạn phải thực hiện lệnh chmod để cấp đặc quyền sudo tệp này. Sau đó, chạy lại lệnh ./ shell script. Và bạn sẽ nhận được đầu ra được sắp xếp từng dòng của các đối số.

Giới hạn biến thông qua số chỉ mục đối số:

Nếu bạn muốn giới hạn biến bằng cách sử dụng số chỉ mục của nó, bạn có thể làm điều đó rất dễ dàng. Thêm dấu ngoặc nhọn sau dấu $ và thêm số chỉ mục đối số mà bạn muốn hiển thị trước các đối số khác.

Nếu các đối số do người dùng cung cấp nhỏ hơn số chỉ mục được cung cấp trong biến giới hạn, thì bạn sẽ nhận được giá trị đối số trống. Ví dụ, tôi đã cung cấp 4 đối số, nhưng tôi đã đưa ra giá trị đối số 05 sẽ được hiển thị. Trong trường hợp này, biến sẽ được hiển thị trống vì đối số thứ năm chưa được chuyển.

Nhưng khi bạn truyền số đối số bằng hoặc nhiều hơn trong lệnh, bạn sẽ nhận được giá trị hiển thị trong kết quả như hình.

Kiểm tra đối số giá trị cụ thể:

Tạo một tệp mới với tên Check.sh trong thư mục chính của bạn. Thêm tập lệnh bash tương tự như trong hình dưới đây. Trong tập lệnh này, chúng ta có một biến var để lưu trữ giá trị đối số do người dùng truyền vào. Sau đó, chúng ta có một câu lệnh if, câu lệnh này sẽ kiểm tra xem giá trị đối số có được khớp hay không. Nếu giá trị đối số được khớp với giá trị được cung cấp trong dấu ngoặc đơn thì câu lệnh echo đầu tiên sẽ được thực thi. Nếu giá trị không khớp, câu lệnh echo thứ hai sẽ được thực hiện.

Khi chúng ta chạy lệnh shell script, nó sẽ xuất hiện lỗi. Bằng cách sử dụng lệnh chmod, chúng tôi có thể sửa lỗi này.

Sau đó, thực thi tập lệnh shell cho tệp cụ thể với một số giá trị đối số. Trong trường hợp của chúng tôi, chúng tôi đã cung cấp Aqsa dưới dạng giá trị đối số, giá trị này giống với giá trị được hiển thị trong dấu ngoặc đơn. Vì vậy, bash script sẽ thực hiện câu lệnh echo đầu tiên như hình.

Mặt khác, nếu bạn cung cấp các giá trị đối số khác nhau trong tập lệnh shell, nó sẽ hiển thị câu lệnh echo khác. Ở đây, tôi đã thêm Rimsha làm giá trị đối số, khác với giá trị được cung cấp trong câu lệnh if. Vì vậy, bash script sẽ thực hiện câu lệnh echo thứ hai.

Phần kết luận:

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu rõ về cách truyền đối số cho biến mặc định, truyền giá trị đối số dưới dạng mảng cho một biến, nhận tổng số đối số được truyền, đầu ra từng dòng của đối số, giới hạn đối số đầu ra bằng cách sử dụng số chỉ mục, kiểm tra đối số giá trị cụ thể và nhiều hơn nữa.