数组&基本运算
#数组
一组具有相同数组类型的集合
数组类型:
数值类型:
字符串类型:
Bash提供一堆数组的变量功能,数组中所有变量都会被编录成索引,数组的索引从0开始
创建数组:
1.name[subscript]=value
2.Name=(value1…valuen)
3.Declare -a 定义一个空数组
获取数组的值
可以使用echo
n
a
m
e
[
s
u
b
s
c
r
i
p
t
]
通
过
索
引
得
到
数
组
的
值
如
果
s
u
b
s
c
r
i
p
t
是
@
或
者
∗
,
则
将
调
用
所
有
的
数
组
成
员
如
果
使
用
{name[subscript]}通过索引得到数组的值 如果subscript是@或者*,则将调用所有的数组成员 如果使用
name[subscript]通过索引得到数组的值如果subscript是@或者∗,则将调用所有的数组成员如果使用{#name[subscript]}可以返回${name[subscript]}长度
如果是*或者@,则返回数组中元素个数
[root@bogon ~]# a[1]=11 #定义数组下标一等于11
[root@bogon ~]# a[2]=22
[root@bogon ~]# a[3]=33
[root@bogon ~]# echo $a #查看定义数组 没下标不显示
[root@bogon ~]# echo ${a[2]} #查看数组必须要有下标
22 #出列表值
[root@bogon ~]# echo ${a[-1]} #查看数组下标负一
-bash: a: bad array subscript #提示下标从0开始
[root@bogon ~]# echo ${a[]} #查看数组中所有成员
11 22 33
[root@bogon ~]# echo ${a[@]} # #查看数组中所有成员
11 22 33
[root@bogon ~]# echo ${#a[@]} #查看数组的长度
3 #有三个值
[root@bogon ~]# a[8]=6666 #a数组下标8赋值6666
[root@bogon ~]# echo ${#a[8]} #打印a数组下标8的长度
4 #长度4 因为下标8的值是6666
[root@bogon ~]# echo
a
[
0
]
,
{a[0]},
a[0],{a[1]},${a[2]} #查看a数组的三个下标
,11,22 #下标0 无值
[root@bogon ~]# a[0]=00 #给数组a下标0赋值
[root@bogon ~]# echo
a
[
0
]
,
{a[0]},
a[0],{a[1]},${a[2]} #查看a数组的三个下标
00,11,22
[root@bogon ~]# echo ‘length of b_0 is’ ${#b[0]} #显示下标0的字长
length of b_0 is 2
[root@bogon ~]# echo KaTeX parse error: Expected '}', got '#' at position 2: {#̲b[*]} #显示数组b全…{arr_num[]}
arr_length=${arr_string[@]}
#列出索引下标
echo KaTeX parse error: Expected 'EOF', got '#' at position 15: {!arr_num[@]} #̲读取某个下标的值: arr_i…{arr_num[2]}
#对某个下标进行赋值
下标存在:相当与修改原有的值
arr_num[2]=100
下标不存在,按照升序走
arr_num[23]=100
#删除操作:
清除某个元素:
Unset arr_num[1]
清除整个数组:
Unset arr_num
#数组的切片:
格式:${数组名[@/]:开始下标:结束下标}
Echo ${arr_string[]:2:3}
#数组的遍历
For i in ${arr_string[@]};do #循环这个数组给i
Echo $i; #打印变量i
Done #结束
[root@bogon ~]# arr_num=(1 2 3 4 5 ) #数值行数组
[root@bogon ~]# arr_string=(‘aa’ ‘bb’ ‘cc’) #字符型数组
[root@bogon ~]# echo ${arr_num[]} #打印数组所有值
1 2 3 4 5
[root@bogon ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 18: …rr_string[*]} #̲打印数组所有值 @也行 aa …{#arr_num[]} #将数组所有下标赋值给arr_lengrt
[root@bogon ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 13: arr_length #̲打印arr_lengrt得出a…{#arr_string[]} #将数组所有下标赋值给arr_lengrt
[root@bogon ~]# echo $arr_length #打印arr_lengrt得出arr_bum的下标数
3
[root@bogon ~]# echo ${!arr_num[]} #获取数组下标
0 1 2 3 4
[root@bogon ~]# echo ${!arr_string[]} #获取数组下标
0 1 2 3
[root@bogon ~]# echo ${arr_string[]:2:3} #数组切片
cc dd #把下标2 3 打印出来
[root@bogon ~]# for i in ${arr_string[@]};do #循环数组给变量i
echo $i; #打印变量i
done #结束
aa
bb
cc
dd
算数运算
在bash中可以使用let,(()),
(
(
)
)
或
者
(())或者
(())或者[]进行基本的整数运算,还可以使用bc进行高级运算,包括小数运算,还可以使用expr命令进行整数运算,还能判断参数是否为整数
注意:let和(())几乎完全等价,除了做数学运算,还支持数据表达式判断,例如数值a是否等于3
Let a3或((a3)),但一般不用,我们用test命令来做,test‘$a’-eq 3
Num =10
Let num=num+10 # 等价于 let num+=10
Let num=num-10 #等价于 let num-=5
Echo $num
let可以使用(())进行替换,如果最后一个算数表达式的结果为0,则返回状态码1,否则返回0
(
(
)
)
或
者
(())或者
(())或者[]
Num=10
Echo $((num+=6))
Echo
[
n
u
m
−
+
=
16
]
此
操
作
也
可
以
为
变
量
赋
值
N
u
m
=
[num-+=16] 此操作也可以为变量赋值 Num=
[num−+=16]此操作也可以为变量赋值Num=((num-=10));echo
n
u
m
N
u
m
=
num Num=
numNum=[num-=6];echo
n
u
m
在
算
数
计
算
过
程
中
,
等
号
右
边
的
变
量
可
以
带
着
num 在算数计算过程中,等号右边的变量可以带着
num在算数计算过程中,等号右边的变量可以带着符号,但等号左边的变量不允许带KaTeX parse error: Expected 'EOF', got '#' at position 12: 符号 Let num=#̲num-1 == let …((
n
u
m
−
1
)
)
=
=
n
u
m
=
num-1)) == num=
num−1))==num=((num-1))
[root@bogon ~]# num=10 #变量num等于10
[root@bogon ~]# let num=num+10 #+10
[root@bogon ~]# echo $num
20
[root@bogon ~]# let num+=10 #+10
[root@bogon ~]# echo $num
30
[root@bogon ~]# let num=num-5 #-5
[root@bogon ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 22: … [root@bogon ~]#̲ num=((num+25)) #+25
[root@bogon ~]# echo $num
50
[root@bogon ~]# echo $num #打印变量
50
[root@bogon ~]# echo $((num-=6)) #数值运算num变量-6
44
[root@bogon ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 30: … [root@bogon ~]#̲ number=((num-=10));echo $number #num变量-10 在赋值给number
24 #打印number 等于24
[root@bogon ~]# num=10 ##num变量等于10
[root@bogon ~]# echo $[num++] #++代表加1 但现在打印不出来 下次生效
10
[root@bogon ~]# echo $[num–] #- -代表-1 打印出来结果是11 这是上次结果
11 #本次结果得下次打印出来
[root@bogon ~]# echo $[num++]
10
$((x+y)) 加法运算 echo $((1+2))
$((x-y)) 减法运算 echo $((1-2))
$((xy)) 乘法运算 echo $((23))
$((x/y)) 除法运算(取商) echo $((8/6))
$((x%y)) 取于运算 echo $((5%3))
$((x++)) 自加运算 echo $((9++))
$((x–)) 自减运算 echo $((9–))
$((xy)) 幂运算 echo $((33))