เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | เนื้อหา | ถัดไป>

การเข้าถึง Array Elements

อาร์เรย์ดีสำหรับอะไร? งานการจัดการข้อมูลจำนวนมากสามารถทำได้ด้วยโปรแกรมสเปรดชีต งานเขียนโปรแกรมจำนวนมากสามารถทำได้ด้วยอาร์เรย์

ลองพิจารณาตัวอย่างการรวบรวมข้อมูลและการนำเสนออย่างง่าย เราจะสร้างสคริปต์ที่ตรวจสอบเวลาแก้ไขของไฟล์ในไดเร็กทอรีที่ระบุ จากข้อมูลนี้ สคริปต์ของเราจะแสดงตารางที่แสดงเวลาของวันที่แก้ไขไฟล์ครั้งล่าสุด สคริปต์ดังกล่าวสามารถใช้เพื่อกำหนดว่าระบบมีการใช้งานมากที่สุดเมื่อใด สคริปต์นี้เรียกว่า ชั่วโมง, ให้ผลลัพธ์นี้:


ภาพ

[me@linuxbox ~]$ ชั่วโมง .


ชั่วโมง

ไฟล์

ชั่วโมง

ไฟล์

----

-----

----

-----

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

ไฟล์ทั้งหมด = 80


เราดำเนินการ ชั่วโมง โปรแกรมระบุไดเร็กทอรีปัจจุบันเป็นเป้าหมาย สร้างตารางแสดงจำนวนไฟล์ที่ถูกแก้ไขล่าสุดในแต่ละชั่วโมงในแต่ละวัน (0-23) รหัสในการผลิตนี้มีดังนี้:



#! / bin / ทุบตี

# ชั่วโมง: สคริปต์เพื่อนับไฟล์โดยใช้เวลาแก้ไข () {

echo "การใช้งาน: ${0##*/} ไดเรกทอรี" >&2

}

#! / bin / ทุบตี

# ชั่วโมง: สคริปต์เพื่อนับไฟล์โดยใช้เวลาแก้ไข () {

echo "การใช้งาน: ${0##*/} ไดเรกทอรี" >&2

}


# ตรวจสอบว่าอาร์กิวเมนต์เป็นไดเร็กทอรีถ้า [[ ! -d $1 ]]; แล้ว

การใช้งาน ทางออก1

fi


# เริ่มต้นอาร์เรย์

สำหรับฉันใน {0..23}; ทำชั่วโมง[i]=0; เสร็จแล้ว


# เก็บข้อมูล

สำหรับฉันใน $(stat -c %y "$1"/* | cut -c 12-13); ทำ j=${i/#0}

((++ชั่วโมง[j])) ((++นับ))

ทำ


# แสดงข้อมูล

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t -----\t----\t -----" สำหรับฉันใน {0..11} ; ทำ

j=$((ผม + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} เสร็จแล้ว

printf "\nไฟล์ทั้งหมด = %d\n" $count

# ตรวจสอบว่าอาร์กิวเมนต์เป็นไดเร็กทอรีถ้า [[ ! -d $1 ]]; แล้ว

การใช้งาน ทางออก1

fi


# เริ่มต้นอาร์เรย์

สำหรับฉันใน {0..23}; ทำชั่วโมง[i]=0; เสร็จแล้ว


# เก็บข้อมูล

สำหรับฉันใน $(stat -c %y "$1"/* | cut -c 12-13); ทำ j=${i/#0}

((++ชั่วโมง[j])) ((++นับ))

ทำ


# แสดงข้อมูล

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t -----\t----\t -----" สำหรับฉันใน {0..11} ; ทำ

j=$((ผม + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} เสร็จแล้ว

printf "\nไฟล์ทั้งหมด = %d\n" $count


สคริปต์ประกอบด้วยหนึ่งฟังก์ชัน (การใช้) และตัวหลักที่มีสี่ส่วน ในส่วนแรก เราจะตรวจสอบว่ามีอาร์กิวเมนต์บรรทัดรับคำสั่งและเป็นไดเร็กทอรีหรือไม่ หากไม่เป็นเช่นนั้น เราจะแสดงข้อความการใช้งานและออก

ส่วนที่สองเริ่มต้นอาร์เรย์ ชั่วโมง. ทำได้โดยกำหนดค่าแต่ละองค์ประกอบให้เป็นศูนย์ ไม่มีข้อกำหนดพิเศษในการเตรียมอาร์เรย์ก่อนใช้งาน แต่สคริปต์ของเราจำเป็นต้องตรวจสอบให้แน่ใจว่าไม่มีองค์ประกอบใดว่างเปล่า สังเกตวิธีสร้างลูปที่น่าสนใจ โดยใช้เหล็กค้ำยัน ({0...23}) เราสามารถสร้างลำดับของคำได้อย่างง่ายดายสำหรับ for คำสั่ง

ส่วนถัดไปรวบรวมข้อมูลโดยการเรียกใช้ stat โปรแกรมในแต่ละไฟล์ในไดเร็กทอรี เราใช้ ตัด เพื่อแยกชั่วโมงสองหลักออกจากผลลัพธ์ ภายในลูป เราต้องลบเลขศูนย์นำหน้าออกจากช่องชั่วโมง เนื่องจากเชลล์จะพยายาม (และล้มเหลวในท้ายที่สุด) ในการตีความค่า "00" ถึง "09" เป็นตัวเลขฐานแปด (ดูตารางที่ 34-2) ต่อไป เราเพิ่มค่าขององค์ประกอบอาร์เรย์ที่สอดคล้องกับชั่วโมงของวัน สุดท้าย เราเพิ่มตัวนับ (นับ) เพื่อติดตามจำนวนไฟล์ทั้งหมดในไดเร็กทอรี

ส่วนสุดท้ายของสคริปต์จะแสดงเนื้อหาของอาร์เรย์ ขั้นแรก เราส่งออกบรรทัดส่วนหัวสองสามบรรทัด จากนั้นจึงป้อนลูปที่สร้างเอาต์พุตสี่คอลัมน์ สุดท้ายนี้ เราส่งออกจำนวนไฟล์สุดท้าย


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: