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

shell编程系列(5)-函数的定义

文章目录

  • 前言
  • 函数定义
  • 处理函数参数
    • 通过getopts接收参数

前言

函数是编程语言中最重要的部分之一,虽然在shell脚本中并不是必须的,但是函数可以提高代码的复用性和可读性,当我们编写稍微复杂的脚本时,函数就是一个好帮手,否则我们的脚本可能就又臭又长,过一段时间自己都不认得了。
接下来我们就一起看看在shell中应该怎么定义和使用函数。

函数定义

首先函数的定义语法如下:

# function 关键字
# helloWorld 函数名
function helloWorld(){echo "hello world!"
}#函数调用
helloWorld

注意事项:

  1. 函数定义的关键字function 并不是必须的,但是为了可读性还是建议加上
  2. 在ubuntu系统上的/bin/sh中不支持function关键字,建议使用#!/bin/bash解释执行脚本
  3. 定义函数时,不需要显式的申明函数参数

处理函数参数

在上面的函数定义中我们可以看到并没有申明函数的参数,那么函数参数是怎么传递的呢? 其实函数参数我们可以通过$n的方式获取,如下:

#!/bin/bash# 定义一个函数
function func(){# 输出所有的参数echo "all parameters are $*"# 输出所有的参数echo "all parameters are $@"# 输出脚本名称echo "the script's name is $0"# 输出第 1 个参数echo "the first parameter is $1"# 输出第 2 个参数echo "the second paramter is $2"
}# 函数调用
func hello 2

从上面的例子可以看到,我们在调用函数时,直接将函数跟在函数名称后面即可,在函数内部我们可以通过位置参数的形式接收。

通过getopts接收参数

上面的方式演示了函数的位置参数如何传递和接收,但是如果出现某个函数参数特别多的情况,使用位置参数可能会导致可读性差,而且必须每个位置都必须要传递参数,使用起来不方便。
接下来演示通过getopts方式传递可选参数,代码如下:

#!/bin/bash 
# 定义函数
func()
{# 逐个接收选项及其参数while getopts "a:b:c" argdo# 当指定了 -a 选项时case "$arg" ina)# 输出 -a 选项的参数值echo "a's argument is $OPTARG";;b)echo "b's argument is $OPTARG.";;c)echo "c";;?)# 未知选项echo "unkown argument."exit 1;;esacdone
}
# 调用函数
func -a hello -b world
http://www.lryc.cn/news/247466.html

相关文章:

  • 鸿蒙应用开发-初见:入门知识、应用模型
  • 通过测试驱动开发(TDD)的方式开发Web项目
  • 技巧-PyCharm中Debug和Run对训练的影响和实验测试
  • 【古月居《ros入门21讲》学习笔记】07_创建工作空间和功能包
  • 第20章多线程
  • 深信服防火墙设置应用控制策略(菜鸟必看)
  • 解锁 ElasticJob 云原生实践的难题
  • 鸿蒙开发已成新趋势
  • 万人拼团团购小程序源码系统+拼团设置+拼团管理 附带完整的搭建教程
  • 软信天成:速看!云端混合数据管理的最佳解决方案
  • GO 集成Prometheus
  • ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO
  • Springboot 中 指定 AspectJ 的织入模式
  • 【.NET全栈】.net的微软API接口与.NET框架源码
  • 【深度学习】基于深度学习的超分辨率图像技术一览
  • Android12强制所有应用跟随gsensor旋转
  • C#常用运算符的优先级
  • 鸿蒙4.0开发笔记之ArkTS语法的基础数据类型[DevEco Studio开发](七)
  • 集成学习的两种常见策略:bagging VS. boosting
  • 居家适老化设计第三十四条---卫生间之照明
  • 如何使用Cloudreve将个人电脑打造为私有云盘并实现远程访问
  • [SaaS] 淘宝AI淘淘秀
  • 第二证券:机构密集调研消费电子、半导体产业链
  • app小程序定制的重点|软件定制开发|网站搭建
  • 11-28渗透
  • qt实现一个安卓测试小工具
  • 驾驭未来,智能化管理——汽车ERP系统
  • flutter开发实战-当前界面无操作60s返回主页实现
  • 绩效考核的基础及基本内容
  • 阿坤老师的彩带插花(蓝桥杯)