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