文章目录
- 一.shell函数
- 1.作用
- 2.使用函数的优势
- 3.shell函数定义
- 3.1方式1:
- 3.2方式2:
- 4.调用函数的方法
- 5.函数返回值
- 5.1 return
- 5.2 exit
- 6.1-100奇偶求和相加
- 二.函数传参
- 1.含义
- 2.函数传参的方式
- 三.函数变量的作用范围
- 1.函数变量的作用范围
- 2.调用函数
- 2.1示例:
- 3.递归
- 3.1含义
- 3.2递归示例
- 4.阶乘
- 4.1阶乘的含义
- 4.2阶乘示例
- 5.函数库
- 6.拓展
一.shell函数
1.作用
(1)将命令序列按格式写在一起
(2)可方便重复使用命令序列
2.使用函数的优势
(1)使用函数可以避免代码冲突
(2)将大的工程可以分割为若干小的功能模块,代码的可读性更强
3.shell函数定义
3.1方式1:
[function] 函数名 () {
命令系列
[return x]————————使用return或exit可以显示地结束函数
}
3.2方式2:
函数名 () {
命令系列
}
4.调用函数的方法
函数名 [参数1] [参数2]
5.函数返回值
5.1 return
退出函数并返回一个退出值,作用于函数内部,函数返回值的范围:0~255之间(0就是成功,只要返回值非0也都认为失败,在shell中的返回码可以自定义,因此可以让成功也可以让失败。
function abc {
read -p "输入一个数字:" a
a=$(($a*2))
return 0
}
abc————————————————必须加函数名,用来调用
echo $a
5.2 exit
终止函数运行,exit0,函数执行exit语句,整个脚本将立刻停止,并把指定的退出状态码返回给调用者。
function abc {
read -p "输入一个数字:" a
a=$(($a*2))
exit 0
}
abc
echo $a
6.1-100奇偶求和相加
第一种:
oushu () {
sum1=0
for i in `seq 2 2 100`
do
sum1=$(($i+$sum1))
done
}
oushu
echo $sum1
jishu () {
sum2=0
for o in `seq 1 2 100`
do
sum2=$(($o+$sum2))
done
}
jishu
echo $sum2
total=$(($sum1+$sum2))
echo $total
第二种:
jishu () {
sum1=0
for ((i=1;i<=100;i+=2))
do
sum1=$(($sum1+$i))
done
}
jishu
echo $sum1
oushu () {
sum2=0
for ((j=2;j<=100;j+=2))
do
sum2=$(($sum2+$j))
done
}
oushu
echo $sum2
total=$(($sum1+$sum2))
echo $total
二.函数传参
1.含义
在shell中,调用函数时可以向其传递参数
在函数体内部,通过$n的形式来获取参数的值
2.函数传参的方式
方式一:
sum1 () {
sum=$[$1 + $2]
echo $sum
}
read -p "请输入第一个数:" first
read -p "请输入第二个数:" second
sum1 $first $second
[root@test1 opt]# chmod 777 cc.sh
[root@test1 opt]# ./cc.sh
方式二:
sum1 () {
sum=$[$1 + $2]
echo $sum
}
sum1 $1 $2
三.函数变量的作用范围
1.函数变量的作用范围
(1)函数在Shell脚本中仅在当前Shell环境中有效
(2)Shell脚本中变量默认全局有效
(3)将变量限定在函数内部使用local命令
2.调用函数
加了local只能在函数内部生效,如果函数外重新定义,值会被更改,
调用函数:第一步内部没定义传外部的9,第二步内部重新定义全局变量为8不受外部影响,第三步第一次已经传参进去打印。
2.1示例:
bash -x + 脚本名称 ——查看详细过程
abc () {
echo "inside $i"————————————#定义了外部9
let i++
local i
i=8
echo "inside $i"
}
i=9
abc
echo "outside $i"
3.递归
3.1含义
函数调用自己本身的函数
3.2递归示例
/etc,展示/etc 目录下的所有内容
mulu () {
for i in `ls $1`
do
if [ -d "$1/$i" ] #是否为目录
then
echo "$1$i"
muli "$1/$i"#不是目录的话要打印文件,调用查看目录下是否还有东西
else
echo "$i" #$2 为空,不传参,只输入文件名
fi
done
}
mulu $1
4.阶乘
4.1阶乘的含义
阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。
例如所要求的数是4。则阶乘式是1x2x3x4,得到的积是24,24就是4的阶乘。 例如所要求的数是6.则阶乘式足1x2x3*…6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1x2x3*…*n,设得到的积是x,x就是n的阶难。
总:输入一个数一直乘到自己,1不算,每一次自己减一再作为参数乘以自己到1不乘。
4.2阶乘示例
jiecheng () {
if [ $1 -eq 1 ]
then
echo 1
else
local number=$(($1-1))
local result=$(jiecheng $number) #自己乘自己每次的
结果减1
echo "$(($1*$result))"
fi
}
read -p "输入一个数求阶乘: " num
result=`jiecheng $num`
echo $result
5.函数库
vim hsk.sh
jiafa () {
result=$(($1+$2))
echo $result
}
jianfa () {
result=$(($1-$2))
echo $result
}
chengfa () {
result=$(($1*$2))
echo $result
}
chufa () {
if [ $2 -ne 0 ]
then
result=$(($1/$2))
echo $result
else
echo "$2不能是0!"
fi
调用数据库
vim dy.sh
. /opt/hsk.sh
read -p "请输入第一个数:" first
read -p "请输入第二个数:" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`
echo $a
echo $b
echo $c
echo $d
6.拓展
函数能够接受一个参数,参数为用户名; 判断一个用户是否存在 如果存在,就返回此用户的shell 和 UID ;并返回正常状态值; 如果不存在,就说此用户不存在;并返回错误状态值。