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 $@
và $*
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. getopts
và getopt
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
- Tài liệu Bash về các Tham số Đặc biệt: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
- Hướng dẫn Lập trình Bash Nâng cao: https://www.tldp.org/LDP/abs/html/
- Hướng dẫn
getopts
: https://wiki.bash-hackers.org/howto/getopts_tutorial