Giả sử bạn đang sử dụng bashphiên bản 4.0 hoặc mới hơn ...
CODE=A
declare -A domain
domain=(
[a]=com.tencent.ig
[b]=com.vng.pubgmobile
[c]=com.pubg.krmobile
[d]=com.rekoo.pubgm
)
PN=${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Trong mã, tôi xác định một mảng kết hợp có chứa tất cả các tên miền, mỗi tên được liên kết với một chữ cái viết thường.
Các $PNbiến được gán tên miền tương ứng với giá thấp hơn-cased $CODEgiá trị ( ${CODE,,}trả về giá trị của $CODEbiến thành chữ thường chỉ) từ mảng này, nhưng nếu $CODEkhông thực hiện tương ứng với một mục hợp lệ trong domaindanh sách, nó ra khỏi kịch bản với một lỗi.
Việc ${variable:?error message}thay thế tham số sẽ mở rộng thành giá trị của $variable(tên miền thích hợp trong mã) nhưng sẽ thoát khỏi tập lệnh với thông báo lỗi nếu giá trị trống không có sẵn. Bạn không nhận được chính xác định dạng của thông báo lỗi như trong mã của mình, nhưng về cơ bản nó sẽ hoạt động giống như vậy nếu$CODE không hợp lệ:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Nếu bạn quan tâm đến số lượng nhân vật, chúng ta có thể rút ngắn điều này hơn nữa:
CODE=A
declare -A domain=( [a]=tencent.ig [b]=vng.pubgmobile [c]=pubg.krmobile [d]=rekoo.pubgm )
PN=com.${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Ngoài việc xóa các dòng mới không cần thiết, tôi cũng đã xóa com. khỏi mỗi tên miền (thay vào đó, nó được thêm vào trong bài tập PN).
Lưu ý rằng tất cả các mã ở trên sẽ hoạt động ngay cả đối với một giá trị nhiều ký tự trong $CODE(nếu các khóa có ký tự thấp hơn tồn tại cho các mã này trongdomain mảng).
$CODEThay vào đó, nếu là một chỉ số bằng số (dựa trên số không), điều này sẽ đơn giản hóa mã một chút:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Điều này cũng sẽ giúp bạn thực sự dễ dàng đọc domainmảng từ một tệp phụ trợ chứa một mục nhập trên mỗi dòng:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bashmã? Hay bạn có bất kỳ vỏ khác trong tâm trí?