shell中数组和文件包含
bash支持一维数组(不支持多维数组),并且没有限定数组的大小
类似与C语言,数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
定义
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开
array_name=(value1 vaule2 ... valuen) 或者 array_name=( value1 value2 ... valuen ) 也可以单独定义 array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
可以不使用连续的下标,而且下标的范围没有限制
读取数组
${array_name[index]}
[root@bogon sh]# arr=(a b 0 1 0.5) [root@bogon sh]# echo ${arr[0]} a [root@bogon sh]# echo ${arr[1]} b [root@bogon sh]# echo ${arr[4]} 0.5
使用@ 或 * 可以获取数组中的所有元素
${array_name[*]}
${array_name[@]}
[root@bogon sh]# echo ${arr[*]} a b 0 1 0.5 [root@bogon sh]# echo ${arr[@]} a b 0 1 0.5 [root@bogon sh]# for i in ${arr[*]};do echo $i;done; a b 0 1 0.5 [root@bogon sh]# for i in ${arr[@]};do echo $i;done; a b 0 1 0.5
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同
length=${#array_name[@]}
或者
length=${#array_name[*]}
取得数组单个元素的长度
lengthn=${#array_name[n]}
[root@bogon sh]# echo ${#arr[@]} 5 [root@bogon sh]# echo ${#arr[*]} 5 [root@bogon sh]# echo ${#arr[4]} 3 [root@bogon sh]# arr[5]=100 [root@bogon sh]# echo ${arr[*]} a b 0 1 0.5 100
文件包含
. filename 或者 source filename
被包含的文件不需要有执行权限
#! /bin/bash #获取本机ip ip(){ eth=$1 ifconfig|grep $eth -A1|tail -1|awk '{print $2}'|cut -d ':' -f2 } [root@bogon sh]# cat m.sh #! /bin/bash . ./ip.sh read -p '请输入网卡名称:' eth ip $eth [root@bogon sh]# sh m.sh 请输入网卡名称:eno16777736 10.105.7.108