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

[Linux][Shell][Shell函数]详细讲解

目录

  • 1.创建函数
  • 2.执行函数
  • 3.给函数传入参数
  • 4.返回值
  • 5.函数中处理变量
    • 1.全局变量
    • 2.局部变量


1.创建函数

  • 语法:关键字 或 C风格
    function name 
    {commands
    }name()
    {commands
    }
    

2.执行函数

  • 执行Shell函数,直接写函数名即可,无需添加其他内容
  • 函数必须先定义,再执行,Shell脚本自上而下加载
  • 函数体内定义的变量,称之为局部变量
    • 函数内,使⽤local关键字,定义局部变量
  • 函数体内需要添加return语句,作⽤是退出函数,且赋予返回值给调⽤该函数的程序
  • return语句和exit不同
    • return:结束函数的执⾏,返回⼀个(退出值、返回值)
    • exit:结束Shell环境,返回⼀个(退出值、返回值)给当前的shell
  • 函数如果单独写⼊⼀个⽂件⾥,需要⽤source读取
    • 本质:读取到当前环境变量中

3.给函数传入参数

  • 传参和调用形势类似于在命令行中给一个脚本传入参数
    SnowK()
    {echo "传入的参数为$1 $2 $3, 共 $# 个"
    }SnowK I am DieSnowK
    
  • 示例:URL检测脚本
    #!/bin/bashUsage()
    {echo "Usage: $0 url"exit 1
    }# 程序开发的习惯,设置一个入口函数,对需要执行的函数统一管理
    CheckUrl()
    {wget --spider -q -o /dev/null --tries=1 -T 5 $1if [ $? -eq 0 ]thenecho "$1 is Yes"elseecho "$1 is No"fi
    }main()
    {if [ $# -ne 1 ]thenUsagefiCheckUrl $1
    }# $* -> 将所有传入进来的参数,当作一个整体,是常见用法
    main $*
    

4.返回值

  • 函数结束,有状态码
    • 通过$?获得
    • return可以制定特殊的退出状态码
  • 这种方式有一个
    • 函数结束后应⽴即取返回值
      • 否则会被覆盖丢失
    • 退出状态码在0~255之间

5.函数中处理变量

1.全局变量

  • 默认情况下,脚本⾥定义的任何变量都是全局变量,只要不是写在函数体内

2.局部变量

  • ⽆需在函数中使⽤全局变量,函数内部使⽤的任何变量都可以被声明为局部变量,为了实现这⼀点,只需要加上local关键字即可
    func()
    {local temp=$[ $value + 5 ]result=$[ $temp * 2 ]
    }
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt 统计图编程
  • Apache Seata分布式事务启用Nacos做配置中心
  • 禅道二次开发——禅道zentaoPHP框架扩展机制——对视图层(view)扩展
  • Linux账号和权限管理详解
  • 浅谈MMORPG的战斗系统
  • Mysql知识大全
  • ubuntu22.04 编译freetype动态库
  • 决策树算法介绍,原理与案例实现
  • 代码审查的艺术:Xcode的深度指南与实战技巧
  • Autosar诊断实战系列28-2E写DID Pending期间偶发回NRC0x13问题排查
  • 学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由撤销)
  • 网络安全第一次作业
  • maven——(重要)手动创建,构建项目
  • 部署YUM仓库及NFS共享功能
  • docker拉取镜像-配置阿里云镜像加速
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017前端实习生面试总结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • JavaScript设计模式与开发实践系列之策略模式
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Linux下的乱码问题
  • pdf文件如何在线转换为jpg图片
  • Protobuf3语言指南
  • Python 反序列化安全问题(二)
  • Spring声明式事务管理之一:五大属性分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • SQLServer之索引简介
  • 笨办法学C 练习34:动态数组
  • 深入浏览器事件循环的本质
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用 Swift 编写面向协议的视图
  • 正则与JS中的正则
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • #### golang中【堆】的使用及底层 ####
  • #Linux(帮助手册)
  • #pragma once
  • (152)时序收敛--->(02)时序收敛二
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Java数据结构)ArrayList
  • (vue)页面文件上传获取:action地址
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (十五)使用Nexus创建Maven私服
  • (一) storm的集群安装与配置
  • (一)插入排序
  • (原創) 未来三学期想要修的课 (日記)
  • (转) Face-Resources
  • (转)Unity3DUnity3D在android下调试