近期在目录遍历时突然想到了shell中数组的概念于是乎就把需要遍历的目录结构存放到数组中,然后再取数组中值--也就是目录,做统计目录大小或文件数量使用。在该项目中目录结构非常清晰,具体目录为/年份/月份/日期/小时/相应固定的目录,比如/2019/01/31/23/xunjian/*.jpg
数组定义方法
######以下6种方法………………
定义方法1----空格分隔法赋值全部元素
数组名=( value0 value1 value2 value3 ......)
arr=(1 2 3 4 5) # 注意是用空格分开,不是逗号!!
定义方法2----下标法
数组名=([0]=value [1]=value1 [2]=value2 ....)
array
array[0]="a"
array[1]="b"
array[2]="c"
衍生出来以下三种
定义方法3----先定义列表,再引用列表的值定义数组
列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
定义方法4-----一次只赋值一个元素
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
定义方法5-----read -a 交互式
read -a 数组名
要输入的内容 #数组内容
echo ${数组名[@]} #查看
实际应用脚本
1、生成遍历的目录,存放到数组中
###根据实际情况生成目录结构,存放到数组中。
#!/bin/bash
function Yeild_Traveral_Dir() {
year="2019"
i=0
#
for cmonth in {01..12}; do
for cday in {01..31}; do
for chonr in {00..23}; do
dirn="/$year/$cmonth/$cday/$chonr"
echo "MySequence_: $i is MyDir_: $dirn"
dirs_arr[$i]=$dirn
let i++
done
done
done
echo "arr's num is : ${#dirs_arr[@]}"
#echo "arr's all elem : ${dirs_arr[@]}"
}
Yeild_Traveral_Dir
2、历数组中的目录---多种方法
###遍历数组方法很多,此处介绍两种
#方法1
function Traverval_All_Dir1() {
n=0
while [ $n -lt ${#dirs_arr[@]} ]; do
echo "first@@@@@@@@" $n ${dirs_arr[$n]}
let n++
done
}
Traverval_All_Dir1
#方法2
function Traverval_All_Dir2() {
for ((m=0;m<${#dirs_arr[@]};m++)); do
echo "second########" $m ${dirs_arr[$m]}
done
}
Traverval_All_Dir2
后面会继续使用该脚本进行需要统计的目录大小和文件数。