shell函数

目录

一、shell函数

1.函数的作用

2.函数的优点

二、shell函数的格式 

2.1函数返回值return

2.2函数变量

三、函数传参

四、递归函数

4.1查找输入目录下文件及其子目录下文件

4.2将IP地址转换为二进制

 

五、函数数据库


一、shell函数

1.函数的作用

把程序里需要多次使用的部分代码列出来,然后为这部分代码起个名字,其它所有的重复调用这部分代码都只用调用这个名字就可以(类似于别名)。当需要修改这部分重复代码时,只需要改变函数体内的一份代码即可实现调用修改。

2.函数的优点

  • 把相同的程序定义为函数,避免代码重复,减少整个程序的代码量
  • 增强代码的可读性,便于管理
  • 修改代码时只需在函数内修改,不需要在整个程序中更改

二、shell函数的格式 

(1)function 函数名 {
        命令序列
     }

(2)函数名() {
        命令序列
     }

2.1函数返回值return

return表示退出函数并返回一个退出值,脚本中用 echo  $? 显示返回值。

使用原则:

  • 函数一结束就取返回值,因为 $? 变量只返回执行的最后一条命令的退出状态码,退出状态码范围必须 0-255 ,超出范围时返回值除以256取余 
  • 在函数内用 echo 输出值,在函数体外可用  变量=$(函数名)  获取函数的返回值

示例:

#!/bin/bash

##定义函数
aa() {
  read -p "输入一个整数:" num
  return $[num * 2]
}

######main######

##调用函数,主程序代码
aa
echo $?

2.2函数变量

 函数变量的作用范围:

  1. 函数仅在shell脚本中shell环境中有效;使用 source 执行脚本,变量也会影响系统当前的shell环境。
  2. 脚本中变量默认全局有效(即函数体内外有效)
  3. 在函数体内执行 local 变量,可将变量限定在函数体内使用。
#!/bin/bash

db() {
   local name=lisi     #local 变量 将变量限制在函数内
   echo $name
}

###main###

name=zhangsan
db
echo $name

三、函数传参

函数体内部:

  • $1,$2表示调用函数时,函数后跟的位置参数
  • $# 表示调用函数时,函数后跟的参数个数
  • $@,$* 表示调用函数时,函数后跟的所有参数

函数体外部:

  • $1,$2表示执行脚本时,脚本后跟的位置参数
  • $# 表示执行脚本时,脚本后跟的参数个数
  • $@,$* 表示执行脚本时,脚本后跟的所有参数

无论在函数体内外,$0 表示脚本本身 

示例: 

#!/bin/bash

sum () {
   sum=$[$1 - $2]
   echo "函数内\$1值为$1"
   echo "函数内\$2值为$2"
   echo $sum
}

####main####

sum $2 $1              
#函数后位置参数$2为执行脚本后第一个位置参数,$1为执行脚本后第二个位置参数     
echo "函数外\$1值为$1"
echo "函数外\$2值为$2"

四、递归函数

函数调用自己本身的函数 

4.1查找输入目录下文件及其子目录下文件

#!/bin/bash
#递归查询目录下所有文件和目录并显示结果

qq () {
   for i in `ls $1`
   do
      if [ -d $1/$i ]
      then
         echo "$2目录$i" 
         qq "$1/$i" " $2"
      #查询的是目录,就调用函数对目录下内容继续查看。
      #首次查询$2为空(不缩进),如果是目录,再次调用函数查询,在原基础上缩进2个空格。
      else
         echo "$2文件$i"
      fi
   done
}

###main###

read -p "输入所查询目录的绝对路径:" num
qq "$num" ""

 

4.2将IP地址转换为二进制

#!/bin/bash

#定义一个将十进制数转换为二进制的函数
switch() {
    num=$1
    for i in {1..8}
    do
      a=$[num % 2]$a
      let num/=2
    done
      echo $a
}

#定义将分割IP地址的函数

spt() {
     ip=$1
     for i in {1..4}
     do
      NUM=${ip%%.*}
      ip=${ip#*.}
      result=$(switch NUM)
      echo -n $result.
    #结果不换行输出,并在每个结果后加“.”
    done
}

###main###
read -p "输入一个合法ip:" ipaddr
res=$(spt $ipaddr)
echo ${res%.*}
#输出结果删除最后一个“.”

 

五、函数数据库

#将函数写入函数库中
jiafa() {
    echo $[$1 + $2]
}

jianfa() {
    echo $[$1 -$2]
}

chengfa() {
    echo $[$1 * $2]
}

chufa() {
   if [ $2 -eq 0 ];then
       echo "除数不可为0"
   else
       echo $[$1 / $2]
   fi
}

#!/bin/bash

#加载数据库文件到当前脚本的shell
source /opt/hanshuku.sh

read -p "输入一个整数:" num1
read -p "输入一个整数:" num2

res1=$(jiafa $num1 $num2)
res2=$(jianfa $num1 $num2)
res3=$(chengfa $num1 $num2)
res4=$(chufa $num1 $num2)

echo "$num1+$num2=$res1"
echo "$num1-$num2=$res2"
echo "$num1*$num2=$res3"
echo "$num1/$num2=$res4"

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++Primer第20章 iostream库

第20章 iostream库 C中的IO流是通过多继承和虚拟继承实现的,下面是它的关系. 我们要学习的就是三个库,这里我会把重点的拿出来 iostream: 终端操作fstream:文件操作sstream:格式化操作 20.1 输出操作符<< 输出操作符可以接受任何内置数据类型的实参,包含我们的const …

怎么搭建个人小型渲染农场?搭建渲染农场配置

渲染农场是众多机器组成的渲染集群&#xff0c;通常用来渲染你的单帧效果图或动画项目&#xff0c;我们借助渲染农场的力量&#xff0c;可以满足3D项目交期时间迫在眉睫的需求&#xff0c;当你试着在自己的机器上渲染一个复杂的动画项目时&#xff0c;可能需要几十小时的等待时…

车载软件架构——闲聊几句AUTOSAR BSW(四)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

大数据赛项|2023年广东省大学生计算机设计大赛初赛结果公示

2023年广东省大学生计算机设计大赛 暨第16届中国大学生计算机设计大赛 粤港澳大湾区赛初赛结果公示 根据《广东省教育厅关于做好2023年广东省本科高校大学生学科竞赛工作的通知》&#xff0c;广东外语外贸大学承办2023年“广东省大学生计算机设计大赛”。 在广大师生的热情…

达摩院开源多模态对话大模型mPLUG-Owl

miniGPT-4的热度至今未减&#xff0c;距离LLaVA的推出也不到半个月&#xff0c;而新的看图聊天模型已经问世了。今天要介绍的模型是一款类似于miniGPT-4和LLaVA的多模态对话生成模型&#xff0c;它的名字叫mPLUG-Owl。 论文链接&#xff1a;https://arxiv.org/abs/2304.14178…

实时操作系统内存管理-TLSF算法

内存管理-TLSF算法 前言TLSF算法&#xff1a;为什么内存又叫内存“块”&#xff1a;O(1)查找空闲块&#xff1a;确定fl&#xff1a;确定sl&#xff1a;提级申请&#xff1a;分割块&#xff1a; 空闲块如何串成链表&#xff1f;减少外部碎片&#xff1a;查找上下块&#xff1a; …

OpenGL 4.0的Tessellation Shader(细分曲面着色器)

细分曲面着色器&#xff08;Tessellation Shader&#xff09;处于顶点着色器阶段的下一个阶段&#xff0c;我们可以看以下链接的OpenGL渲染流水线的图&#xff1a;Rendering Pipeline Overview。它是由ATI在2001年率先设计出来的。 目录 细分曲面着色器细分曲面Patch细分曲面控…

Node.js对ES6 及更高版本的支持

目录 1、简介 2、默认情况下什么特性随着 Node.js 一起发布&#xff1f; 3、有哪些特性在开发中&#xff1f; 4、移除这个标记&#xff08;--harmony&#xff09;吗 5、Node.js 对应 V8 引擎 1、简介 Node.js 是针对 V8 引擎构建的。通过与此引擎的最新版本保持同步&…

【HMS Core】Health Kit想要查看数据是来自用户的哪个设备,如何查看?

【问题描述1】 如何查看运动健康数据是来自用户的哪个设备&#xff1f; 【解决方案】 可以通过返回的数据中携带的dataCollectorId来查询提供数据的设备信息&#xff1a; 请求示例&#xff08;以查询睡眠记录详情为例&#xff09;&#xff1a; 1、查询睡眠记录并关联睡眠状…

用友携国资国企走进浙江龙游,共探区县国资智慧监管新样板

近日&#xff0c;由龙游县国有资产经营有限公司指导&#xff0c;用友网络科技股份有限公司&#xff08;以下简称&#xff1a;用友网络&#xff09;主办的“成为数智企业 迈向高质量发展——2023走进龙游数智化观摩研讨会”在浙江龙游成功举办&#xff01;全国近百位国资国企负责…

操作系统学习02

&#xff01;&#xff01;&#xff01;由于感冒和出去玩&#xff0c;好几天没学这些计算机基础知识了&#xff01;&#xff01;&#xff01; 抓紧跟上嘿嘿嘿 1、内存管理主要做了什么 操作系统的内存管理非常重要&#xff0c;主要负责下面这些事情&#xff1a; 内存的分配与…

shell脚本--函数

目录 一&#xff1a;shell函数定义 1.函数的含义 2.函数的优点 3.函数的格式 4.函数返回值 &#xff08;1&#xff09;return输出 &#xff08;2&#xff09;echo输出 二&#xff1a;函数传参 1.情景一 2.情景二 3.情景三 4.情景四 三:递归函数 1.递归函数定义 2.通过…

ASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7

编辑&#xff1a;ll ASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7 型号&#xff1a;ADUM3223ARZ-RL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;SOIC-16 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;16 工作温度:-40C~125…

利用MQ事务消息实现分布式事务

MQ事务消息使用场景 消息队列中的“事务”&#xff0c;主要解决的是消息生产者和消息消费者的数据一致性问题。 拿我们熟悉的电商来举个例子。一般来说&#xff0c;用户在电商 APP 上购物时&#xff0c;先把商品加到购物车里&#xff0c;然后几件商品一起下单&#xff0c;最后…

2路 QSFP,40G 光纤的数据实时采集(5GByte/s 带宽)板卡设计原理图 -PCIE732

板卡概述 PCIE732 是一款基于 PCIE 总线架构的高性能数据传输卡&#xff0c;板卡具有 1 个 PCIex8 主机接口、2 个 QSFP40G 光纤接口&#xff0c;可以实现 2 路 QSFP 40G 光纤的数据实时采集、传输。板卡采用 Xilinx 的高性 能 Kintex UltraScale 系列 FPGA 作为实时处理器…

qiankun 微前端 demo(Vue2)

前言 这是我最近刚开始学微前端&#xff08;qiankun框架&#xff09;做的一个小demo&#xff0c;做的时候还是遇到很多问题的&#xff0c;在网上也是看了很多别人的Blog&#xff0c;最后也是磨出来了&#x1f602;&#x1f602;&#x1f602;&#xff1b;这篇文章总统分为分为…

windows 编译 opencv

编译需要的基础工具 #cmake是配置构建工具&#xff0c;mingw是编译工具 cmake CMake是一款跨平台的编译管理工具&#xff0c;可以自动生成各种不同编译环境&#xff08;如Makefile、Visual Studio Solution等&#xff09;&#xff0c;从而实现在不同平台上进行代码编译的目的…

Qwik 1.0 发布,全栈式 Web 框架

Qwik 是一个全栈式 Web 框架&#xff0c;Qwik 基于 React、Angular 和 Vue 等其他 Web 框架的概念&#xff0c;但以 JavaScript 流等更新的方法脱颖而出&#xff0c;允许以高性能向用户交付复杂的 Web 应用程序。 随着 Web 应用程序变得越来越大&#xff0c;它们的启动性能会下…

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了&#xff0c;它能够根据用户输入的内容&#xff0c;自动生成智能回复。它使用自然语言处理技术&#xff0c;通过学习大量的文本资料&#xff0c;能够模拟人类的对话行为。它是由OpenAI开发的&#xff0c;一家非常伟大的人工…

Http知识

一、http协议 目前存在HTTP1.1&#xff08;当前广泛运用的版本&#xff09;、HTTP2.0和HTTP3.0协议&#xff0c;有以下的优点和缺点 1. HTTP1.1 优点&#xff1a;默认支持长连接&#xff0c;即在一个TCP连接上可以传送多个HTTP请求和响应&#xff0c;减少了建立和关闭连接的…