当前位置: 首页 > news >正文

shell脚本之函数

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

函数

一,什么是函数
函数是一段功能代码,用来解决shell编程中冗余代码[重复且不连续出现的功能性代码]的问题
1、把相同的程序段定义为函数,可以减少整个程序段代码量,提升开发效率。
2、增加程序段可读性、易读性,提升管理效率。
3、可以实现程序功能模块化,使得程序具备通用性(可移植性)。

### 1. 先定义函数函数名(函数的唯一标识) + 函数体(功能代码)
### 2. 调用函数
### 函数定义的语法
## 1. 标准shell的函数定义function 函数名(){函数体linux命令if-else循环变量----(局部变量)return 返回值}
## 2. 简化写法1function 函数名{函数体linux指令if-else循环变量定义使用return 返回值}
## 3. 简化写法2函数名(){函数体return 返回值;}
### 函数调用
函数名
案例:
# 定义函数
function print(){echo "床前明月光"echo "疑是地上霜"echo "举头望明月"echo "低头思故乡"return 10下方不允许在写代码 ---- 不可达
}
# 函数调用
print
  1. 执行函数时,直接写函数名即可 无需添加其他内容
  2. 函数必须先定义,再执行 ----- shell脚本是自上向下加载执行
  3. 想要在函数内部定义局部变量,使用​ local ​关键字
  4. 函数如果单独写入一个文件里,建议使用 source 去执行该文件
  5. 函数返回的结果,可以通过 $? (全局变量) 进行获取
return语句和exit语句
相同点:都可以让程序返回
不同点:
1. return 只是代表当前函数执行结束,返回一个结果(返回值)
2. exit 代表当前文件执行结束
3. exit 可以结束当前shell环境,回到上一层 父shell
函数实践
1. 定义函数
2. 执行函数调用

场景一: 在同一个shel文件中,定义和使用函数

案例:
[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){echo "HelloWorld"return 100
}#函数调用
hello执行结果:
[root@centos-128 abc]# ./fun2.sh
HelloWorld
[root@centos-128 abc]# echo $?
100[root@centos-128 abc]# set | grep "hello"
[root@centos-128 abc]# hello      ### 此时 函数和变量位于子shell环境 父shell 拿不到
-bash: hello: 未找到命令
[root@centos-128 abc]# source fun2.sh    ### 将执行的变量和函数 引入当前的 shell环境[source其实是引用
当前的shel环境去执行文件 不开启子shell]
HelloWorld
[root@centos-128 abc]# set | grep "hello"
hello ()
[root@centos-128 abc]# hello
HelloWorld

#source与.#

将执行的变量和函数 引入当前的 shell环境[source其实是引用当前的shel环境去执行文件 不开启子shell]

场景二:

1.函数写在一个文件中,只做定义 不做执行

2.另外一个脚本中 读取该函数文件 且加载该函数

[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){echo "HelloWorld"return 100
}
[root@centos-128 abc]# cat fun5.sh
#!/bin/bash
[ -e /abc/fun2.sh ] && source /abc/fun2.sh || exit
hello
[root@centos-128 abc]# ./fun5.sh
HelloWorld
[root@centos-128 abc]# echo $?
100
函数脚本传入参数

[root@centos-128 abc]# cat fun3.sh
#!/bin/bash
function print(){echo "print函数调用执行"echo "第一个参数:$1  第二个参数:$2  第三个参数:$3  传参总个数:$#"
}
[root@centos-128 abc]# cat fun4.sh
#!/bin/bash
[ -e /abc/fun3.sh ] && source /abc/fun3.sh || exit
print $1 $2 $3
[root@centos-128 abc]# ./fun4.sh javascript java vue python
print函数调用执行
第一个参数:javascript  第二个参数:java  第三个参数:vue  传参总个数:3
http://www.lryc.cn/news/232188.html

相关文章:

  • 订水商城实战教程10-宫格导航
  • 【C++11】lambda表达式 | 包装器
  • 网络安全准入技术之MAC VLAN
  • MyBatis 操作数据库
  • 设计模式 -- 建造者模式(Builder Pattern)
  • 如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
  • 一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!
  • 文件上传 [ACTF2020 新生赛]Upload1
  • 振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)
  • 手把手教你搭建属于自己的快递小程序
  • C# Onnx LSTR 基于Transformer的端到端实时车道线检测
  • Java相关编程思想
  • Hadoop-HDFS架构与设计
  • OpenAI暂停新的ChatGPT Plus注册 | OpenAI 的 GPT Builder 创建您的 GPTs
  • Git目录不对,即当前文件夹不对应git仓库
  • Python基础:正则表达式(regular expression)详解
  • sqlmap requires ‘python-pymysql‘ third-party library
  • 05 robotFrameWork+selenium2library 一维数组的使用
  • SpringCloud Alibaba组件入门全方面汇总(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign
  • Zabbix钉钉机器人告警
  • unity shaderGraph实例-扫描效果
  • AW2013芯片讲解
  • Spring JdbcTemplate Junit 测试 - ResultSetExtractor/RowMapper
  • RabbitMQ实战
  • UI游戏设计模板大放送:7种别具匠心的创意!
  • 酷开系统 酷开科技,将家庭娱乐推向新高潮
  • 我精心制作的 python 一小时极简课程来了 ≧◠◡◠≦ 免安装程序+精简核心概念
  • 220V交流转直流的简易电源设计
  • 使用Nginx和uwsgi在自己的服务器上部署python的flask项目
  • 【Windows 开发环境配置——NVIDIA 篇】CUDA、cuDNN、TensorRT 三件套安装