Đọc các đối số dòng lệnh

Bash:
Đọc các đối số dòng lệnh

Làm thế nào:

#!/bin/bash

# In ra tên của kịch bản.
echo "Tên kịch bản: $0"

# In ra đối số đầu tiên.
echo "Đối số đầu tiên: $1"

# In ra tất cả các đối số.
echo "Tất cả các đối số: $@"

Đầu ra mẫu giả sử kịch bản của bạn được đặt tên là ’example.sh’ và bạn gọi ./example.sh arg1 arg2:

Tên kịch bản: ./example.sh
Đối số đầu tiên: arg1
Tất cả các đối số: arg1 arg2

Lặp qua các đối số:

#!/bin/bash

# Lặp qua từng đối số.
for arg in "$@"; do
  echo "Đối số: $arg"
done

Đào sâu

Bash đã hỗ trợ các đối số dòng lệnh từ rất lâu; chúng là các tham số vị trí, $0 đến $9, với $@$* hiển thị tất cả. $0 là chính kịch bản đó, $1 đến $9 là đối số thứ nhất đến thứ chín; cần sử dụng ngoặc như ${10} cho đối số thứ mười trở đi.

Sử dụng $@ thường tốt hơn là $* vì nó xử lý chính xác các đối số chứa khoảng trắng. $@ cung cấp mỗi đối số như một “từ” riêng biệt; $* kết hợp tất cả chúng thành một “từ” duy nhất.

Bạn có thể chuyển qua các đối số bằng cách sử dụng lệnh shift, đẩy $2 lên thành $1, và tiếp tục như vậy, loại bỏ $1 cũ.

Có phương án thay thế? Chắc chắn rồi. getoptsgetopt cung cấp nhiều kiểm soát hơn cho các tùy chọn (như -h cho trợ giúp) và phân tích cờ; hãy kiểm tra chúng nếu $1, $2,… không đáp ứng được nhu cầu của bạn.

Xem Thêm