bash编程数组

  数组定义:数组是存储多个类似元素的连续的内存空间。 和变量相比,变量是存储单个元素的内存空间。
声明数组
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

 

 

你可能感兴趣的:(bash编程数组)