linux命令遍历数组元素,shell脚本里For循环遍历数组变量的问题及应用介绍

读取一个文件,把每一行赋值给一个数组的变量,然后用for循环打印出来

代码如下:

#!/bin/sh

i=1

SUM=`sed -n ‘$=’ tmp.txt` #计算文件的总行数

echo “$SUM”

while read line

do

arr[$i]=”$line”

i=`expr $i + 1`

done < tmp.txt

echo “$i”

i=1

for i in `seq $SUM` ;do

echo “${arr[$i]}”

done

附:shell数组补充知识

一、声明数组

1)array[key]=value # array[0]=one,array[1]=two

2)declare -a array # array被当作数组名

3)array=( value1 value2 value3 … )

4)array=( [1]=one [2]=two [3]=three … )

5)array=”one two three” # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身

二、访问数组

1)${array[key]} # ${array[1]}

三、删除数组

1)unset array[1] # 删除数组中第一个元素

2)unset array # 删除整个数组

四、计算数组的长度

1)${#array}

2)${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

arg1=(`cat /root/1`)

arg2=(`awk '{print $2}' /root/2`)

n=0

if [ ${#arg1[*]} -ge ${#arg2[*]} ];then

x=${#arg1[*]}

for ((n=0;n

do echo ${arg1[$n]} ${arg2[$n]}

done

else

x=${#arg2[*]}

for ((n=0;n

do echo ${arg1[$n]} ${arg2[$n]}

done

fi

unset arg1

unset arg2

上面脚本用到的两个文件的内容是:

[root@localhost ~]# cat 1

1

2

3

4

5

[root@localhost ~]# cat 2

1 a

2 b

3 c

4 d

5 e

6 f

这里主要就是用到了判断两个数组长度并对比。上面arg1数组和arg2数组比长度,得出的结论是arg1数组共有5个元素,而arg2数组共有6个元素,所以设置for循环的循环次数为arg2数组的长度。

其他应用代码:

01

arr_A=(1 2)

02

arr_B=(3 4)

03

arr_C=(3 4 5)

04

05

tmp="A B C"

06

for charin $tmp

07

do

08

var="arr_"${char}"[@]"

09

for iin ${!var}

10

do

11

echo $i

12

done

13

done

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值