linux文件数组,Linux Shell--数组

定义

可以整体定义数组:

ARRAY_NAME=(value0 value1 value2 value3 ...)

或者:

ARRAY_NAME=(

value0

value1

value2

value3

...

)

此时数组的下标默认是从0开始的

还可以单独定义数组的各个分量:

ARRAY_NAME[0]=value0

ARRAY_NAME[1]=value1

ARRAY_NAME[n]=valuen

...

可以不使用连续的下标,而且下标的范围没有限制。

使用

取得数组中的元素:

valuen=${ARRAY_NAME[n]}

取得数组的全部元素:

一次性将数组中所有元素的值得到:

echo ${ARRAY_NAME[@]}

取得数组元素的个数:

length=${#ARRAY_NAME[@]}

或者

length=${#ARRAY_NAME[*]}

取得数组单个元素的长度:

lengthn=${#ARRAY_NAME[n]}

遍历

使用while循环遍历数组:

i=0

length=${#ARRAY_NAME[*]}

while [ $i -lt $length ] ; do

valuei=${ARRAY_NAME[$i]}

...

let i++

done

使用for循环遍历数组:

for value in ${ARRAY_NAME[*]} ; do

valuei=value

...

done

清空

清空单个元素:

ARRAY_NAME[n]=

将整个数组清空:

unset ARRAY_NAME

或者:

ARRAY_NAME=

应该注意unset后的变量不应该加$。

加$会清空以ARRAY_NAME的值为名称的变量。

【赛迪网讯】数组变量的赋值有两种方法:

(1) name = (value1 ... valuen) 此时下标从0开始

(2) name[index] = value

数组是在程序设计中,为了处理方便,

把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在C语言中,

数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别

数组类型

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同。

相关规则

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如: static int

a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: static int

a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为: static int

a[10]=1;(请注意:在C语言中是这样,但并非在所有涉及数组的地方都这样)

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如: static int

a[5]={1,2,3,4,5};可写为: static int

a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。

这时可用循环语句配合scanf函数逐个对数组元素赋值。

首先,什么是数组(Array)呢?

Array:其实属组也是一个变量,不过它是一个可以保存多个值的变量。通过数组的索引和下标,去引用。

注意:数组中保存的一般都是同样类型的值,但是每个值却是独立的。可以被独立使用或管理。

那么如何初始化一个数组?

初始化方法①:单独初始化

names[2]=AAA 将AAA定义为数组names的第3个元素

names[0]=BBB 将BBB定义为属组中的第1个元素

这里我们发现了,数组都是从零开始编号的。一般声明属组的时候也可以直接从1开始,但是当你声明是1的时候,0其实是存在的。

初始化方法②:多个同时初始化:用一个小括号括起来!

names=([2]=AAA [0]=BBB [1]=CCC)

这样,则是直接定义了属组names的第3个元素为AAA,第1个元素为BBB,第2个元素为CCC

对于已经明确知道顺序的即将定义的属组,我们可以直接一次性多个同时初始化

names=(BBB CCC AAA)

则在这里,就是 数组的第1位置是BBB 第2位置是CCC,第三号位是AAA

对于排序的中间缺页的,如果想跳过,直接赋值后面的。则使用:

names=(AAA [5]=BBB CCC)

则,属组的1号是AAA 6号是BBB 7号是CCC

注意:跳过缺页只能跳过一次,跳过多次则不被识别。

初始化方法③:利用循环脚本一次性初始化

有时我们的属组需要是一个文件中的每一行,或者www.linuxidc.com显示出来的每一个,那怎么办呢?

#!/bin/bash

let I=0

for FILE in `ls /var`; do

VARFILE[$I]=$FILE

let I++

done

我们利用这个脚本,则将“ls /var”下的每一个文件的名字都赋值在了数组VARFILE中

那么,当我们赋值之后,如何去将他调用出来呢?

拿初始化方法③的例子来说:

调用一个数组变量的时候要使用

echo ${VARFILE[0]}

因为我们要引用数组,而引用属组中的一个元素就要加中括号,表明我们要引用哪个,所以这里的数组变量必须要使用大括号。

如何去引用数组中的所有的值?

echo ${VARFILE[@]}

echo ${VARFILE[*]}

上面这两种方法都可以引用出一个属组的所有值,但是其中是有一定的小不同的。这个不同其实只要你将默认的间隔符改成非空格,就可以看出来了,在这里不做过多的说明。

echo ${#VARFILE[*]}

前面加#号,则显示组中的个数。

=================================================

好的,相信你差不多应该会使用数组了~那么我们来出一道题练习一下数组的使用吧!!

编写一个脚本,随机显示8个国家名称中的一个国家。

基本格式

let A=0

while [ $A -le 10 ];do

echo ${RANDOM%8}

let A++

done

我们以一个简单的示例来说明:

#!/bin/bash

service ipmi restart

if [ -f ./sensors.log ]; then

rm -f sensors.log

fi

sens=(0 2 4 5 8 9 10 11 13 14 15 16 30 31 20 21 22 23 24 25 26 27 a

b c d e) --->数组声明,数组各元素之间以空格隔开

sen0427()

{

echo -e "\033[32mStarting Get Sensor Thresholds

test\033[0m\n"

sleep 3

echo -e "\033[32mGet Sensor Thresholds test result\033[0m"

>> sensors.log

echo -e >>sensors.log

temp=0

while [ $temp -lt ${#sens[@]} ]; --->计算数组元素的个数,

' @ ' 或 '*' 代表所有元素

do

echo "0x04 0x27 0x${sens[$temp]}" >>

sensors.log

ipmitool raw 0x04 0x27 0x${sens[$temp]}

>> sensors.log

echo -e >>sensors.log

temp=$(($temp+1))

done

echo -e "\033[31mGet Sensor Thresholds test

finished\033[0m\n\n"

}

sen042d()

{

echo -e "\033[32mStarting Get Sensor Reading test\033[0m\n"

sleep 3

echo -e "\033[32mGet Sensor Reading test result\033[0m"

>> sensors.log

echo -e >>sensors.log

temp=0

while [ $temp -lt ${#sens[@]} ];

do

echo "0x04 0x2d 0x${sens[$temp]}" >>

sensors.log

ipmitool raw 0x04 0x2d 0x${sens[$temp]}

>> sensors.log

echo -e >>sensors.log

temp=$(($temp+1))

done

echo -e "\033[31mGet Sensor Reading test finished\033[0m\n\n"

}

sen0429()

{

echo -e "\033[32mStarting Get Sensor Event Enable

test\033[0m\n"

sleep 3

echo -e "\033[32mGet Sensor Event Enable test result\033[0m\n"

>> sensors.log

echo -e >>sensors.log

temp=0

while [ $temp -lt ${#sens[@]} ];

do

echo "0x04 0x29 0x${sens[$temp]}" >>

sensors.log

ipmitool raw 0x04 0x29 0x${sens[$temp]}

>> sensors.log

echo -e >>sensors.log

temp=$(($temp+1))

done

echo -e "\033[31mGet Sensor Event Enable test

finished\033[0m\n\n"

}

sen042b()

{

echo -e "\033[32mStarting Get Sensor Event Status

test\033[m\n"

sleep 3

echo -e "\033[32mGet Sensor Event Status test result\033[0m\n\n"

>> sensors.log

temp=0

while [ $temp -lt ${#sens[@]} ];

do

echo "0x04 0x2b 0x${sens[$temp]}" >>

sensors.log

ipmitool raw 0x04 0x2b 0x${sens[$temp]}

>> sensors.log

echo -e >>sensors.log

temp=$(($temp+1))

done

echo -e "\033[31mGet Sensor Event Status test

finished\033[0m\n\n"

}

sen0427

sen042d

sen0429

sen042b

数组总结:

一、数组声明:

Name=(Value1 Value2 ... ValueN) , 各数组元素之间用空格隔开,数组的下标是从0开始的。

二、删除数组变量(但不知道怎么把这个变量从数组内彻底删除掉):

unset Name[0]

三、print数组变量:

print第一个变量的值:echo ${Name[0]}

print数组内变量的个数:echo ${#Name}

print数组内全部变量:echo ${Name[*]}或者${Name[@]}

print数组内部份变量:echo ${Name[*]:2:4}

四、数组赋值:

Name[index] = value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值