目录
一、理论
1.shell函数
2.函数传参
3.函数变量的作用范围
4.递归
5.函数位置变量与脚本位置变量区别
6.创建库
二、实验
1.实验一
一、理论
1.shell函数
(1)概念
将命令序列按格式写在一起,可方便重复使用命令序列。
① 避免代码重复;
② 把大工程分割为若干小块,代码的可读性更强。
(2)shell函数定义
① function 函数名 () {
函数内容
}
② function 函数名 {
函数内容
}
③ 函数名 () {
函数内容
}
(3)函数返回值
① exit退出函数,脚本中使用exit退出函数时直接退出整个脚本,脚本后续内容不再执行。
② return退出函数,脚本使用return退出函数时只退出函数,不影响脚本后续内容执行。
退出状态码必须是0~255,超出时值将为除以256取余。
0是成功,1是失败,返回非0,也是失败
(4)函数使用步骤
① 首先是定义函数
② 其次是调用函数(注意:若定义完成不调用则函数无效)
③ 查看系统限制所有函数:declare -F
④ 查看函数定义详细内容:declare -f 函数名
⑤ 删除函数:unset 函数名
2.函数传参
在Shell中,调用函数时可以向其传递参数。
在函数体内部,通过$n的形式来获取参数的值。
1.第一种方法
sum1() {
sum=$[$1 + $2]
echo $s
}
read -p "输入第一个数" first
read -p "输入第二个数" second
sum1 $first $second
2.第二种方法
sum() {
s=$[$1 + $2] ///$1 $2 传递位置参数
echo $s
}
sum $1 $2 ///$1 $2 代表执行脚本函数时命令后面跟的两个参数位置参数
3.函数变量的作用范围
(1)全局变量 (函数外变也不变)
函数在shell脚本中仅在当前shell环境中有效Shell脚本中变量默认全局有效
(2)局部变量(函数外变则变)
将变量限定在函数内部使用local命令
4.递归
函数调用自己本身的函数
(1)阶乘
原理:4 * $result (3* $result (2* result(1) ) )
(2)递归目录
嵌套函数,$2为空值
5.函数位置变量与脚本位置变量区别
(1)当函数中有$1、$2等位置变量时表示的是调用函数时函数名后跟着的位置变量12
(2)函数外的$1、$2等才表示是执行脚本时脚本名称后跟着的位置变量12
6.创建库
在一个脚本当中建立多个函数,用于别的脚本来调用该库中的函数。
jiafa() {
echo $[$1 + $2]
}
chengfa() {
echo $[$1 * $2]
}
jianfa() {
echo $[$1 - $2]
}
chufa() {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
}
在脚本中调用
#!/bin/bash
. /root/3.sh
read -p "输入第一个参数值:" first
read -p "输入第二个参数值:" second
result1=`jiafa $first $second`
result3=$(chengfa $first $second)
result2=`jianfa $first $second`
result4=$(chufa $first $second)
echo $result1
echo $result2
echo $result3
echo $result4
二、实验
1.实验一
函数能够接受一个参数,参数为用户名; 判断一个用户是否存在 如果存在,就返回此用户的shell 和 UID ;并返回正常状态值; 如果不存在,就说此用户不存在;并返回错误状态值;在主程序中调用函数。
(1)脚本截图
主程序
调用函数
(2)运行结果