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

【shell脚本速成】函数

在这里插入图片描述

文章目录

    • 一、函数
      • 1.1、函数介绍
      • 1.2、函数定义
      • 1.3、函数调用

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

shell脚本中的代码是按照执行的优先级的顺序从上往下抒写的,代码量越大,在脚本调试的时候就越难排错,当因执行需要调整代码执行顺序的时候就需要不断的复制粘贴,或者删除部分代码来完成,这和从写一个脚本花费的时候相比甚至需要更长的时间。

代码量大后遇到的问题:

  • 单个脚本代码量大 (300-500行)
  • 阅读修改耗时费力
  • 排错困难
  • 改变执行顺序困难

为了解决这些问题,我们可以把代码模块化,按需调用。

一、函数

1.1、函数介绍

shell中允许将一组命令集合语句形成一段可用代码,这些代码块称为shell函数。给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能。

将完成一个功能的一段代码进行命名、封装

函数的优点:

  1. 代码模块化,调用方便,节省内存
  2. 代码模块化,代码量少,排错简单
  3. 代码模块化,可以改变代码的执行顺序

1.2、函数定义

语法一:函数名 () {代码块return N}语法二:
function 函数名 {代码块return N}函数中return说明:
1.return可以结束一个函数,类似于前面讲的循环控制语句break(结束当前循环,执行循环体后面的代码)
2.return默认返回函数中最后一个命令的退出状态,也可以给定参数值,该参数值的范围是0-256之间。
3.如果没有return命令,函数将返回最后一个Shell的退出值。

1.3、函数调用

  • 当前命令行调用
[root@zutuanxue shell04]# cat fun1.sh 
#!/bin/bash
hello(){
echo "hello zutuanxue $1"
hostname
}
menu(){
cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}[root@zutuanxue shell04]# source fun1.sh 
[root@zutuanxue shell04]# . fun1.sh [root@zutuanxue shell04]# hello 888
hello zutuanxue 888
MissHou.zutuanxue.cc
[root@zutuanxue shell04]# menu
1. mysql
2. web
3. app
4. exit
  • 定义到用户的环境变量中
/etc/profile	/etc/bashrc		~/.bash_profile	~/.bashrc[root@zutuanxue shell04]# cat ~/.bashrc 
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fihello(){
echo "hello zutuanxue $1"
hostname
}
menu(){
cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}注意:
当用户打开bash的时候会读取该文件
  • 脚本中调用
#!/bin/bash
#打印菜单
source ./fun1.sh
menu(){
cat <<-ENDh	显示命令帮助f	显示磁盘分区d	显示磁盘挂载m	查看内存使用u	查看系统负载q	退出程序END
}
menu		//调用函数

✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

相关文章:

  • 五十三、openlayers官网示例Layer Spy解析——跟随鼠标透视望远镜效果、图层剪裁
  • LeetCode 3186 最大施法伤害
  • 如何选择适合的LabVIEW版本进行开发
  • 注解详解系列 - @ResponseStatus
  • Java中将文件转换为Base64编码的字节码
  • LabVIEW的热门应用
  • JAVA学习笔记DAY6——SSM_Spring
  • 在Linux上为Windows目标配置Qt交叉编译
  • 鸿蒙开发网络管理:【@ohos.request (上传下载)】
  • 48-4 内网渗透 - Rotten Potato(烂土豆) 提权
  • StableSwarmUI 安装教程(详细)
  • 【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能
  • 【自动驾驶】从零开始做自动驾驶小车
  • scale()函数详解
  • MySQL笔记——事务
  • [NodeJS] 关于Buffer
  • [笔记] php常见简单功能及函数
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • canvas 高仿 Apple Watch 表盘
  • CSS相对定位
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript 一些 DOM 的知识点
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Nacos系列:Nacos的Java SDK使用
  • Python学习之路16-使用API
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • Vue.js-Day01
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 计算机在识别图像时“看到”了什么?
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 入口文件开始,分析Vue源码实现
  • 什么软件可以剪辑音乐?
  • 我建了一个叫Hello World的项目
  • 用jquery写贪吃蛇
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #Z2294. 打印树的直径
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (黑马点评)二、短信登录功能实现
  • (剑指Offer)面试题34:丑数
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Google的Objective-C编码规范
  • (转)关于pipe()的详细解析
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)详解PHP处理密码的几种方式
  • ****三次握手和四次挥手
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Micro Framework 4.2 beta 源码探析
  • .net Stream篇(六)