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

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

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

相关文章

基于QT和C++实现的中国象棋

一&#xff0c;源码 board.h #ifndef BOARD_H #define BOARD_H#include <QWidget> #include "Stone.h"class Board : public QWidget {Q_OBJECT public:explicit Board(QWidget *parent 0);bool _bRedTurn; // 红方先走int _currentPlayer; // 当前玩家&…

如何处理跨库查询,以保证数据一致性

如何处理跨库查询&#xff0c;以保证数据一致性&#xff1f; 处理跨库查询以保证数据一致性是一个复杂的问题&#xff0c;通常涉及到分布式数据库系统和事务管理。以下是一些关键步骤和策略&#xff1a; 使用事务: 在多个库之间执行操作时&#xff0c;确保它们作为一个原子单元…

原来设计师都在这些网站找素材、灵感的

设计师可以去哪些网站找设计素材和灵感&#xff0c;收藏好这几个网站&#xff0c;设计必备&#xff0c;提升审美的好帮手。 设计素材网站 1、菜鸟图库 菜鸟图库-免费设计素材下载 菜鸟图库一个可以免费下载设计素材的网站&#xff0c;我推荐过很多次&#xff0c;主要是站内素材…

css 三角形

方法一&#xff1a; <div class"triangle"></div>css .triangle{width: 8px;height: 8px;border: 8px solid #3C69EF;/* border-radius: 0px 2px 0 0; */ // 右上角加一点圆角border-block-end: 8px solid transparent;border-inline-start: 8px solid…

揭示西周与汉唐时期的纺织工艺

在中国新疆这片充满神秘色彩的土地上&#xff0c;每一次的考古发掘都仿佛是对历史的一次深情回望&#xff0c;揭示出中华民族悠久而灿烂的文明史。其中&#xff0c;新疆出土的西周和汉唐时期的织物&#xff0c;更是以其精美绝伦的工艺和独特的审美风格&#xff0c;让我们对古代…

基于机器学习和深度学习的C-MAPSS涡扇发动机剩余寿命RUL预测(Python,Jupyter Notebook环境)

涡扇发动机全称为涡轮风扇发动机&#xff0c;是一种先进的空中引擎&#xff0c;由涡轮喷气发动机发展而来。涡扇发动机主要特点是首级压缩机的面积比涡轮喷气发动机大。同时&#xff0c;空气螺旋桨&#xff08;扇&#xff09;将部分吸入的空气从喷射引擎喷射出来&#xff0c;并…

PTFE恒压分液漏斗150ml耐酸碱白色四氟材质塑料漏斗

四氟恒压滴液漏斗又名恒压分液漏斗&#xff0c;也是分液漏斗的一种。它和其他分液漏斗一样&#xff0c;都可以进行分液、萃取等操作。与其他分液漏斗不同的是&#xff0c;恒压分液漏斗可以保证内部压强不变&#xff0c;一是可以防止倒吸&#xff0c;二是可以使漏斗内液体顺利流…

【AI应用探讨】— 文心一言模型应用场景

目录 学习助手 学科知识点查询 学习资料搜索 工作辅助 信息查询 内容创作 生活助手 日常问题解答 生活建议 智能客服 客户问题解答 提升客户体验 智能家居 语音控制 智能场景设置 金融领域 投资咨询 风险评估 医疗健康领域 医疗咨询 健康监测 内容优化与…

人工智能(AI)与机器学习(ML):塑造未来的技术引擎

目录 前言 一、人工智能&#xff08;AI&#xff09;概述 二、机器学习&#xff08;ML&#xff09;的作用&#xff1a;深入解析与应用前景 1、机器学习的作用机制 2、机器学习在各个领域的应用 3、机器学习的挑战与前景 三、AI与ML的融合与应用&#xff1a;深度解析与前景…

C++ | Leetcode C++题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:void addPath(vector<int> &vec, TreeNode *node) {int count 0;while (node ! nullptr) {count;vec.emplace_back(node->val);node node->right;}reverse(vec.end() - count, vec.end());}vect…

面试题——MyBaits

★1.MyBatis中什么是一级缓存和二级缓存? 一级缓存&#xff1a;&#xff08;默认开启&#xff09;它指的是mybatis中的SqlSession对象的缓存。 特点: 在同一SqlSession中多次对同一Mapping或相同查询条件查询,只要在缓存有效期内,就只会执行一次查询 ; SqlSession之间不会互…

C++ Primer Chapter 10 Generic Algorithms

Chapter 10 Generic Algorithms 10.3 定制操作 10.3.2 lambda 表达式 介绍lambda 可调用对象&#xff08;callable object&#xff09; 对于一个对象或一个表达式&#xff0c;如果对其使用调用运算符&#xff0c;则称它为可调用的。 即&#xff0c;如果e是一个可调用的表达式…

如何使用Vue3和ApexCharts创建交互式热力图?

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 热力图&#xff1a;可视化数据分布 应用场景介绍 热力图是一种数据可视化技术&#xff0c;它使用颜色来表示数据点的值。热力图常用于可视化分布数据&#xff0c;例如人口密度、温度变化或网站流量。 代码基…

一个有趣的c++案例

1. 源码 #include <stdio.h> #include <stdint.h> #include <iostream>using namespace std;uint8_t a 0; uint8_t b 0;#define MY_LOG#ifdef MY_LOG#define my_log(...) printf(__VA_ARGS__); fflush(stdout)#else #define my_log(...) #endifvoid …

优化:Day52 动态规划part10

LC300最长递增子序列 dp数组中dp[i]的含义是&#xff1a;以nums[i]结尾的子序列中最长递增子序列的长度为dp[i]最长连续递增子序列 非连续最长递增子序列 如果是连续的&#xff0c;只需要nums[i]>nums[i-1]就将dp值1&#xff0c;但是如果是非连续的&#xff0c;nums[i]之前…

30天学会QT---------------大项目之在线考试系统

前段时间真的很忙很忙,忙完这段时间,总算是有空来写文章了,开始写的时候我就以为能够有时间准备和写这个,但是发现有时候忙着忙着就忘记了,没有办法来写项目,真的是非常尴尬。 现在有时间了,就有充分的时间来写了。 为了避免笔记断更,我决定先存稿来写。 1、如何规划项…

如何训练AI大模型?熬夜爆肝整理大全

随着人工智能技术的快速发展&#xff0c;大型预训练模型在自然语言处理、计算机视觉、语音识别等领域取得了显著成果。这些模型通过在海量数据上进行预训练&#xff0c;能够捕捉到丰富的特征信息&#xff0c;为各种下游任务提供强大的支持。然而&#xff0c;训练AI大模型面临着…

李光明从程序员到架构师的逆袭之路(一)

李光明是一名已经工作了两年的程序员&#xff0c;每天都沉浸在繁忙的996工作节奏中。在这段时间里&#xff0c;他感觉自己仿佛成为了一台编码机器&#xff0c;每天机械地编写着枯燥无味的代码&#xff0c;对于工作的热忱渐渐消磨在无尽的代码行中。 然而&#xff0c;一个偶然的…

16. 一个I/O项目:构建命令行程序(上)

标题 一、功能二 、接受命令行参数三、 读取文件四、重构改进模块性和错误处理4.1 二进制项目的关注分离4.2 提取参数解析器4.3 创建一个Config的构造函数4.4 传参错误处理4.5 从main中提取逻辑4.6 将代码拆分进crate 一、功能 grep 最简单的使用场景是在特定文件中搜索指定字…

Kubernetes 如何删除 Terminating 状态的 Pod

在 Kubernetes (k8s) 中&#xff0c;Pod 是运行容器化应用的最小部署单元。当我们删除一个 Pod 时&#xff0c;通常它会快速进入 Terminating 状态并被删除。然而&#xff0c;有时由于种种原因&#xff0c;Pod 会长时间停留在 Terminating 状态。本文将详细介绍如何处理和删除这…