shell脚本之数组

一、数组的概念

在shell脚本中一般我们一个变量名对应一个变量值

[root@node5 ~]# name=zhangsan
[root@node5 ~]# echo $name
zhangsan
[root@node5 ~]# name=$HOSTNAME
[root@node5 ~]# echo $name
node5
[root@node5 ~]# name=$HOSTTYPE
[root@node5 ~]# echo $name
x86_64

如果在shell中让一个变量有多个指,那就需要shell中的数组

二、数组的定义

1.语法格式

数组名=(第一个值 第二个值 第三个值 第四个值......

2.定义数组示例

#一个值全部是数字的数组arr
[root@node5 ~]# arr=(10 11 12 13 14 15)

#一个值全部是字符串的数组arr1
[root@node5 ~]# arr1=(zhangsan lisi wangwu xiaohong xiaoqiang xiaolan)

#引用命令的执行结果作为数组
[root@node5 ~]# username=($(head -10 /etc/passwd |awk -F: '{print $1}'))

三、查看数组的值

1.查看数组内的所有值

语法:
echo ${数组名[*]}
或者
echo ${数组名[@]}
示例
#查看arr所有的值
[root@node5 ~]# echo ${arr[*]}
10 11 12 13 14 15
[root@node5 ~]# echo ${arr[@]}
10 11 12 13 14 15

#查看arr1所有的值
[root@node5 ~]# echo ${arr1[*]}
zhangsan lisi wangwu xiaohong xiaoqiang xiaolan
[root@node5 ~]# echo ${arr1[@]}
zhangsan lisi wangwu xiaohong xiaoqiang xiaolan

#查看username所有的值
[root@node5 ~]# echo ${username[*]}
root bin daemon adm lp sync shutdown halt mail operator
[root@node5 ~]# echo ${username[@]}
root bin daemon adm lp sync shutdown halt mail operator

2.查看数组某个指定的值

为了能够准确的找到数组指定的值,数组的每一个值都对应一个"下标" 。通过下标就可以找到对应的值
数组的下标是从0开始计算的

语法:
echo ${数组名[下标]}
示例:
[root@node5 ]# echo ${arr[*]}
10 11 12 13 14 15

#查看数组的第0个元素
[root@node5 ]# echo ${arr[0]}
10

#查看数组的第1个元素
[root@node5 ]# echo ${arr[1]}
11
#查看数组的第2个元素
[root@node5 ]# echo ${arr[2]}
12

四、查看数组中元素的个数

1.语法:

echo ${#数组名[*]}

2.示例

[root@node5 ]# echo ${arr[*]}
10 11 12 13 14 15
[root@node5 ]# echo ${#arr[*]}
6

五、向数组中添加元素

1.语法

数组名[下标]=

2.示例

[root@node5 ~]# test=(1 2)
[root@node5 ]# echo ${test[@]}
1 2

#插入一个元素为3的元素
[root@node5 ~]# test[2]=3
[root@node5 ~]# echo ${test[@]}
1 2 3

3.示例2

示例2中向数组中添加元素的时候 需要知道没有数据的下标,这样就比较麻烦。我们可以通过以下方式添加值

[root@node5 ~]# echo ${test[@]}
1 2 3
[root@node5 ~]# test[${#test[@]}]=4
[root@node5 ~]# echo ${test[@]}
1 2 3 4

六、删除数组中的元素

1.语法:

unset 数组名[下标]

2.示例

[root@node5 ~]# echo ${test[@]}
1 2 3 4
[root@node5 ~]# unset test[3]
[root@node5 ~]# echo ${test[@]}
1 2 3

3.注意:

[root@node5 ~]# echo ${arr[*]}
10 11 12 13 14 15
[root@node5 ~]# unset arr[1]
[root@node5 ~]# echo ${arr[*]}
10 12 13 14 15

#这里删除了arr[1]的值,这里输出 也没有了arr[1]的值。但是我们单独输出就会出现已下情况
[root@node5 ~]# echo ${arr[0]}
10
[root@node5 ~]# echo ${arr[1]}

[root@node5 ~]# echo ${arr[2]}
12

#我们发现arr[1]的值变成了空。这需要重新赋值一下。空值就没有了
[root@node5 ~]# arr=(${arr[@]})
[root@node5 ~]# echo ${arr[0]}
10
[root@node5 ~]# echo ${arr[1]}
12

七、脚本实例

以下两个脚本结合使用

1.创建fio配置文件的脚本

#!/bin/bash

blok_size=(4 8 16)
blok_len=${#blok_size[*]}
rw_proportion=(20 40 60 80)
rw_pro_len=${#rw_proportion[*]}

for ((j=0;j<blok_len;j++));do
  for i in {1..4};do
    read=$(expr $read + 20)
    write=$(expr 100 - $read)
    cat >> ./fio-rand-RW-${blok_size[$j]}K-read"$read"-write"$write".fio << END
[global]
name=fio-rand-RW
filename=fio-rand-RW
rw=randrw
rwmixread=$read
rwmixwrite=$write
bs=${blok_size[$j]}K
direct=1
numjobs=16
time_based=1
runtime=900
  
[file1]
size=10G
ioengine=libaio
iodepth=16
END
  done
  read=0
  write=0
done

2.执行fio命令压测的脚本

#!/bin/bash
list=($(ls ./|grep "fio$"))
list_num=${#list[*]}

blok_size=(4 8 16)
rw_proportion=(20 40 60 80)
rw_proportion_num=${#rw_proportion[*]}

for ((f=0;f<${#blok_size[*]};f++));do
	for ((k=0;k<$rw_proportion_num;k++));do
	 ret=$(expr $rw_proportion_num - $k - 1)
	 sudo touch "${blok_size[$f]}K-${rw_proportion[$k]}-${rw_proportion[$ret]}"
	 sudo chmod 777 "${blok_size[$f]}K-${rw_proportion[$k]}-${rw_proportion[$ret]
}"	done
done


while [ $list_num -gt 0 ] ;do
  for ((i=0;i<$list_num;i++));do
  	echo "$i ${list[$i]}"
  done
  echo -e "\n"
  flag=$(expr $list_num - 1)
  read -p "Please enter the serial number[0-$flag]:" count
  if [ -z $count ];then
    echo "Input content cannot be empty" && continue
  elif [ $count -gt $flag ];then
    echo "Serial number does not exist" && continue
  fi

  one=$(echo ${list[$count]} |awk -F"-" '{print $4}')
  two=$(echo ${list[$count]} |awk -F"-" '{print substr($5,5)}')
  three=$(echo ${list[$count]} |awk -F"-" '{print substr($6,6,2)}')
  sudo /usr/bin/fio ${list[$count]}  --output=$one-$two-$three

  unset list[$count]
  list=(${list[*]})
  list_num=${#list[*]}
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值