shell函数
函数的组成:函数名和函数体
函数的格式
function 函数名 {
命令序列
}
function cat {cat /etc/passwd}
函数名() {
命令序列
}
cat () {cat /etc/passwd}
function 函数名 (){
命令序列
}
function cat() {cat /etc/passwd}
函数相关命令
declare -F #查看当前已定义的函数名
declare -f #查看当前已定义的函数定义
unset 函数名 #删除函数
函数注意事项
注意事项
-
直接写 函数中调用函数 直接写函数名
-
同名函数 后一个生效
-
调用函数一定要先定义
-
每个函数是独立的
函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
- 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
- 退出码必须是0-255,超出的值将为除以256取余
#!/bin/bash
test1 () {
read -p "请输入一个数字:" num
return $[$num*2]
}
test1
echo $?
#return 用法
user () {
if [ $USER = root ]
then
echo "这是管理员用户"
else
echo "这不是管理员用户"
return 1
fi
}
user #调用函数
函数的传参数
test1 (){
echo $1
echo $2
}
#外边脚本的位置变量
test1 $2 $1
函数的作用范围
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
[root@localhost ~]name=meng
[root@localhost ~]xm () { name=li ; echo $name; }
[root@localhost ~]xm
wang
[root@localhost ~]echo $name
wang
加上local变量即可将变量限制在函数内
[root@localhost ~]name=qian;func1 () { local name=li ;echo $name; };echo $name
meng
[root@localhost ~]xm
wang
函数文件的使用
将函数写入文件中直接调用
os (){
if
grep -qi 'centos' /etc/os-release
then
echo "centos"
elif
grep -qi 'ubuntu' /etc/os-release
then
echo "ubuntu"
else
echo "this system not support"
fi
}
os
[root@localhost data]. functions
centos7
将函数文件写入脚本中调用
#!/bin/bash
. /mnt/functions #写函数文件的绝对路径
函数的递归
函数调用自己本身的函数
函数方式的阶乘
fact (){
if [ $1 -eq 1 -o $1 -eq 0 ]
then
echo 1
else
temp=$[$1-1] #求前一个数
result=$(fact $temp) #求前一个数的阶乘结果
echo $[$1*$result] #求现在数的阶乘
fi
}
read -p "输入计算阶乘的数" num
result=$(fact $num)
echo $result
函数的运用
使用函数判断操作系统版本脚本
# 定义函数
os (){
if
grep -qi 'centos' /etc/os-release
then
echo "centos"
elif
grep -qi 'ubuntu' /etc/os-release
then
echo "ubuntu"
else
echo "this system not support"
fi
}
#调用函数
os
if [ `os` = centos ] #os调用命令执行结果
then
yum install httpd -y
elif [ `os` = ubuntu ]
then
apt install apache2 -y
else
echo "不支持"
fi