Shell脚本中的函数

目录

一.shell函数的作用:

二:shell函数的定义:

三.调用函数的方法:

​四.Shell函数返回值:

​五.函数传参:

六.函数变量的作用范围:

​七.函数的递归:

​八.函数库:


一.shell函数的作用:

将命令序列按格式写在一起可方便重复使用命令序列避免代码重复

使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

二:shell函数的定义:

function 函数名(){命令序列[return x]  #使用return或exit可以显示的结束函数
}
或者函数名 (){命令序列[return x]  #使用return或exit可以显示的结束函数
}

注意事项

  • 直接写 函数中调用函数 直接写函数名
  • 同名函数 后一个生效
  • 调用函数一定要先定义
  • 只要先定义了调用的 其他函数定义顺序无关 

三.调用函数的方法:

 四.Shell函数返回值:

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值

使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码

2、退出状态码必须是0~255,超出时值将为除以256取余

 解决数值超出255的办法:

[root@localhost hanshu]# vim 3.sh#!/bin/bash
test1 (){read -p "请输入一个整数:" numecho $[num * 2]}###########main############result=$(test1)
echo $result
[root@localhost hanshu]# bash 3.sh
请输入一个整数:300
600

五.函数传参:

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。

[root@localhost hanshu]# vim 1.sh #!/bin/bash#文件上方先定义函数,然后在主代码部分调用函数test1 () {sum=$[ $1 + $2 ]echo $sum
}##############main#################
test1 10 20
[root@localhost hanshu]# bash 1.sh
30

 六.函数变量的作用范围:

  • 函数在Shell脚本中仅在当前Shell环境中有效
  • Shell脚本中变量默认全局有效
  • 将变最限定在函数内部使用local命令
[root@localhost hanshu]# vim 4.sh#!/bin/bashfun(){i=10
}#########main#########
i=20
fun
echo $i
[root@localhost hanshu]# bash 4.sh 
10

 七.函数的递归:

函数调用自己本身

[root@localhost ~]# vim jiecheng.sh#!/bin/bash
#使用递归计算阶乘
fact() {if [ $1 -eq 1 ] ;thenecho 1elselocal temp=$[$1 - 1]local result=$(fact $temp )echo $[$1 * $result]fi
}##############main###############
read -p"请输入一个正整数:" num
last=`fact $num`
echo "$num的阶乘的结果为:$last"[root@localhost ~]# bash jiecheng.sh 
请输入一个正整数:5
5的阶乘的结果为:120

八.函数库:

可以事先创建一个函数库文件,在里面定义各种常用的函数,然后可以在别的shell脚本中直接引用这个函数库文件,使得不需要再次定义函数即可直接调用函数

[root@localhost ~]# vim ku.sh#!/bin/bash
jiafa() {
echo $[$1 + $2]
}jianfa() {
echo $[$1 - $2]
}chengfa() {
echo $[$1 * $2]
}chufa(){
if [ $2 -eq 0 ] ;thenecho"除数不能为0"
elseecho $[$1 / $2]
fi
}jiecheng(){
if [ $1 -eq 1 ] ; thenecho 1
elselocal temp=$[$1 - 1]local result=$(jiecheng $temp)echo $[$1 * $result]
fi
}#不需要定义 直接使用函数库文件
[root@localhost ~]# vim 10.sh#!/bin/bash. ku.sh
v1=10
v2=5res1=$(jiafa $v1 $v2)
res2=$(jianfa $v1 $v2)
res3=$(chengfa $v1 $v2)
res4=$(chufa $v1 $v2)
res5=$(jiecheng $v1)echo "加法结果为:$res1"
echo "减法结果为:$res2"
echo "乘法结果为:$res3"
echo "除法结果为:$res4"
echo "${v1}阶乘结果为:$res5"[root@localhost ~]# bash 10.sh 
加法结果为:15
减法结果为:5
乘法结果为:50
除法结果为:2
10阶乘结果为:3628800

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊鲲鹏系统的使用方法及操作指南

亚马逊鲲鹏系统作为提升店铺流量与销量的有效工具,其使用方法与功能十分强大。以下是详细的使用方法及操作指南: 1. 批量注册功能: 注册时,需要绑定国外IP代理和最新的反指纹技术,这样每个账号独立运行时就不会造成关…

后序遍历的线索化二叉树

对于后序遍历,需要明确,往往叶子结点,只能指向右子树(如果右子树存在的情况),或者指向该结点(因为这才是后序遍历),同样在进行退出到前一次递归的时候,我们要…

如何做谷歌seo排名优化?

要优化谷歌搜索排名,网站内容是重中之重,最主要就是创建质量高、相关性强的网站内容, 何谓质量高?最起码要求图文并茂,文章要长,要有视频引用,这是质量高的最基础要求,同时还需要确…

07.领域驱动设计:3种常见微服务架构模型的对比和分析

目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…

【Java基础】之进程与线程

进程与线程 1. 线程与进程1.1 概念1.2 区别与联系 2. 线程的5种状态和切换2.1 简单介绍2.2 状态切换2.2.1 重点情况 3. 线程中常见的方法4. 线程池 1. 线程与进程 1.1 概念 进程:资源分配的基本单元,如QQ音乐 线程:资源调度的基本单元&…

私域必看:让你事半功倍的多微信高效管理方法

随着私域运营的需求不断增长,对于使用微信进行运营的企业或个人,高效地管理微信变得越发重要。今天就分享一些高效管理多个微信账号的实用方法,帮你节省时间。 1.巧用标签和分组 微信的标签和分组功能,相信很多人都使用过&#xf…

AtCoder Beginner Contest 338 --- D - Island Tour -- 题解

D - Island Tour 题目大意 思路解析&#xff1a; 可以发现 1->2->4 整体减1变为5->1->3&#xff0c; 其中2->4的距离等于1->3的距离 其中1->2的距离不等于5->1的距离&#xff0c;则只有当[xj - i] < 0后的xj - > xj1 和 xj -> xj-1的距离才会…

电子液晶屏幕生产厂污废水处理需要哪些工艺设备

随着电子液晶屏幕行业的不断发展&#xff0c;污废水处理成为了一个重要的环保问题。为了达到合规性排放要求&#xff0c;并保护环境&#xff0c;厂家需要采取一系列工艺设备来处理污废水。 首先&#xff0c;常见的一种处理工艺是物理与化学处理。物理处理包括预处理与固液分离&…

基于go mod模式创建项目最佳实践

希望能带给你成功的喜悦&#xff01; 除go get、vendor这两种方式外&#xff0c;Go版本在1.11之后推出了go module模式来管理依赖&#xff0c;使用go mod时下载的依赖文件在$GOPATH/pkg/mod/下。本文以两种办法介绍如何创建go mod项目。 目录 goland开启玩法 本地手动创建项目…

Java二维码图片识别

前言 后端识别二维码图片 代码 引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing<…

C语言指针进阶之四-函数指针的使用之回调函数及库函数qsort函数详解(详解)

目录 1.回调函数 1.1引入 1.2回调函数的使用&#xff0c;加减乘除计算器改造 2.回调函数的应用-qsort函数 实例1&#xff1a;整型数组排序 实例2&#xff1a;结构体排序 ①按照整型数据来排序&#xff0c;这里是按照年龄来排序 ②按照名字来排序&#xff0c;也就是比较…

Java 面试题之 IO(一)

字节流 文章目录 字节流InputStream&#xff08;字节输入流&#xff09;OutputStream&#xff08;字节输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 InputStream&#xff08;字节输入流&#xff09; InputStream用于从源头&#xff08;通常是…