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

shell函数详解

华子目录

  • 函数定义
    • 说明
  • 函数调用
  • 函数变量
    • 全局变量
    • 局部变量(使用`local`声明)
  • 函数传参
  • 函数返回值
    • 获取返回值

函数定义

linux shell可以用户定义函数,然后在shell脚本中可以随便调用。Shell函数定义的语法格式如下:

  • 标准写法:
function 函数名(){
	函数体
}
  • 简写(省略function
函数名(){
	函数体
}
  • 还有另一种写法(省略了()
function 函数名{
	函数体
}

说明

  • functionShell 中的关键字专门用来定义函数

函数调用

  • 调用shell中的函数时,直接写函数名就可以

函数变量

全局变量

  • 全局变量可以定义在脚本中,也可以定义在函数
  • 作用范围:从定义开始处到shell脚本执行结束

定义在函数外部

[root@shell ~]# cat shell1.sh
#!/bin/bash
func()   #定义函数
{
        echo ${v1}
        v1=200
}
v1=100
func   #调用函数
echo ${v1}


[root@shell ~]# chmod +x shell1.sh
[root@shell ~]# bash shell1.sh
100
200

定义在函数内部

[root@shell ~]# cat shell1.sh
#!/bin/bash
func()   #定义函数
{
        v1=200
}
func   #调用函数
echo ${v1}


[root@shell ~]# bash shell1.sh
200

局部变量(使用local声明)

  • 范围更小,仅限于某个程序段中,如:函数
  • 通过local关键字定义

函数中定义局部变量

[root@shell ~]# cat shell1.sh
#!/bin/bash
func()   #定义函数
{
        local v1=200   #定义局部变量
}
func   #调用函数
echo ${v1}


[root@shell ~]# bash shell1.sh
                         #我们执行后发现没有任何输出

函数传参

  • 和其它编程语言不同的是,Shell函数在定义时不能指明参数,但是在调用时却可以传递参数
  • 在函数体内部,函数中的变量均为全局变量

函数调用时传参

[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
        echo "第一个参数:$1"
        echo "第二个参数:$2"
        echo "第三个参数:$3"
}
func 1 2 3    #调用时传参



[root@shell ~]# bash shell1.sh
第一个参数:1
第二个参数:2
第三个参数:3

脚本执行时传参

  • 如果是脚本执行传参$1 $2 $3位置参数必须定义在函数的外部
[root@shell ~]# cat shell1.sh
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"


[root@shell ~]# bash shell1.sh 1 2 3
第一个参数:1
第二个参数:2
第三个参数:3
  • 那么如果定义在函数内部会怎样呢,我们一起来测试一下
[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
        echo "第一个参数:$1"
        echo "第二个参数:$2"
        echo "第三个参数:$3"
}
func


#我们发现定义在函数内部,不能在脚本执行时传参
[root@shell ~]# bash shell1.sh 1 2 3
第一个参数:
第二个参数:
第三个参数:

函数返回值

  • Shell函数返回值,可以通过return语句返回,但是shell函数只能返回整数。用来表示函数执行成功与否0表示成功其他值表示失败

获取返回值

通过echo $?来获取函数的返回值

[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
        echo "hello world"
        return 2
}
func
echo $?


[root@shell ~]# bash shell1.sh
hello world
2           #获取了返回值2

http://www.kler.cn/a/372551.html

相关文章:

  • 【QNAP威联通NAS系统恢复进阶教程】如果 .conf 和 md9 无法自动组装,如何恢复 NAS?
  • solidworks学习6吊环-20241030
  • 2024年NSSCTF秋季招新赛-WEB
  • Golang反射在实际开发中的应用场景
  • Jmeter基础篇(19)JSR223预处理器
  • Pytorch学习--神经网络--线性层及其他层
  • 大模型面试题持续更新_Moe(2024-10-30)
  • WebRTC学习六:MediaStream 常用API介绍
  • 深度学习之激活函数
  • vue3(setup) keep-alive 列表页跳转详情缓存,跳转其它更新
  • unity 中使用zeroMq和Mqtt 进行通讯
  • layui xm-select
  • HTML入门教程14:HTML图像
  • NewStarCTF2024-Week4-Web-WP
  • 关于微信小程序启用组件按需注入
  • openGauss开源数据库实战十
  • 详解:模板设计模式
  • Linux多机器文件分发
  • 时间序列分类任务---tsfresh库
  • 基于Spring Boot+Vue的健身房管理系统(协同过滤算法、功能非常多)
  • C++初阶(八)--内存管理
  • Spark RDD
  • C# CSV工具类,读取csv文件、将数据导出为csv文件格式,用DataGridView表格控件显示
  • 批量删除redis数据
  • N9300-S16语音芯片:提升电梯播报体验,实现导航声音播报提示
  • Spring Boot 创建项目详细介绍