当前位置:网站首页>Shell脚本:函数
Shell脚本:函数
2022-08-09 02:50:00 【UC 震惊部】
目录
一、函数的基本格式
1.
function 函数名{
命令序列
}
2.
函数名(){
命令序列
}
3.
function func_name () {
...函数体...
}
主要事项:
- 直接写 函数中调用函数 直接写函数名
- 同名函数 后一个生效
- 调用函数一定要先定义
- 只要先定义了调用的 其他函数定义顺序无关
func_name (){
...函数体...
}
定义函数
[[email protected] data]#func1 (){ hostname;date;}
#定义函数
[[email protected] data]#func1
#调用函数
localhost.localdomain
2021年 10月 23日 星期六 10:23:50 CST
#注意调用的位置
h () {
echo "hello"
}
nihao () {
echo `h` `w`
}
w () {
echo "world"
}
nihao
####
同名函数
1、查看函数
[[email protected] ~]# declare -F
#函数列表
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
[[email protected] ~]# declare -f
#函数具体的定义
判断操作系统版本:
[[email protected] ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2、删除函数
unset func_name
[[email protected] ~]# dir
anaconda-ks.cfg pricegame.sh sum.sh 公共 视频 文档 音乐
initial-setup-ks.cfg sum1.sh yum.sh 模板 图片 下载 桌面
二、函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
退出码必须是0-255,超出的值将为除以256取余

怎么解决超过 255

return用法
user () {
if [ $USER = root ]
then
echo "这是管理员用户"
else
echo "这不是管理员用户"
return 1
fi
}三、函数的传参数
sum1 (){
sum=$[$1 +$2]
echo $sum
}
read -p "请输入第一个参数:" num1
read -p "请输入第一个参数:" num2
sum1 $num1 $num2
sum1 () {
sum=$[$1 + $2]
echo $sum
}
sum1 10 20
函数变量的作用范围:
- 函数在shell脚本中仅在当前的shell环境中有效
- shell脚本中函数的变量默认全局有效
- 将变量限定在函数内部使用local命令
[[email protected] opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
[[email protected] opt]# chmod +x demo8.sh
[[email protected] opt]# ./demo8.sh
8
[[email protected] opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
echo $i
[[email protected] opt]# ./demo8.sh
8
8
[[email protected] opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
i=9
myfun
echo $i
[[email protected] opt]# ./demo8.sh
8
8 
[[email protected] opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
i=9
echo $i
[[email protected] opt]# ./demo8.sh
8
9
四、函数的作用范围
[[email protected] ~]#name=qian
[[email protected] ~]#func1 () { name=li ; echo $name; }
[[email protected] ~]#func1
li
[[email protected] ~]#echo $name
li
[[email protected] ~]#name=qian;func1 () { local name=li ;echo $name; };echo $name
#加上local变量即可将变量限制在函数内
qian

函数库

通过source将2.sh的脚步放到当前环境下使用,就可以调用函数库

五、函数递归
func () { let i+ +;echo $i;echo "run fast";func; }
只要你系统不奔溃,就会一直加下去
i=0
let i+ + 0+ 1 run fast 调用自己的函数 计算过后 i = 1
i= 1
let i+ + 1 + 1 =2 run fast 调用自己的函数 计算过后 i =2
i=2
let i+ + 2+ 1 =3 run fast 调用自己的函数 计算过后 i =3
....................................................................................
函数调用自己本身,必须要有结束函数的语句,防止死循环
用for循环
#!/bin/bash
sum=1
read -p "请输入一个数字:" num
for i in `seq $num`
do
let sum=$[i*sum]
done
echo $sum
函数调用自己
#!/bin/bash
#
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact $1
边栏推荐
猜你喜欢
![Postman interface test [official website] latest version installation and use tutorial](/img/b6/d1094eed084abd88ec4f3d65e8836d.png)
Postman interface test [official website] latest version installation and use tutorial

VS2019编译boost_1_79,生成32位和64位静态库

工作小计 rtcp的length和网络字节序

MySQL相关知识 和 数据的存储相关知识

多御安全浏览安卓版升级尝鲜,新增下载管理功能

Working subtotal rtcp length and network byte order

Take you do interface test from zero to the first case summary

Zabbix 5.0 监控教程(四)

普通人如何增加收入

redis集群详解
随机推荐
MES对接Simba实现展讯平台 IMEI 写号与耦合测试
旋转霓虹圆圈
OJ:L2-012 关于堆的判断
全志通过fastboot烧写boot.img
A40i gxl3680 ts_print报错:tslib: Selected device is not a touchscreen (must support ABS and KEY event
原文翻译:Structure Aware Single-stage 3D Object Detection from Point Cloud
[Redis] The core principle of master-slave replication
LintCode 146. 大小写转换 II
【无标题】
Recently, I have seen a lot of people who want to study by themselves or enroll in classes but don’t know how to choose. I will tell you about it today.
Pytest+request+Allure实现接口自动化框架
The building had been registry cluster, load balancing
按钮点击动画
Jenkins的环境部署,(打包、发布、部署、自动化测试)
【洛谷】P1082 同余方程
Postman interface test [official website] latest version installation and use tutorial
让历史文化“活”起来,北京河图“万象中轴”助力打造北京城市金名片
普通人如何增加收入
最近看到很多人想自学或者报班但是不清楚如何选择,我今天就和大家说说
独立机器连接cdh的spark集群,远程提交任务(绝对可以成功,亲测了n遍)