数组定义:数组是存储多个类似元素的连续的内存空间。 和变量相比,变量是存储单个元素的内存空间。
声明数组
declare -a ARRAY_NAME
declare -A ARRAY_NAME:关联数组
数组元素的赋值
(1) 一次只赋值一个元素:
ARRAY_NAME[INDEX]=VALUE
例子:weekdays[0]="Sunday"
weekdays[4]="Thursday"
(2) 一次赋值全部元素:
ARRAY_NAME =("VAL1" "VAL2" "VAL3" ......)
(3) 只赋值特定元素:
array_name = ([0]="vall" [3]='val2' ... )
(4) read -a ARRAY
关联数组赋值: array_name = ([index_name]='val1' [index_name]='val2')
-eq //等于
-ne //不等于
-gt //大于(greater then )
ge //大于等于
-lt //小于(less then )
le //小于等于
例1:
--生成10个随机数,并找出其最大值和最小值:
declare -a rand // 声明数组
declare -i max=0 //将变量声明为整数。
for i in {0..9}; do // 从 0到9循环比较
rand[$i]=$RANDOM // 数组变量是随机数
echo "${rand[$i]}" //输出随机数
[ ${rand[$i]} -gt $max ] && max=${rand[$i]} // #随机数逐个比较,大的赋值给max
done
echo "Max: $max"
例2.
定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件,要统计其下标为偶数的文件中的行数之和
declare -a files // 数组
files=(/var/log/*.log) // log目录下所有的log文件
declare -i lines=0 // 定义行数初始化为整数
for i in $(seq 0 $[${#files[*]}-1]); //百度 ${#file[*]} //所有元素的个数 seq 用于生成从一个数到另一个数之间的文件。
do
if [ $[$i%2] -eq 0 ]; then
let lines+=$(wc -l ${files[$i]} | cut -d ' ' -f1) //两个变量之和 wc命令用于统计文档的行数,字符数或词数; 统计流入到空格文档的行数
#= let lines+=`wc -l ${files[$i]} | cut -d ' ' -f1`
fi
done
echo "lines:$lines"
执行后例2的第7行报let: : syntax error: operand expected (error token is " ")
let lines+=$(wc -l ${files[$i]} | cut -d ' ' -f 1) 也就是这段语句, 注意 要 -f 和 1 要隔开,表示是流入到空格文档的第一段行数
执行第四行的时候也报错了 line 4: declare: ` ': not a valid identifier
declare -i lines=0 这个是格式问题 把 0 后面的空格去掉就可以了。
概念:cut命令用来截取某一个字段 格式:cut -d [-cf] n cut -d截取分割符号为“:”, -f 1 表示截取第一段,1,2表示前两段,1-3表示头三段。
-d 后面跟分割字符,分割字符要用单引号括起来
-c 后面接的是第几个字符
-f 后面接的是第几个区块
转载:
https://www.cnblogs.com/liangjindong/p/9042648.html