有规划的bash变量组

什么是数组?

一个变量:里面存放多个变量,他们有各自的代号,但需要user自行定义数组元素的代号:

索引代号:将数组里面的元素由【0,1,2....n】来标识

关联代号:用户自定义的字符串来标识,只有bash4.0以上版本支持(本机不是所以无法测试)

数组的定义和引用:

定义数组:VAR=(value1 value2 value3 value4) 直接定义数组元素内容,系统会自动给予标识

引用数组

[root@localhost~]#var1=(123456)
[root@localhost~]#echo"${var1[1]}"
2
[root@localhost~]#echo"${var1[0]}"
1
[root@localhost~]#echo"${var1[5]}"
6

注意:数组元素之间拿空格隔开

注意:引用数组时,加${},[]:里面的内容是标识符

VAR1=([0]="value1" [2]="value2" [4]="value3") 定义时连同标识一起定义,没由定义的标识其元素内容认为空值

[root@localhost~]#VAR1=([0]=value1[2]=value2[3]=value3)
[root@localhost~]#echo"${VAR1[0]}"
value1
[root@localhost~]#echo"${VAR1[2]}"
value2
[root@localhost~]#echo"${VAR1[3]}"
value3
[root@localhost~]#echo"${VAR1[1]}"

其他定义方法

declare命令

-a to make NAMEs indexed arrays (if supported)

将其后的变量名称声明为索引数组,如果支持

-A to make NAMEs associative arrays (if supported)

将其后的变量名声明为关联数组,如果支持

分别定义法

WC_NAME[0]="VALUE1"

WC_NAME[1]="VALUE2"

WC_NAME[3]="VALUE4"

[root@localhost~]#WC_NAME[0]="VALUE1"
[root@localhost~]#WC_NAME[1]="VALUE2"
[root@localhost~]#WC_NAME[3]="VALUE4"
[root@localhost~]#echo"${WC_NAME[0]}"
VALUE1
[root@localhost~]#echo"${WC_NAME[2]}"

引用整个数组中的所有元素:

${NAME[*]} 或者${NAME[@]}

[root@localhost~]#echo"${WC_NAME[*]}"
VALUE1VALUE2VALUE4

引用整个数组的所有元素的索引号

${!NAME[*]} 或者${!NAME[@]}

[root@localhost~]#echo"${!WC_NAME[*]}"
013

查看数组中的元素的个数

${#NAME[*]} 或者${#NAME[@]}

[root@localhost~]#echo"${#WC_NAME[*]}"
3


数组切片:

${NAME[*]:offset}

//显示包括offset数值(索引标识)所对应表示位置的元素及其后所有的元素

[root@localhost~]#echo"${WC_NAME[*]:1}"
VALUE2VALUE4

${NAME[*]:offset:number}

//显示包括offset数值所对应表示位置的元素及其后共number个数的值

[root@localhost~]#echo"${WC_NAME[*]:0:1}"
VALUE1
[root@localhost~]#echo"${WC_NAME[*]:1:1}"
VALUE2

撤销数组:

unset NAME

----------------------------------------------------------------------------------------------

脚本中与用户交互的变量


位置参数变量:

$0:命令的本身,对于脚本而言,就是脚本的路径

$1,$2,...$N;脚本后面通过命令行给脚本传递的命令行参数

N>9时,引用该位置变量需要加{}即${10}


特殊变量:

$@:给出的所有位置参数的列表,当使用双引号引用时,每个参数作为单独的字符串存在

[root@localhost~]#foriin"${WC_NAME[@]}";doecho"$i";done
VALUE1
VALUE2
VALUE4

$*:给出的所有位置参数的列表,当使用双引号引用时,整个参数列表被当做一个字符串

[root@localhost~]#foriin"${WC_NAME[*]}";doecho"$i";done
VALUE1VALUE2VALUE4

$#:表示除了$0,外,脚本里参数的个数

如:我们编写一个求任意俩个整数之间奇数和偶数和的脚本

#!/bin/bash

#

if [ $# -ne 2 ];then

echo "Must input two parameter"

exit 6

else

inter1=$1

inter2=$2

sum1=0

sum2=0

if [[ "$inter1" =~ [^[:digit:]] ]] || [[ "$inter2" =~ [^[:digit:]] ]];then

echo "They shoud be integers"

else

if [ $inter1 -gt $inter2 ];then

exchange=$inter1

inter1=$inter2

inter2=$exchange

fi

judgment=$[inter1%2]

for i in $(seq $inter1 2 $inter2);do

sum1=$[sum1+i]

done

for j in $(seq $[inter1+1] 2 $inter2);do

sum2=$[sum2+j]

done

if [ $judgment -eq 1 ];then

echo -e "奇数和 : $sum1\n偶数和 : $sum2"

else

echo -e "奇数和 : $sum2\n偶数和 : $sum1"

fi

fi

fi

[root@localhost~]#bashsum119
奇数和:25
偶数和:20

其中 数字1 和 9 分别是脚本中的 $1 和 $2

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...