OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

访问数组元素

那么数组有什么用呢? 正如电子表格程序可以执行许多数据管理任务一样,许多编程任务也可以使用数组执行。

让我们考虑一个简单的数据收集和演示示例。 我们将构建一个脚本来检查指定目录中文件的修改时间。 根据这些数据,我们的脚本将输出一个表格,显示文件上次修改的时间。 这样的脚本可用于确定系统何时最活跃。 这个脚本叫做 个小时里, 产生这个结果:


图片

[我@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) 上次修改的文件数。 产生这个的代码如下:



#!/斌/庆典

# hours: 通过修改时间使用来统计文件的脚本 () {

echo "用法:${0##*/} 目录" >&2

}

#!/斌/庆典

# hours: 通过修改时间使用来统计文件的脚本 () {

echo "用法:${0##*/} 目录" >&2

}


# 检查该参数是否为目录 if [[ ! -d $1]]; 然后

用法出口 1

fi


# 初始化数组

对于 {0..23} 中的 i; 做 hours[i]=0; 完毕


# 收集数据

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

((++小时[j])) ((++计数))

完成


# 显示数据

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t-----\t----\t-----" for i in {0..11} ; 做

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} 完成

printf "\n总文件数 = %d\n" $count

# 检查该参数是否为目录 if [[ ! -d $1]]; 然后

用法出口 1

fi


# 初始化数组

对于 {0..23} 中的 i; 做 hours[i]=0; 完毕


# 收集数据

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

((++小时[j])) ((++计数))

完成


# 显示数据

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t-----\t----\t-----" for i in {0..11} ; 做

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} 完成

printf "\n总文件数 = %d\n" $count


该脚本包含一个函数 (用法) 和具有四个部分的主体。 在第一部分中,我们检查是否有命令行参数并且它是一个目录。 如果不是,我们会显示使用信息并退出。

第二部分初始化数组 个小时里. 它通过为每个元素分配零值来实现这一点。 在使用之前没有特别要求准备数组,但是我们的脚本需要确保没有元素为空。 请注意构建循环的有趣方式。 通过使用大括号扩展 ({0..23}),我们能够轻松地为 HPMC胶囊 命令。

下一部分通过运行 统计 目录中的每个文件上的程序。 我们用 从结果中提取两位数的小时。 在循环内部,我们需要从小时字段中删除前导零,因为 shell 会尝试(并最终失败)将值“00”到“09”解释为八进制数(见表 34-2)。 接下来,我们递增与一天中的小时对应的数组元素的值。 最后,我们增加一个计数器() 来跟踪目录中的文件总数。

脚本的最后一部分显示数组的内容。 我们首先输出几个标题行,然后进入一个产生四列输出的循环。 最后,我们输出文件的最终计数。


OnWorks 的顶级操作系统云计算: