OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

Truy cập các phần tử mảng

Vì vậy, mảng tốt cho những gì? Cũng giống như nhiều tác vụ quản lý dữ liệu có thể được thực hiện với chương trình bảng tính, nhiều tác vụ lập trình có thể được thực hiện với mảng.

Hãy xem xét một ví dụ trình bày và thu thập dữ liệu đơn giản. Chúng tôi sẽ xây dựng một tập lệnh kiểm tra thời gian sửa đổi của các tệp trong một thư mục được chỉ định. Từ dữ liệu này, tập lệnh của chúng tôi sẽ xuất ra một bảng hiển thị các tệp được sửa đổi lần cuối vào giờ nào trong ngày. Một tập lệnh như vậy có thể được sử dụng để xác định thời điểm hệ thống hoạt động tích cực nhất. Tập lệnh này, được gọi là giờ, tạo ra kết quả này:


hình ảnh

[tôi @ linuxbox ~] $ giờ .


giờ

Các Tập Tin

giờ

Các Tập Tin

----

-----

----

-----

00

0

12

11

01

1

13

7

02

0

14

1

03

0

15

7

04

1

16

6

05

1

17

5

06

6

18

4

07

3

19

4

08

1

20

1

09

14

21

0

10

2

22

0

11

5

23

0

Tổng số tệp = 80


Chúng tôi thực hiện giờ chương trình, chỉ định thư mục hiện tại làm mục tiêu. Nó cung cấp một bảng hiển thị, cho mỗi giờ trong ngày (0-23), có bao nhiêu tệp được sửa đổi lần cuối. Mã để tạo ra điều này như sau:



#! / bin / bash

# giờ: tập lệnh để đếm tệp bằng cách sử dụng thời gian sửa đổi () {

echo "sử dụng: $ {0 ## * /} directory"> & 2

}

#! / bin / bash

# giờ: tập lệnh để đếm tệp bằng cách sử dụng thời gian sửa đổi () {

echo "sử dụng: $ {0 ## * /} directory"> & 2

}


# Kiểm tra xem đối số có phải là thư mục không nếu [[! -d $ 1]]; sau đó

sử dụng lối ra 1

fi


# Khởi tạo mảng

cho tôi trong {0..23}; làm giờ [i] = 0; xong


# Thu thập dữ liệu

for i in $ (stat -c% y "$ 1" / * | cut -c 12-13); làm j = $ {i / # 0}

((++ giờ [j])) ((++ đếm))

thực hiện


# Hiển thị dữ liệu

echo -e "Hour \ tFiles \ tHour \ tFiles" echo -e "---- \ t ----- \ t ---- \ t -----" cho tôi sau {0..11} ; làm

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {giờ [i]} $ j $ {giờ [j]} đã xong

printf "\ nTotal files =% d \ n" $ count

# Kiểm tra xem đối số có phải là thư mục không nếu [[! -d $ 1]]; sau đó

sử dụng lối ra 1

fi


# Khởi tạo mảng

cho tôi trong {0..23}; làm giờ [i] = 0; xong


# Thu thập dữ liệu

for i in $ (stat -c% y "$ 1" / * | cut -c 12-13); làm j = $ {i / # 0}

((++ giờ [j])) ((++ đếm))

thực hiện


# Hiển thị dữ liệu

echo -e "Hour \ tFiles \ tHour \ tFiles" echo -e "---- \ t ----- \ t ---- \ t -----" cho tôi sau {0..11} ; làm

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {giờ [i]} $ j $ {giờ [j]} đã xong

printf "\ nTotal files =% d \ n" $ count


Tập lệnh bao gồm một chức năng (sử dụng) và một phần thân chính có bốn phần. Trong phần đầu tiên, chúng tôi kiểm tra xem có đối số dòng lệnh và nó có phải là một thư mục hay không. Nếu không, chúng tôi hiển thị thông báo sử dụng và thoát.

Phần thứ hai khởi tạo mảng giờ. Nó thực hiện điều này bằng cách gán cho mỗi phần tử một giá trị bằng không. Không có yêu cầu đặc biệt nào để chuẩn bị mảng trước khi sử dụng, nhưng tập lệnh của chúng ta cần đảm bảo rằng không có phần tử nào trống. Lưu ý cách thú vị của vòng lặp được cấu trúc. Bằng cách sử dụng mở rộng dấu ngoặc nhọn ({0..23}), chúng tôi có thể dễ dàng tạo ra một loạt các từ cho cho chỉ huy.

Phần tiếp theo thu thập dữ liệu bằng cách chạy stat chương trình trên mỗi tệp trong lệnh. Chúng tôi sử dụng cắt để trích xuất giờ có hai chữ số từ kết quả. Bên trong vòng lặp, chúng ta cần loại bỏ các số 00 ở đầu khỏi trường giờ, vì trình bao sẽ cố gắng (và cuối cùng không thành công) để diễn giải các giá trị “09” đến “34” dưới dạng số bát phân (xem Bảng 2-XNUMX). Tiếp theo, chúng tôi tăng giá trị của phần tử mảng tương ứng với giờ trong ngày. Cuối cùng, chúng tôi tăng một bộ đếm (tính) để theo dõi tổng số tệp trong thư mục.

Phần cuối cùng của tập lệnh hiển thị nội dung của mảng. Đầu tiên, chúng tôi xuất một vài dòng tiêu đề và sau đó nhập một vòng lặp tạo ra bốn cột đầu ra. Cuối cùng, chúng tôi xuất bản kiểm đếm cuối cùng của các tệp.


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: