本文是我学习Hadoop搭建过程中的各种笔记,内容来自于各种公开的教程,起点非常低,从Linux基础开始,直至在PC上搭建Hadoop成功,是真正的从零开始。
感谢过程中帮助我的各位认识的和不认识的老师。
22、shell中的数组和注释:
shell数组:
bash(shell的一种解释器)支持一维数组(不支持多维数组),并且没有限定数组大小。
类似与C语言,数组元素的下标由0开始编号。
获取数组中的元素要利用下标,下标可以是整数或算数表达式,其值应大于或等于0。
1、 定义数组
在shell中,用括号来表示数组,数组元素用“空格”符号分隔开,定义数组的一般形式为:
数组名=(值1 值2 值3…值n)
例如:
array_name=(value0 value1 value2 value3)
或者:
array_name=(
value0
value1
value2
value3)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制
2.读取数组
读取没有的数组也不会报数组越界异常,就是查询不出来
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
使用@或*符合可以获取数组中的所有元素,例如:
echo ${array_name[@]}
3.获取数组的长度
获取数组的长度的方法与获取字符串长度的方法相同,例如:
获取数组元素的个数:length=${#array_name[@]} 或 length=${#array_name[*]}
4.获取数组单个元素的长度
length n=${#array_name[n]}
新建一个数组脚本:vi ./array.sh (array数组的意思)
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
echo arr1
修改权限:
[root@hadoop01 shell]# chmod 744 ./array.sh
执行:(只打印出来了字符串,未把arr1当成变量)
[root@hadoop01 shell]# array.sh
arr1
取数组的所有值:echo ${arr1[*]} 或 echo ${arr1[@]} *和@ 表示取所有的值
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
echo ${arr1[*]}
[root@hadoop01 shell]# array.sh
1 2 3 4 hello world
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
echo ${arr2[*]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
取数组中固定的值,取第二个值:echo ${arr1[1]}
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
取没有的值,取出来是个空的,不报错
数组定义的另一种方式:
arr3[0]=1
arr3[1]=3
arr3[3]=hello
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
arr3[0]=1
arr3[1]=3
arr3[3]=hello
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
echo ${arr3[3]}
echo ${arr3[2]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
hello
重赋值:
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
arr3[0]=1
arr3[1]=3
arr3[3]=hello
arr3[3]=world
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
echo ${arr3[3]}
echo ${arr3[2]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
world
取所有值:
[root@hadoop01 shell]# vi ./array.sh
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
arr3[0]=1
arr3[1]=3
arr3[3]=hello
arr3[3]=world
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
echo ${arr3[3]}
echo ${arr3[2]}
echo ${arr3[@]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
world
1 3 world
取数组的元素长度:echo ${#arr1}
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
arr3[0]=1
arr3[1]=3
arr3[3]=hello
arr3[3]=world
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
echo ${arr3[3]}
echo ${arr3[2]}
echo ${arr3[@]}
echo ${#arr1}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
world
1 3 world
1 (不行)
#!/bin/bash
arr1=(1 2 3 4 'hello' 'world')
arr2=(
1
2
3
4
5
6
helloworld
'hello qianfeng')
arr3[0]=1
arr3[1]=3
arr3[3]=hello
arr3[3]=world
echo ${arr2[*]}
echo ${arr1[1]}
echo ${arr2[7]}
echo ${arr2[10]}
echo ${arr3[3]}
echo ${arr3[2]}
echo ${arr3[@]}
echo ${#arr1}
echo ${#arr1[*]}
[root@hadoop01 shell]# array.sh
1 2 3 4 5 6 helloworld hello qianfeng
2
hello qianfeng
world
1 3 world
1
6
shell 注释
以“#”开头行就是注释,会被shell的解释器忽略。(除第一行的解释器以外)
sh里没有多行注释,只能每一行加一个“#”号。
注意:
如果在开发过程中,遇到大段的代码需要临时注释起来,过一会又取消注释,怎么办?
每一行加个#符号太费事,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行了,达到了和注射一样的效果。←麻烦