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

shell函数的定义

shell函数的定义

​ 定义:将命令序列按照格式写在一起.格式指的是函数的固定格式

​ 作用:方便重复使用,还可以做成函数库,集中在一起,随时可以传参调用,大的工程分割成小的模块,提高代码的可读性.

函数的格式

vim hanshu1.shfunction shopping {命令序列}shopping () {命令序列}

示例

function abc {read -p "输入一个数" numa=$(($num*2))echo $a
}
abc:wq

函数返回值

return的作用

只能写在函数的内部,目的是从函数的内部获取一个返回值,用来判断是否继续执行下一个脚本.

在使用return $?传返回码的时候,默认0是成功,非0都是失败,返回码可以自定义,范围是0-255之间,超过了就会大数字/255,取余

function abc {read -p "输入一个数" numa=$(($num*2))return $a		#return改变了$?的状态码性质,不再代表成功或失败,只代表返回的数字
}
abc
echo $?
:wq

函数的传参方式以及函数变量的作用范围

脚本内部传参
sum () {num=$(($1+$2))echo $num
}
read -p "第一个数字" num1
read -p "第一个数字" num2
sum $num1 $num2
脚本外部
vim chuancan.sh
sum () {num=$(($1+$2))echo $num
}
sum $1 $2
:wqbash chuancan.sh 1 2
abc (){a=5b=6
}
a=8
b=9
abc
echo $a
echo $b
在函数内部定义了全局变量,外部的赋值是不能改变内部函数的全局变量的[[ $num =~ ^-?[0-9]+$ ]]abc (){local a=5local b=6c=10
}
a=8
b=9
abc
echo $a
echo $b
echo $c
在加了local之后,就是函数内部的变来那个,而不再是全局变来那个,外部的赋值会替换内部的变量
abc (){echo "inside1 $a " let a++local aecho "inside3 $a"a=8echo "inside2 $a"
}
a=9
abc
echo "outside $a"

函数递归

函数调用自己本身的函数

阶乘举例

4的阶乘 4*3*2*1=24
vim jc.shjiecheng (){if [[ $1 -eq 1 ]]thenecho 1elselocal temp=$(($1-1))local result=$(jiecheng $temp)echo "$(($1*$result))"fi}read -p "输入一个数字" numresult1=`jiecheng $num`echo $result1

函数库

函数库中,只包含定义的函数,由另外一个脚本传入参数来调用我们定义的函数

vim jisuanhanshuku.sh
jiafa() {result=$( echo "  $1+$2 " | bc )echo $result
}jianfa() {result=$( echo " $1-$2 " | bc )echo $result
}chengfa() {result=$( echo " $1*$2 " | bc)echo $result
}

练习1

递归目录.把/etc/目录下,所有文件递归出来

如果只是目录,且该目录下没有文件,就打印目录,否则继续打印,直到目录里面没有文件为止

mulu () {for file in `ls $1`doif [[ -d "$1/$file" ]]thenecho $filemulu "$1/$file"elseecho "这是个文件,直接打印"echo "$file"fi
done
}
mulu $1

练习2

把后缀名是.txt的文件复制到/opt/dec当中

 mulu () {for file in `ls $1`doif [[ -d "$1/$file" ]]thenecho $filemulu "$1/$file"elseecho "这是个文件,直接打印" "$file"if [[ "$file" == *.txt ]]thencp $file /opt/dec/fifi
done
}
mulu $1

练习3

函数库加减乘除,要求小数和整数都可以运算,小数点后两位

vim jisuanhanshuku.sh
jiafa() {result=$( echo " scale=2; $1+$2 " | bc )echo $result
}jianfa() {result=$( echo " scale=2; $1-$2 " | bc )echo $result
}chengfa() {result=$( echo " scale=2; $1*$2 " | bc)echo $result
}
chufa(){result=$( echo " scale=2; $1/$2 " | bc)echo $result
}vim jisuan.sh
. /root/jisuanhanshuku.sh
read -p "请输入第一个数" num1
read -p "请输入第二个数" num2
sum=`jiafa $num1 $num2`
sub=`jianfa $num1 $num2`
mult=`chengfa $num1 $num2`echo $sum
echo $sub
echo $mult

相关文章:

shell函数的定义

shell函数的定义 ​ 定义:将命令序列按照格式写在一起.格式指的是函数的固定格式 ​ 作用:方便重复使用,还可以做成函数库,集中在一起,随时可以传参调用,大的工程分割成小的模块,提高代码的可读性. 函数的格式 vim hanshu1.shfunction shopping {命令序列}shopping () {命令…...

vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)

以下配置为我自己的需求,因人而异,如果只是单纯的前端非交互页面,可以不用修改配置。 代码及注释,如下: #解决vue-router设置mode为history,去掉路由地址上的/#/后nginx显示404的问题location / {proxy_htt…...

Jenkins教程-3-github自动化测试任务构建

上一小节我们学习了Jenkins在windows和mac系统上安装搭建环境的方法,本小节我们讲解一下Jenkins构建github自动化测试任务的方法。 接下来我们以windows系统为例,讲解一下构建实际自动化测试任务的具体步骤。 安装git和github插件 点击进入Jenkins插件…...

0元体验苹果macOS系统,最简单的虚拟机部署macOS教程

前言 最近发现小伙伴热衷于在VMware上安装体验macOS系统,所以就有了今天的帖子。 正文开始 首先,鉴于小伙伴们热衷macOS,所以小白搜罗了一圈macOS系统,并开启了分享通道。 本次更新的系统版本是: macOS 10.13.6 ma…...

Codeforces Round 946 (Div. 3) E. Money Buys Happiness

m m m个月,每个月月底发 x x x的薪水,也就是第 i i i个月只能用前 i − 1 i-1 i−1个月挣的钱,而不能用这个月挣的钱。第 i i i个月花费 c [ i ] c[i] c[i]的薪水能获得 h [ i ] h[i] h[i]的快乐度,问最多能获取的快乐度是多少。 …...

Git记录 上传至Gitee

1.GitHub拉去的代码需要上传至自己的Gitee需要清除原有remote服务器信息 查看原始远程服务器信息,后删除远程服务器信息 git remote -v git remote rm origin 2.Gitee新建软件仓库 法1)不用初始化仓库,初始化会自动生成.git。如果本地.git…...

笔记-前端

URL 输入到渲染的过程 域名解析,找到服务地址 构建 TCP 连接,若有 https,则多一层 TLS 握手, 特殊响应码处理 301 302 解析文档 构建 dom 树和 csscom 生成渲染树:从DOM树的根节点开始遍历每个可见节点,对于…...

事务AOP

事物管理 事务管理是指对一系列数据库操作进行管理,确保这些操作要么全部成功执行,要么在遇到错误时全部回滚,以维护数据的一致性和完整性。在多用户并发操作和大数据处理的现代软件开发领域中,事务管理已成为确保数据一致性和完…...

RAM和ROM

1,RAM和ROM区别 RAM和ROM都是由来存储的,比如CPU缓存,电脑和手机内存等属于RAM,而固态硬盘,U盘,手机的128G,256G存储空间等都属于ROM。他们的最主要区别是RAM在断电后存储数据就没有了,而ROM在断电后存储数…...

聊聊系统架构之负载均衡优化实践

一、写在前面 最近在进行线上监控检查时,我遇到了两个超出预期的案例。首先,网关层的监控数据与应用实际监控数据存在不一致性,尤其是max有较大的差异,详见如下图。其次在某个应用中,通过httpclient请求某域名时发现只…...

代码规范性思考

表命名和设计 业务模块前缀;下划线分隔,体现业务含义;数据库字符集、字段名、类型、长度、默认值;一对一、一对多、多对多建表;注释清晰;良好的索引; 接口文档 swagger增强工具swagger-boots…...

TestProject Python SDK入门

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客跳槽涨薪的朋友们有福了,今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…...

服务器数据恢复—EMC Isilon存储中被误删的虚拟机数据恢复案例

服务器存储数据恢复环境: EMC Isilon S200集群存储,共三个节点,每节点配置12块SATA硬盘。 服务器存储故障: 工作人员误操作删除虚拟机,虚拟机中数据包括数据库、MP4、AS、TS类型的视频文件等。需要恢复数据的虚拟机通…...

华为安全Security认证,你了解多少?

华为安全Security 认证包含HCIA-Security, HCIP-Security,HCIE-Security。HCIA-Security 掌握中小型网络信息安全基础知识与相关技术(华为防火墙技术、加解密技术、PKI 证书体系等),具备搭建小型企业信息安全网络的能力,实现中小企…...

自动驾驶规划-RTT* 算法 【免费获取Matlab代码】

目录 1.算法原理3.结果展示4.参考文献5.代码获取 1.算法原理 RRT(Rapidly-Exploring Random Trees) 快速随机扩展树,是一种单一查询路径规划算法。RRT 将根节点作为搜索的起点,然后通过随机撒点采样增加叶子节点的方式,生成一个随机扩展树&a…...

shell编程中的运算符的讲解

在Linux操作系统中也可以使用expr来进行一些数值的运算,expr接受表达式作为参数,并打印计算结果。 对于某些复杂的表达式或早期不支持内嵌算术表达式的Shell环境,expr 仍然是一个可行的选择。 如上图所示,是使用变量sum来承接加和…...

yudao-ui-admin-vue3 nginx配置

本文记录一个yudao-ui-admin-vue3 nginx配置信息 一、安装依赖 npm install 二、编译打包 npm run build:prod三、修改.env.prod文件 # 请求路径 VITE_BASE_URL=http://IP地址/admin-api四、 nginx配置 server {listen 80;server_name localhost...

vue3第四十节(pinia的用法注意事项解构store)

pinia 主要包括以下五部分,经常用到的是 store、state、getters、actions 以下使用说明,注意事项,仅限于 vue3 setup 语法糖中使用,若使用选项式 API 请直接查看官方文档: 一、前言: pinia 是为了探索 vu…...

PostgreSQL源码分析——索引扫描

这里,我们分析一下索引扫描的过程,以最简单的select * from t1 where a 100;语句为例,分析一下查询的过程。 postgrespostgres# \d t1;Table "public.t1"Column | Type | Collation | Nullable | Default ------------------…...

零基础入门学用Arduino 第四部分(一)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…...

记一次攻防演练复盘(蓝队)

事件:某省大数据局主导的一次攻防演练中午时段遭受大量攻击。 告警信息(TOP 5):[疑似目录穿越攻击URI] [漏洞攻击: Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)] [web路径遍历漏洞攻击-Linux环境] [XSS跨站脚本攻击U…...

ESP8266轻量协程调度器:零栈LeanTask与确定性多任务设计

1. 项目概述ESP8266Scheduler 是一个专为 ESP8266 平台设计的协作式多任务调度器(Co-operative Multitasking Scheduler),其核心目标是在资源受限的 Wi-Fi SoC 上实现轻量、确定、可预测的任务并发执行模型,同时避免传统抢占式 RT…...

视频技术三要素:码率、帧率与分辨率的实战解析

1. 视频三要素的基础认知 第一次接触视频制作时,我被各种专业术语搞得晕头转向。直到有前辈告诉我:"其实只要搞懂码率、帧率和分辨率这三个参数,就能解决80%的视频质量问题。"这句话让我茅塞顿开,今天我就把这些年积累的…...

StarRailAssistant:崩坏星穹铁道自动化终极解决方案,如何用开源脚本解放双手?

StarRailAssistant:崩坏星穹铁道自动化终极解决方案,如何用开源脚本解放双手? 【免费下载链接】StarRailAssistant 崩坏:星穹铁道自动化 | 崩坏:星穹铁道自动锄大地 | 崩坏:星穹铁道锄大地 | 自动锄大地 | …...

从一道蓝桥杯EDA赛题,聊聊平衡车硬件设计中那些‘不起眼’却关键的安全电路

平衡车硬件设计中的安全电路:从蓝桥杯赛题到工程实战 去年调试一款平衡车原型机时,我曾遇到一个诡异现象:每次电池快耗尽时,电机就会突然失控。经过三天排查,最终发现问题出在电源检测电路的分压电阻取值上——这个看似…...

Xilinx Video IP(二)AXI4-Stream视频流高效缓冲与FIFO深度优化

1. AXI4-Stream视频流缓冲的核心挑战 在视频处理系统中,AXI4-Stream协议因其高效的数据传输特性成为Xilinx视频IP的首选接口。但实际工程中,时钟域异步和速率不匹配两大问题就像两个调皮的孩子,总喜欢给工程师制造麻烦。我曾在多个项目中遇到…...

vim-test 支持的 50+ 测试框架全览:从 JavaScript 到 Rust 的完整支持

vim-test 支持的 50 测试框架全览:从 JavaScript 到 Rust 的完整支持 【免费下载链接】vim-test Run your tests at the speed of thought 项目地址: https://gitcode.com/gh_mirrors/vi/vim-test vim-test 是一款让开发者以思维速度运行测试的 Vim 插件&…...

EcomGPT-7B电商大模型Java八股文实践:面试级电商系统设计题解析

EcomGPT-7B电商大模型Java八股文实践:面试级电商系统设计题解析 最近在技术社区里,看到不少朋友在讨论一个挺有意思的电商大模型——EcomGPT-7B。它不像那些通用的聊天模型,而是专门针对电商领域训练出来的。我就在想,如果用它来…...

影刀RPA与Python变量管理:全局与局部变量的实战应用

1. 全局变量与局部变量的核心区别 在影刀RPA中编写Python脚本时,变量管理是影响代码质量的关键因素。全局变量就像办公室的公告板,所有部门(函数)都能看到并修改;而局部变量则是员工个人笔记本上的临时记录&#xff0c…...

浏览器插件开发:OpenClaw+GLM-4.7-Flash增强网页交互

浏览器插件开发:OpenClawGLM-4.7-Flash增强网页交互 1. 为什么需要智能化的浏览器插件? 在日常网页浏览中,我们经常会遇到这样的场景:看到一篇长文想快速提取核心观点,或者需要将网页内容与本地文件进行联动处理。传…...