1.函数
1.1函数的作用
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决
语句块定义成函数约等于别名
函数使用方法:
1.2函数的定义
【1】
function 函数名 {
命令序列
;}
【2】
函数名() {
命令序列
;}
【3】
unction func_name () {
...函数体...
}
注意事项
命令
,调用结果6.3 查看函数
delcare -F :查看函数的列表
delcare -f :查看函数的具体命令
删除函数:
unset 函数名
6.4 函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
#!/bin/bash
test1 () {
read -p "请输入一个数字:" num
echo $[$num*2]
}
result=`test1`
echo $result
6.5函数的变量范围
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
[root@localhost opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
i=9
echo $i
[root@localhost opt]# ./demo8.sh
8
9
6.6 函数的递归
函数调用自己本身的函数
阶乘:
函数调用自己
#!/bin/bash
#求 5的阶乘 需要 5-1=4 (1*2*3*4)*5
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact $1
6.7 使用函数文件
我们可以新建一个专门存放函数的文件
[root@localhost data]#vim functions
ostype (){
if grep -i -q "linux 6" /etc/os-release
then
echo "centos6"
elif grep -i -q "linux 7" /etc/os-release
then
echo "centos7"
elif grep -i -q "linux 8" /etc/os-release
then
echo "centos8"
else
echo "not linux"
fi
}
color () {
RED="echo -e E[31m"
GREEN="echo -e E[32m"
END="E[0m"
}
引用时
[root@localhost data]#. functions
[root@localhost data]#ostype
centos7
#直接当成命令使用
[root@localhost data]#color
[root@localhost data]#${GREEN}MMM$END
##会变颜色
2.数组
2.1数组的基本格式
数组名=(value0 value1 value2 value3 ......)
数组名=([0]=value [1]=value1 [2]=value2 ....)
列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
数组的包括数据类型
- 数值型
- 字符型
- 混合型数字加字符
输出第一一个数值 注意是从0开始计算
列出所有参数
[root@localhost ~]# echo ${a[*]} //*代表所有参数
1 2 3 4 5
[root@localhost ~]# echo ${a[@]} //@同*
1 2 3 4 5
共有多少个位置
[root@localhost ~]# echo ${#a[@]} //前面加#数组的长度
5
[root@localhost ~]# echo ${#a[*]}
5
#数组分隔
[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ky15]#echo ${a[@]:0:5}
1 2 3 4 5
[root@localhost ky15]#a[1]=9
#数组替换
[root@localhost ky15]#echo ${a[1]}
9
[root@localhost ky15]#echo ${a[@]}
1 9 3 4 5
【数组遍历】
#!/bin/bash
a=(1 2 3 4 5)
for i in ${a[@]}
do
echo $i
done
a=(1 2 3 4 5)
echo ${a[@]/4/66} #${数组名[@或*]/查找字符/替换字符}
echo ${a[@]} #并不会替换数组原有内容
【取出数组中的最大值和最小值】
最大值
#!/bin/bash
a=( 10 20 50 40 100 )
max=${a[0]}
l=${#a[*]}
for ((i=0;i