Cách thao tác và kiểm soát dữ liệu với Bash Array

Cach Thao Tac Va Kiem Soat Du Lieu Voi Bash Array



Biến mảng được sử dụng trong bất kỳ ngôn ngữ lập trình nào để lưu trữ nhiều giá trị bằng chỉ mục. Chỉ mục mảng có thể là số hoặc chuỗi. Mảng chứa chỉ mục số được gọi là “mảng số” và mảng chứa giá trị chuỗi làm chỉ mục được gọi là “mảng kết hợp”. Cả mảng số và mảng kết hợp đều có thể được tạo trong Bash. Các phương pháp thao tác và kiểm soát dữ liệu của mảng Bash được trình bày chi tiết bằng 15 ví dụ trong hướng dẫn này.

Danh sách nội dung:

  1. Xác định một mảng theo chỉ mục
  2. Xác định một mảng có nhiều giá trị
  3. Xác định một mảng kết hợp
  4. Đếm các giá trị mảng
  5. Đọc giá trị mảng theo vòng lặp
  6. Đọc các giá trị cụ thể của mảng
  7. Chèn các giá trị mảng
  8. Đọc nội dung tệp vào mảng
  9. Kết hợp các giá trị mảng
  10. Sửa đổi giá trị mảng
  11. Xóa các giá trị mảng
  12. Tìm kiếm và thay thế các giá trị mảng
  13. Sử dụng một mảng làm đối số hàm
  14. Trả về mảng từ hàm
  15. 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ự:



  p1





Lên đầu trang

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:

  p2

Lên đầu trang

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:

  p3

Lên đầu trang

Đế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:

  p4

Lên đầu trang

Đọ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à:'

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à:'

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:

  p5

Lên đầu trang

Đọ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:

  p6

Lên đầu trang

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:

  p7

Lên đầu trang

Đọ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ài

Mí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

đường kẻ TRONG ' ${dữ liệu[@]} '

LÀM

tiếng vọng dòng $

xong

đầ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:

  p8

Lên đầu trang

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:

  p9

Lên đầu trang

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:

  p10

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:

  p11

Lên đầu trang

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:

  p12

Lên đầu trang

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:

  p13

Lên đầu trang

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à:'

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ên đầu trang

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:

  p15

Lên đầu trang

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.