- Xác định một mảng theo chỉ mục
- Xác định một mảng có nhiều giá trị
- Xác định một mảng kết hợp
- Đếm các giá trị mảng
- Đọc giá trị mảng theo vòng lặp
- Đọc các giá trị cụ thể của mảng
- Chèn các giá trị mảng
- Đọc nội dung tệp vào mảng
- Kết hợp các giá trị mảng
- Sửa đổi giá trị mảng
- Xóa các giá trị mảng
- Tìm kiếm và thay thế các giá trị mảng
- Sử dụng một mảng làm đối số hàm
- Trả về mảng từ hàm
- Làm cho mảng trống
Xác định một mảng theo chỉ mục
Phương pháp khai báo một mảng bằng cách đề cập đến các chỉ mục số tuần tự hoặc không tuần tự được hiển thị trong đoạn script sau. Kiểu mảng này được gọi là mảng số. Ở đây, mảng “$books” được tạo bằng cách xác định ba chỉ mục tuần tự và mảng “$products” được tạo bằng cách xác định bốn chỉ mục không tuần tự. Tất cả các giá trị của cả hai mảng đều được in bằng hàm “printf”.
#!/bin/bash
#Xác định chỉ mục mảng theo thứ tự tuần tự
sách [ 0 ] = 'Học bash Shell'
sách [ 1 ] = 'Hoạt động an ninh mạng với bash'
sách [ 2 ] = 'Mẹo chuyên nghiệp về dòng lệnh Bash'
tiếng vọng 'Tất cả các giá trị của mảng đầu tiên:'
printf '%s\n' ' ${sách[@]} '
#Xác định chỉ mục mảng theo thứ tự không tuần tự
các sản phẩm [ 10 ] = 'Cái bút'
các sản phẩm [ 5 ] = 'Bút chì'
các sản phẩm [ 9 ] = 'Thông thường'
các sản phẩm [ 4 ] = 'Giấy khổ A4'
tiếng vọng
tiếng vọng 'Tất cả các giá trị của mảng thứ hai:'
printf '%s\n' ' ${sản phẩm[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị của cả hai mảng được in ở đầu ra. Thứ tự chỉ mục được duy trì tại thời điểm in đối với mảng chỉ mục không tuần tự:
Xác định một mảng có nhiều giá trị
Một mảng số có nhiều giá trị có thể được khai báo bằng lệnh “khai báo” với tùy chọn -a hoặc không sử dụng lệnh “khai báo”. Trong đoạn mã sau, mảng đầu tiên được khai báo bằng lệnh “khai báo” và mảng thứ hai được tạo mà không sử dụng lệnh “khai báo”.
#!/bin/bash
#Khai báo một mảng số với từ khóa 'khai báo'
tuyên bố -Một tên = ( 'Michael' 'David' 'Alexander' 'Thomas' 'Robert' 'Richard' )
#In các giá trị mảng
tiếng vọng 'Tất cả các giá trị của mảng đầu tiên:'
printf '%s\n' ' ${tên[@]} '
#Khai báo một mảng số không có từ khóa 'khai báo'
sách = ( 'Hướng dẫn viết kịch bản Shell' 'Bish Bash Bosh!' 'Học Bash nhanh chóng' )
#Thêm dòng mới
tiếng vọng
#In các giá trị mảng
tiếng vọng 'Tất cả các giá trị của mảng thứ hai:'
printf '%s\n' ' ${sách[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị của cả hai mảng được in ở đây:
Xác định một mảng kết hợp
Mảng chứa giá trị chuỗi làm chỉ mục được gọi là mảng kết hợp. Tùy chọn -A được sử dụng với lệnh “khai báo” trong Bash để tạo một mảng Bash kết hợp. Trong đoạn mã sau, mảng kết hợp đầu tiên được khai báo bằng cách đề cập đến các chỉ mục riêng biệt và mảng thứ hai được khai báo bằng cách đề cập đến tất cả các cặp khóa-giá trị tại thời điểm khai báo mảng.
#!/bin/bash#Khai báo một biến mảng kết hợp không có giá trị
tuyên bố -MỘT người lao động
#Gán giá trị riêng bằng cách xác định chỉ mục
người lao động [ 'nhận dạng' ] = '78564'
người lao động [ 'tên' ] = 'Có sẵn diễn viên'
người lao động [ 'bưu kiện' ] = 'CEO'
người lao động [ 'lương' ] = 300000
#In hai giá trị của mảng
tiếng vọng 'Mã hiệu công nhân: ${nhân viên[id]} '
tiếng vọng 'Tên nhân viên: ${nhân viên[name]} '
#Khai báo một mảng kết hợp với các giá trị
tuyên bố -MỘT khóa học = ( [ mã số ] = 'CSE-206' [ tên ] = 'Lập trình hướng đối tượng' [ tín dụng thời gian ] = 2.0 )
#Thêm dòng mới
tiếng vọng
#In hai giá trị mảng của mảng thứ hai
tiếng vọng 'Tên khóa học: ${khóa học[name]} '
tiếng vọng 'Tín dụng thời gian: ${khóa học[credit_hour]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị cụ thể của mảng kết hợp được in ở đây bằng cách đề cập đến giá trị khóa hoặc chỉ mục:
Đếm các giá trị mảng
Phương pháp đếm tổng số phần tử của mảng số và mảng kết hợp được thể hiện trong đoạn script sau:
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một tên = ( 'Michael' 'David' 'Alexander' 'Thomas' 'Robert' 'Richard' ) ;
tiếng vọng 'Độ dài của mảng số là ${#tên[@]} '
#Khai báo một mảng kết hợp
tuyên bố -MỘT khóa học = ( [ mã số ] = 'CSE-206' [ tên ] = 'Lập trình hướng đối tượng' [ tín dụng thời gian ] = 2.0 )
tiếng vọng 'Độ dài của mảng kết hợp là ${#khóa học[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Độ dài mảng của mảng số và mảng kết hợp được in ở đây:
Đọc giá trị mảng theo vòng lặp
Phương pháp đọc tất cả các giá trị của một mảng số và một mảng kết hợp bằng vòng lặp “for” được hiển thị trong tập lệnh sau:
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một sách = ( 'Hướng dẫn viết kịch bản Shell' 'Bish Bash Bosh!' 'Học Bash nhanh chóng' )
#In các giá trị mảng số
tiếng vọng 'Giá trị mảng số là:'
vì TRONG TRONG ' ${sách[@]} '
LÀM
tiếng vọng ' $in '
xong
tiếng vọng
#Khai báo một mảng kết hợp với các giá trị
tuyên bố -MỘT khách hàng = (
[ nhận dạng ] = 'H-5623'
[ tên ] = 'Ông. Ahnaf'
[ Địa chỉ ] = '6/A, Dhanmondi, Dhaka.'
[ điện thoại ] = '+8801975642312' )
#In các giá trị mảng kết hợp
tiếng vọng 'Các giá trị mảng kết hợp là:'
vì k TRONG ' ${!clients[@]} '
LÀM
tiếng vọng ' $k => ${khách hàng[$k]} '
xong
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Ở đây, các giá trị của mảng số và các cặp khóa-giá trị của mảng kết hợp được in ở đầu ra:
Đọc phạm vi giá trị cụ thể của mảng
Các giá trị mảng của phạm vi cụ thể của các chỉ mục được hiển thị trong tập lệnh sau. Trong tập lệnh, một mảng số gồm bốn phần tử được xác định. Hai giá trị mảng từ chỉ mục thứ hai của mảng sẽ được in sau.
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một Bánh = ( 'Bánh sô-cô-la' 'Bánh vani' 'Bánh nhung đỏ' 'bánh dâu' )
#In các giá trị mảng cụ thể
tiếng vọng 'Phần tử thứ 2 và thứ 3 của giá trị mảng là:'
printf '%s\n' ' ${bánh[@]:1:2} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Giá trị thứ hai và thứ ba của mảng là “Bánh Vanilla” và “Bánh nhung đỏ” được in ở đầu ra:
Chèn giá trị mảng
Phương pháp thêm nhiều giá trị vào cuối mảng được hiển thị trong đoạn script sau. Mảng chính “$books” chứa ba phần tử và hai phần tử được thêm vào cuối mảng “$books”.
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một sách = ( 'Hướng dẫn viết kịch bản Shell' 'Bish Bash Bosh!' 'Học Bash nhanh chóng' )
#In các giá trị mảng trước khi chèn
tiếng vọng 'Giá trị mảng:'
printf '%s\n' ' ${sách[@]} '
tiếng vọng
sách = ( ' ${sách[@]} ' 'Kinh thánh dòng lệnh Linux và Shell Scripting' 'Hướng dẫn viết kịch bản Bash nâng cao của Mendel Cooper' )
#In giá trị mảng sau khi chèn
tiếng vọng 'Mảng giá trị sau khi chèn hai giá trị:'
printf '%s\n' ' ${sách[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị mảng trước và sau khi chèn giá trị mới được in ở đầu ra:
Đọc nội dung tệp vào mảng
Tạo một tệp văn bản có tên “fruits.txt” với nội dung sau để kiểm tra tập lệnh của ví dụ này:
trái cây.txt
Quả xoàiMít
Quả dứa
Quả cam
Chuối
Trong đoạn script sau, nội dung của tệp được lưu trữ trong một mảng có tên “$data”. Ở đây, mỗi dòng của tệp được lưu trữ dưới dạng từng phần tử của mảng. Tiếp theo, các giá trị mảng được in.
#!/bin/bash#Đọc tên tệp từ người dùng
đọc -P 'Nhập tên tập tin:' tên tập tin
nếu như [ -f tên tệp $ ]
sau đó
#Đọc nội dung file vào một mảng'
dữ liệu = ( ` con mèo ' tên tệp $ ' ` )
tiếng vọng 'Nội dung của tập tin được đưa ra dưới đây:'
#Đọc từng dòng file
vì đường kẻ TRONG ' ${dữ liệu[@]} '
LÀM
tiếng vọng dòng $
xong
là
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Đầu ra được hiển thị bởi lệnh “cat” và đầu ra của tập lệnh là tương tự nhau vì cùng một tệp được truy cập bởi lệnh “cat” và tập lệnh:
Kết hợp các giá trị mảng
Một mảng mới được tạo bằng cách kết hợp các giá trị của nhiều mảng. Trong tập lệnh sau, hai mảng chuỗi số được xác định. Sau đó, một mảng mới được tạo bằng cách kết hợp các giá trị của các mảng này.
#!/bin/bash#Khai báo mảng đầu tiên
tuyên bố -Một tênDanh sách1 = ( 'Michael' 'David' 'Alexander' 'Thomas' )
tiếng vọng 'Các giá trị mảng đầu tiên là:'
printf '%s,' ${nameList1[@]}
tiếng vọng
#Khai báo mảng thứ hai
tuyên bố -Một tênDanh sách2 = ( 'Robert' 'Richard' )
tiếng vọng 'Các giá trị mảng thứ hai là:'
printf '%s,' ${nameList2[@]}
tiếng vọng
#Tạo một mảng mới bằng cách kết hợp hai mảng
mảng_kết hợp = ( ' ${nameList1[@]} ' ' ${nameList2[@]} ' )
tiếng vọng 'Các giá trị mảng kết hợp là:'
printf '%s,' ${combined_array[@]}
tiếng vọng
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Ở đây, giá trị của ba mảng được in ở đầu ra. Mảng thứ ba chứa tất cả các giá trị của mảng thứ nhất và thứ hai:
Sửa đổi giá trị mảng
Phương pháp cập nhật một hoặc nhiều giá trị mảng bằng cách đề cập đến chỉ mục được hiển thị trong tập lệnh sau:
#!/bin/bash#Khai báo mảng đầu tiên
tuyên bố -Một danh sách tên = ( 'Michael' 'David' 'Alexander' 'Thomas' )
tiếng vọng 'Giá trị mảng:'
printf '%s,' ${nameList[@]}
tiếng vọng
#Cập nhật giá trị thứ 2 của mảng
danh sách tên [ 1 ] = 'Robert'
tiếng vọng 'Mảng giá trị sau khi cập nhật:'
printf '%s,' ${nameList[@]}
tiếng vọng
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị của mảng chính và mảng cập nhật được in ở đầu ra:
Xóa các giá trị mảng
Lệnh “unset” được sử dụng để loại bỏ phần tử cụ thể hoặc tất cả các phần tử của mảng. Trong đoạn script sau, phần tử thứ hai của mảng sẽ bị xóa.
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một sách = ( 'Hướng dẫn viết kịch bản Shell' 'Bish Bash Bosh!' 'Học Bash nhanh chóng' )
#In các giá trị mảng trước khi xóa
tiếng vọng 'Giá trị mảng:'
printf '%s\n' ' ${sách[@]} '
tiếng vọng
#Xóa phần tử thứ 2
bỏ đặt sách [ 1 ]
#In các giá trị mảng sau khi xóa
tiếng vọng 'Mảng giá trị sau khi loại bỏ giá trị thứ 2:'
printf '%s\n' ' ${sách[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị của mảng chính và các giá trị mảng sau khi loại bỏ một giá trị được in ở đầu ra:
Tìm kiếm và thay thế các giá trị mảng
Trong tập lệnh sau, giá trị cụ thể của mảng được thay thế bằng một giá trị khác nếu giá trị tìm kiếm được xác định trong mẫu khớp với bất kỳ giá trị nào của mảng “$names”.
#!/bin/bash#Khai báo mảng đầu tiên
tuyên bố -Một tên = ( 'Michael' 'David' 'Alexander' 'Thomas' )
#In các giá trị mảng ban đầu
tiếng vọng 'Giá trị mảng ban đầu:'
printf '%s\n' ' ${tên[@]} '
#Tạo chuỗi sau khi thay thế các giá trị mảng
đã cập nhật_mảng = ${names[@]/Alexander/Richard}
#In các giá trị mảng sau khi thay thế
tiếng vọng 'Giá trị mảng sau khi thay thế:'
printf '%s\n' ' ${update_array[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Các giá trị của mảng chính và các giá trị mảng sau khi thay thế một giá trị được in ở đầu ra:
Sử dụng một mảng làm đối số hàm
Trong tập lệnh sau, một biến mảng được truyền làm đối số của hàm và các giá trị của mảng đó sẽ được in sau.
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một con số = ( 10 6 Bốn năm 13 số 8 )
#Xác định hàm sẽ nhận giá trị đối số
vui vẻ ( )
{
#Đọc đối số đầu tiên
con số = $1
#In các giá trị mảng
tiếng vọng 'Giá trị mảng:'
printf '%d\n' ' ${số[@]} '
}
#Gọi hàm lấy mảng làm đối số
vui vẻ ' ${số[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh:
Trả về một mảng từ hàm
Trong đoạn script sau, hàm được gọi với bốn đối số là số. Một mảng được tạo với các giá trị đối số và mảng đó được trả về từ hàm cho người gọi.
#!/bin/bash#Xác định hàm đọc bốn giá trị đối số
vui vẻ ( )
{
#Đọc các giá trị đối số
con số = ( $1 $2 $3 $4 )
#Trả về mảng
tiếng vọng ' ${số[@]} '
}
#Gọi hàm có ba đối số
return_val =$ ( vui vẻ 78 Bốn năm 90 23 )
#Lưu trữ giá trị trả về trong một mảng
đọc -Một trên một <<< $return_val
#In các giá trị của mảng trả về
tiếng vọng 'Các giá trị của mảng là:'
vì TRONG TRONG ' ${num[@]} '
LÀM
tiếng vọng ' $in '
xong
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh:
Làm cho mảng trống
Đoạn script sau đây hiển thị phương pháp tạo một mảng trống bằng lệnh “unset”. Tổng số giá trị mảng được in trước và sau khi làm cho mảng trống.
#!/bin/bash#Khai báo một mảng số
tuyên bố -Một con số = ( 10 6 Bốn năm 13 80 )
tiếng vọng 'Số lượng giá trị mảng: ${#số[@]} '
#Làm cho mảng trống
bỏ đặt con số
tiếng vọng 'Số giá trị mảng sau khi tạo mảng trống: ${#số[@]} '
đầu ra :
Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Số phần tử của mảng trở thành 0 sau khi làm cho mảng trống:
Phần kết luận
Các phương pháp khai báo, truy cập, sửa đổi và loại bỏ các biến mảng khác nhau trong tập lệnh Bash được trình bày trong hướng dẫn này bằng 15 ví dụ đơn giản. Chúng tôi hy vọng rằng hướng dẫn này sẽ giúp người dùng Bash biết chi tiết về cách sử dụng mảng Bash.