【Linux】shell编程之—函数

news2024/11/25 1:32:08

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、概述
  • 二、函数的查看和删除
    • 1.查看 declare
    • 2.删除 declare
  • 三、函数的返回值
    • 1.return 返回值
    • 2.echo 返回值
  • 四、函数的参数传入与变量范围
  • 五、函数的应用
    • 1.阶乘
    • 2.递归


一、概述

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

作用:

定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率。

格式一

function 函数名 {
	命令序列
}

在这里插入图片描述
格式二

函数名() {
	命令序列
}

在这里插入图片描述

二、函数的查看和删除

1.查看 declare

语法: declare -F
在这里插入图片描述

2.删除 declare

语法:unset 函数名
在这里插入图片描述

三、函数的返回值

1.return 返回值

return表示退出函数并返回一个退出值,脚本中可以用 ? 变量显示该值使用原则: 1 、函数一结束就取返回值,因为 ?变量显示该值 使用原则: 1、函数一结束就取返回值,因为 ?变量显示该值使用原则:1、函数一结束就取返回值,因为?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为除以256取余

在这里插入图片描述

2.echo 返回值

echo对于linux来讲就是一个万能输出的工具,当 return 不能满足我们我们对返回值的需求时,可以强迫echo来充当返回值输出工具

在这里插入图片描述

四、函数的参数传入与变量范围

函数的传参

函数内部:

  • 函数体内部的 $1、$2 代表的是调用函数时,函数后面跟的位置参数
  • 在函数体内部的 $#代表调用函数时,函数后面跟的参数个数
  • 在函数体内部的 @ 、 @、 @*代表调用函数时,函数后面跟的所有参数

函数外部:

  • 函数体外的$1、$2 代表的是执行脚本时,脚本后面跟的位置参数
  • 在函数体外时,$# 代表的是执行脚本时,脚本后面跟的参数个数
  • 在函数体外时, ∗ , *, ,@ 代表的是执行脚本时,脚本后面跟的所有参数

函数变量的作用范围

  • 函数默认只能脚本内的 shell 环境有效(使用source执行脚本,也会影响系统的当前shel环境)
    脚本中的变量默认全局有效 (即函数体内外都有效)
    在函数体内执行 local 变量 ,可将变量限定在函数体内部使用

五、函数的应用

1.阶乘

#!/bin/bash
##使用函数的递归实现阶乘
test1() {
  if [ $1 -eq 1 ]
  then
    echo 1
  elif [ $1 -gt 1 ]
  then
    local temp=$[$1 - 1]
    local result=$(test1 $temp)
    echo $[$1 * result]
  else
    echo "输入的内容无效,请重新输入内容"
  fi
}
########### main ################
read -p "请输入内容的整数:" num
result=$(test1 $num)
echo "$num的阶乘为$result"

在这里插入图片描述

2.递归

#!/bin/bash
###使用函数递归目录,如果是文件直接输出文件名,如果是目录则输出目录名且输出此目录下的所有目录和文件名
function list_files {
for f in `ls $1`
do
   if [ -d "$1/$f" ]
   then
      echo "$2$f"
      list_files "$1/$f" " $2"
   else
       echo "$2$f"
   fi
done
}

############## main #####################
read -p "请输入需要查询的目录:" num
list_files "/$num" ""

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十五、Gateway网关

目录 Zuul网关和gateway网关的区别: Gateway路由配置 1、新建服务网关项目,并在项目pom文件中引入gateway网关依赖 2、在application.yml配置gateway 3、如果不用配置的方式配置gateway路由,还可以通过代码的形式配置 4、启动网关服务&…

达梦:创建用户并授予用户只读权限

需求描述: 1.想创建一个用户,这用户能访问其他3个用户的资源,权限是只读,这种创用户的sql怎么写? 2.怎么修改用户密码呢? 环境: 通用机 一、创建用户并授权 1.创建业务用户步骤 step1:创建用户使…

短期光伏发电量短期预测(Python代码,基于LSTM模型)

一.代码流程(运行视频:短期光伏发电量短期预测(Python代码,基于LSTM模型)_哔哩哔哩_bilibili) 数据预处理: 读取CSV文件,并使用Pandas库将数据加载到DataFrame中。将时间列转换为日期…

PoseiSwap缘何成DEX赛道新宠?POSE价值分析

区块链技术以去中心化、伪匿名以及公开透明作为主要特点,虽然这种意识形态是具备先进性的,但以此为基础所带来的加密原生特性,也正在阻碍着链上世界的发展。作为一种透明、非许可的分布式网络,隐私与合规始终是现阶段,…

【AWK命令】

目录 一、awk的工作原理:二、命令演示1、按行输出文本2、按字段输出文本1、使用三元运算符 三、通过管道,双引号调用shell命令1、查看时间的命令2、getline 获取内容3、OFS输出分割符4、awk来排序数组 一、awk的工作原理: 1、逐行读取文本&a…

华为OD机试真题 Java 实现【日志采集系统】【2023Q1 100分】

一、题目描述 日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。 如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一次上报的条数太多&#xf…

MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree

Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/BTree 我们在项目中都会使用索引,所以我们要了解索引的存储结构,今天我们就着重讲解下Mysql的索引结构存储模型,并且看下 二叉树,平衡二叉树,红黑树,B…

沉浸式翻译 – 沉浸式的阅读与学习双语的翻译工具

为何称为沉浸式呢 智能识别网页主内容区进行翻译,与同类插件翻译整个网页不同,降低对原网页的“侵入性”,提升阅读体验,因此得名“沉浸式翻译”。 受宠的缘由 自从谷歌翻译不再对大陆用户提供服务后。内心是一阵酸痛的&#xf…

ML之LoR:基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例

ML之LoR:基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例 目录 基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用…

网络安全35岁是新时代挑战?

前言 对于一个工作不下于4年的人来说,我觉得我有一定的思考沉淀来回答这个问题。 说说我的一些经历吧。 普通一本毕业,专业是自动化,大学由于挂科太多没拿到学位证到上海找实习,一开始做的是开发,从16年到19年都是做…

如何在线安装Axure插件?

当我们需要进行原型设计时,Axure 成为了专门为此而生的专业级设计产品,也是产品经理必备的工具之一。通过使用 Axure,设计人员可以更好地了解实际项目的实施方式,并与产品经理进行更有效的合作,以评估范围和技术可行性…

HTTP1.1(五)URI编码

一 URI编码 ① ASCII wiki 说明: man ascii 观察 ② 为什么要进行URI编码 RFC3986规定:uri中只允许包含a-zA-Z、0-9、-_.~4个特殊字符以及所有保留字符 URI特殊字符 ③ 保留字符与非保留字符 ④ URI百分号%编码方式 说明: 一般是非…

自学网络安全必经的三个阶段(含路线图)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

【pytest】html报告修改和汉化

前言 Pytest框架可以使用两种测试报告,其中一种就是使用pytest-html插件生成的测试报告,但是报告中有一些信息没有什么用途或者显示的不太好看,还有一些我们想要在报告中展示的信息却没有,最近又有人问我pytest-html生成的报告&a…

算法 DAY59 单调栈2 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形

503.下一个更大元素II 难点在于如何是实现数组的循环 但使用模拟遍历两次的时候注意始终使用index&#xff0c;别出现越界 class Solution { public:vector<int> nextGreaterElements(vector<int>& nums) {stack<int> st;st.push(0);vector<int>…

图和简单图

图的定义 一个图G定义为一个有序对&#xff08;V,E&#xff09;&#xff0c;记为V&#xff08;V,E&#xff09;&#xff0c;其中 V是一个非空集合&#xff0c;称为顶点集或点集&#xff0c;其元素称为顶点或点。E是由V中的点组成的无序点对构成的集合&#xff0c;称为边集&am…

.NET开发问题记录——TransactionScope出错:“与基础事务管理器的通信失败”的解决方法

文章目录 前言问题产生使用TransactionScope进行事务控制 分布式事务&#xff08;Distributed Transaction Coordinator&#xff09;未开启原因该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 System.Transactions.TransactionManagerCommunicationException: 与基础事务…

Reference Doc

场景&#xff1a; reference doc 是springboot官方文档

【C++入门编程常见问题】(小白必看)

常见问题 vsstudio快捷键 快速注释组合键 ctrlk ctrlc 取消注释快捷键 ctrlk ctrl u 支持垃圾回收机制 大多数面向对象编程语言具有垃圾回收机制。早期的C语言不具备垃圾回收机制&#xff0c;这意味着申请的内存资源在使用完成后&#xff0c;需要程序员自己释放。直到C11标…

springcloud-alibaba (01)linux下Nacos单节点安装和部署

Nacos 一&#xff0c;下载解压 Nacos二&#xff0c;使用外部存储器&#xff08;可选&#xff09;三&#xff0c;Nacos配置四&#xff0c;防火墙配置五&#xff0c;启动nacos 一&#xff0c;下载解压 Nacos 首先确保你的系统上已经安装了 Java&#xff0c;可以运行以下命令检查&…