Bài viết này sẽ hướng dẫn bạn cách sử dụng mảng (array) trong Bash để xử lý dữ liệu một cách hiệu quả. Chúng ta sẽ đi từ những khái niệm cơ bản nhất như khởi tạo mảng, truy xuất phần tử, duyệt mảng, đến các thủ thuật nâng cao giúp bạn làm chủ Bash scripting.
Trong Bash scripting, mảng (array) là một cấu trúc dữ liệu cho phép bạn lưu trữ nhiều giá trị dưới cùng một tên biến. Điều này rất hữu ích khi bạn cần xử lý một danh sách các mục, ví dụ như danh sách các tập tin, danh sách người dùng, hoặc các tham số cấu hình. Thay vì phải khai báo nhiều biến riêng lẻ, bạn có thể gom chúng lại thành một mảng duy nhất, giúp code trở nên gọn gàng và dễ quản lý hơn.
Sử dụng mảng giúp bạn thực hiện các thao tác lặp đi lặp lại trên nhiều phần tử một cách dễ dàng, tiết kiệm thời gian và công sức. Nó cũng giúp bạn tránh được các lỗi do khai báo và quản lý biến thủ công. Với mảng, bạn có thể dễ dàng thêm, xóa, sửa đổi và truy xuất các phần tử, làm cho script của bạn trở nên linh hoạt và mạnh mẽ hơn.
Có nhiều cách để khởi tạo một mảng trong Bash. Dưới đây là một số cách phổ biến nhất:
Để tạo một mảng rỗng, bạn có thể sử dụng cú pháp sau:
my_array=()
Hoặc:
declare -a my_array
Cả hai cách này đều tạo ra một mảng có tên là `my_array` nhưng chưa chứa bất kỳ phần tử nào.
Bạn có thể khởi tạo một mảng và gán giá trị cho các phần tử của nó ngay lập tức bằng cú pháp sau:
my_array=( "value1" "value2" "value3" )
Trong ví dụ này, `my_array` sẽ chứa ba phần tử: "value1", "value2" và "value3".
Bạn cũng có thể chỉ định chỉ số (index) cho từng phần tử khi khởi tạo:
my_array=([0]="value1" [2]="value2" [5]="value3")
Lưu ý rằng các chỉ số không cần phải liên tiếp nhau. Trong trường hợp này, `my_array` sẽ có các phần tử tại chỉ số 0, 2 và 5.
Để truy xuất một phần tử cụ thể trong mảng, bạn sử dụng cú pháp `${array_name[index]}`, trong đó `array_name` là tên của mảng và `index` là chỉ số của phần tử bạn muốn truy xuất. Lưu ý rằng chỉ số trong Bash bắt đầu từ 0.
echo ${my_array[0]} # In ra phần tử đầu tiên
echo ${my_array[2]} # In ra phần tử thứ ba
Có hai cách chính để duyệt qua tất cả các phần tử trong một mảng:
Bạn có thể sử dụng vòng lặp `for` để duyệt qua từng phần tử trong mảng:
for element in "${my_array[@]}"; do
echo "$element"
done
`"${my_array[@]}"` sẽ trả về tất cả các phần tử trong mảng, và vòng lặp `for` sẽ lặp qua từng phần tử đó.
Bạn cũng có thể duyệt mảng bằng cách sử dụng chỉ số:
for i in "${!my_array[@]}"; do
echo "Index: $i, Value: ${my_array[$i]}"
done
`"${!my_array[@]}"` sẽ trả về tất cả các chỉ số trong mảng, và vòng lặp `for` sẽ lặp qua từng chỉ số đó. Cách này hữu ích khi bạn cần biết cả chỉ số và giá trị của phần tử.
Bash cung cấp nhiều thao tác để làm việc với mảng:
Để lấy số lượng phần tử trong một mảng, bạn sử dụng cú pháp `${#array_name[@]}`:
array_size=${#my_array[@]}
echo "Kích thước mảng: $array_size"
Để thêm một phần tử vào cuối mảng, bạn sử dụng cú pháp `array_name+=(value)`:
my_array+=( "new_value" )
Để xóa một phần tử khỏi mảng, bạn sử dụng lệnh `unset array_name[index]`:
unset my_array[2] # Xóa phần tử thứ ba
Lưu ý rằng sau khi xóa một phần tử, các chỉ số của các phần tử còn lại không thay đổi.
Bạn có thể tạo một mảng mới chứa một phần của mảng ban đầu bằng cú pháp `${array_name[@]:start:length}`, trong đó `start` là chỉ số bắt đầu và `length` là số lượng phần tử bạn muốn lấy:
new_array=("${my_array[@]:1:2}") # Lấy 2 phần tử từ chỉ số 1
Giả sử bạn có một tập tin chứa danh sách các tên tập tin, mỗi tên trên một dòng. Bạn muốn đọc danh sách này vào một mảng và sau đó thực hiện một số thao tác trên các tập tin đó.
#!/bin/bash
# Đọc danh sách tập tin vào mảng
file_list=()
while read -r line; do
file_list+=( "$line" )
done < files.txt
# In ra số lượng tập tin
echo "Số lượng tập tin: ${#file_list[@]}"
# Duyệt qua danh sách tập tin và in ra kích thước của từng tập tin
for file in "${file_list[@]}"; do
if [ -f "$file" ]; then
size=$(stat -c %s "$file")
echo "Tập tin: $file, Kích thước: $size bytes"
else
echo "Không tìm thấy tập tin: $file"
fi
done
Mảng là một công cụ mạnh mẽ trong Bash scripting. Bằng cách nắm vững các khái niệm và thao tác cơ bản, bạn có thể viết các script phức tạp và hiệu quả hơn. Hãy thử nghiệm và áp dụng những kiến thức này vào các dự án thực tế của bạn để nâng cao kỹ năng Bash scripting.
Bài viết liên quan