shell函数和数组概念(含案例,适合练习)
一、shell函数
1.1、函数的定义
1.1.1、return返回的是状态码,需要使用$?调取
1.1.2、echo 返回的是值,使用变量调用
1.1.3、传参:指位置变量
1.1.4、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
1.1.5、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。
1.1.6、return后跟数值n(0-255)
1.2、调用函数的方法
1.2.1、函数名 [参数1($1)] [参数2($2)
1.2.2、在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
1.3、shell函数应用
1.3.1、求两个数的平方相加的结果
1.3.2、比如: 5的平方加上6的平方
1 #!/bin/bash
2 read -p "请输入两个整数:" shu_1 shu_2
3
4 function sqrt (){
5 sum=$(expr $(expr $1 \* $1) + $(expr $2 \* $2))
6 }
7 sqrt $shu_1 $shu_2
二、数组
2.1、数组定义方法
- 方法一:
1 基本格式
2 数组名=(value0 value1 value2...)
- 方法二:
1 基本格式
2 数组名=([0]=value [1]=value [2]=value...)
- 方法三:数组元素之间使用空格隔开
1 基本格式
2 列表名=“value0 value1 value2”
3 数组名=($列表名)
- 方法四:
1 基本格式
2 数组名[0]=“value”
3 数组名[1]=“value”
4 数组名[2]=“value”
5 ...
2.2、数组操作
2.2.1、获取数组长度
1 基本格式 ${#数组名[@/*]}
2 例如
3 [root@localhost opt]# abc=(10 20 30 40 50)
4 [root@localhost opt]# echo ${#abc[*]}
5 5
2.2.2、读取某下标赋值
1 基本格式
2 ${数组名[下标]}
3 例如
4 [root@localhost opt]# echo ${abc[0]}
5 10
6 [root@localhost opt]# echo ${abc[1]}
7 20
8 [root@localhost opt]# echo ${abc[1]}
9 20
10 [root@localhost opt]# echo ${abc[2]}
11 30
12 ...
2.2.3、获取数组的内容
1 基本格式 ${数组名[@]}
2 ${数组名[*]}
3 以上是把数组的内容一一单列出来
4 例:
5 [root@localhost opt]# echo ${abc[*]}
6 10 20 30 40 50
2.2.4、数组切片数组,切片即读取数组的一部分
1 基本格式 ${数组名[@]:跳过的元素:元素个数}
2
3 例:从数组的第二个元素后面取,取3个元素
4 ${name[*]:2:3}
5 这里的 2 指跳过的元素,3 指获取的元素个数
2.3、数组实例
- 案例1:先输5个数放入数组,然后求出数组的最大值max
1 #!/bin/bash
2 for ((i=1;i<=5;i++));do
3 read -p "请输入第$i个数字:" num
4 abc[$i-1]=$num
5 done
6
7 max=${abc[0]}
8 for ((k=1;k<=${#abc[*]}-1;k++));do
9 if [ $max -lt ${abc[$k]} ];then
10 max=${abc[$k]}
11 fi
12 done
13 echo "最大值是:$max"
1 [root@localhost opt]# chmod +x max.sh
2 [root@localhost opt]# ./max.sh
3 请输入第1个数字:2
4 请输入第2个数字:3
5 请输入第3个数字:66
6 请输入第4个数字:33
7 请输入第5个数字:111
8 最大值是:111
- 案例2:交互由用户用户随意输一个数组,求出最大值
1 #!/bin/bash
2 read -p "请输入你的数组长度:" num1
3 for i in `seq $num1`
4 do
5 read -p "请输入$i个数:" shu
6 number[$i-1]=$shu
7 done
8 echo ${number[*]}
9 max=${number[0]}
10 for((j=1;j<=${#number[*]}-1;j++))
11 do
12 if [ ${number[j]} -gt $max ]
13 then
14 max=${number[j]}
15 fi
16 done
17 echo "最大值为$max"