法一:
[function] 函数名 (){
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
法二:
函数名(){
命令序列
}
1.直接写函数中调用
2函数直接写函数名同名函数后一个生效
3.调用函数一定要先定义
4.只要先定义了调用的其他函数,定义顺序无关
示例:
#!/bin/bash
h () {
echo "hello"
}
w () {
echo "world"
}
nihao () {
h
w
}
h
w
nihao
示例:
#!/bin/bash
#递归环境变量PATH里包含的所有目录,显示所有目录下的子目录和文件
IFS_OLD=$IFS
IFS=$IFS':'
list() {
for fd in $1/*
do
if [ -d $fd ];then
echo "$fd 是目录"
list "$fd"
else
echo "$fd 是文件"
fi
done
}
for dir in $PATH
do
list $dir
done
IFS=$IFS_OLD
1.函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
2.退出状态码必须是0~255,超出时值将为除以256取余。
示例:
#!/bin/bash
user () {
if [ $USER = root ]
then echo "这是管理员用户"
else
echo "这不是管理员"
return 1
fi
}
user
示例:
#!/bin/bash
sum () {
echo "第一个变量:" $1
echo "第二个变量:" $2
let n=$1+$2
echo $n
}
sum $2 $1
[root@yxp data]#vim function.sh
#!/bin/bash
color () {
RED="echo -e \E[31m"
GREEN="echo -e \E[32m"
END="\E[0m"
}
示例:
在脚本中调用
示例:
#!/bin/bash
aa () {
a=10
}
a=20
aa
echo $a
示例2:
#!/bin/bash
aa () {
local a=10
}
a=20
aa
echo $a
#!/bin/bash
#使用递归进行阶乘运算
fact () {
#判断传入的参数,如果是1,则直接输出1
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1 * $result]
fi
}
#####main######
read -p "请输入一个正整数:" num
result=$(fact $num)
echo "$num 的阶乘结果是:$result"
#fact 5
#递归分解
#5 temp=4 result=$(fact 4) echo 5 * $(fact 4)
#fact 4
#4 temp=3 result=$(fact 3) echo 5 * 4*$(fact 3)
#fact 3
#3 temp=2 result=$(fact 2) echo 5 * 4*3$(fact 2)
#fact 2
#2 temp=1 result=$(fact 1) echo 5 * 4*3*2*$(fact 1)
#fact 1
#1 temp=4 result=$(fact 4) echo 5 * 4*3*2*1*$(fact 4)
[root@localhost ~]# cat myfunctions.sh
#!/bin/bash
#创建函数库文件
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
}
fact(){
if [ $1 -eq 1 ];then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
#!/bin/bash
#调用函数库
source ~/myfunctions.sh
v1=10
v2=5
res1=$(jiafa $v1 $v2)
res2=$(jianfa $v1 $v2)
res3=$(chengfa $v1 $v2)
res4=$(chufa $v1 $v2)
res5=$(fact $v1)
echo "加法结果为:$res1"
echo "减法结果为:$res2"
echo "乘法结果为:$res3"
echo "除法结果为:$res4"
echo "${v1}阶乘结果为:$res5"
文章浏览阅读2.2k次。效果图:源码:html>canvas绘制填充矩形//绘制无填充矩形varmy1=document.getElementById("mycanvas");//访问mycanvasvarctx=my1.getContext("2d");//这个参数不需要改动ctx.beginPath();//创建路径ctx.lineWidth=5;//边框大写,也就是描边ctx.strokeSt..._js 绘制带边框的填充矩形 linewidth
文章浏览阅读966次。 Dynamic Proxy 是JDK 1.3 版本中新引入的一种代理机制。严格来讲,Dynamic Proxy本身并非一种模式,只能算是Proxy 模式的一种动态实现方式,不过为了与传统Proxy 模式相区分,这里暂且将其称为“Dynamic Proxy 模式”来泛指通过Dynamic Proxy 机制实现的Proxy 模式。 通过Decorator模式,我们可以改写接口_dyproxy
文章浏览阅读1.7w次,点赞81次,收藏65次。这篇文章摘要将介绍人工智能在医疗领域的应用。随着技术的迅猛发展,人工智能在医疗诊断、治疗和研究方面展现出巨大的潜力。我们将深入探讨人工智能在医学影像解读上的应用,如何通过深度学习算法提高医生对X光、MRI等图像的准确性。_cisco dhcp端口
文章浏览阅读3.2k次,点赞5次,收藏16次。闭包函数 作用域链 优缺点_闭包函数
文章浏览阅读953次,点赞19次,收藏14次。信号去噪是信号处理中的一个重要课题,其目的是从含有噪声的信号中提取出有用信号。近年来,经验模态分解(EMD)算法因其在信号去噪方面的优异性能而备受关注。然而,传统EMD算法存在分解结果不稳定、易受噪声影响等问题。为了克服这些问题,本文提出了一种基于总体平均经验模态分解(EEMD)算法的信号去噪方法。_eemd matlab
文章浏览阅读86次。Android如果是自己的微博,可以干掉它下面三幅图是转播,对话以及点评界面Java代码publicclassWeiboDetailActivityextendsActivity{privateDataHelperdataHelper;privateUserInfouser;p...
文章浏览阅读1.2k次。修改el-tooltip组件的背景色。_改变el-tooltip颜色
文章浏览阅读1.3k次。1、新建repositorysnapshot和第三方jar包的repository的类型是hosted且Version pollcy是Mixed,否则无法上传。2、手动上传选择jar包手动上传即可转载于:https://www.cnblogs.com/MakeInstall/p/11041262.html..._nexus修改snapshots可以支持手工上传jar
文章浏览阅读441次。稀疏表示KSVD算法是图像去噪问题中比较有效的方法之一,本文将详细介绍在matlab平台上如何使用KSVD算法进行图像去噪,并提供完整的源代码。KSVD算法是一种基于字典的稀疏表达方法,其核心思想是将待处理图像分解为一些基础元素的线性组合形式,即通过求解一个优化问题,来获取合适的基础元素和系数表达式。稀疏编码则负责计算每个字典元素的系数,使得最终重构得到的图像与原始图像之间的误差最小。2)初始化字典D,通常采用大小为[KxN]的随机矩阵,其中K表示字典中元素的数量,N表示图像块的大小。_字典学习 稀疏编码 图像去噪
文章浏览阅读1k次,点赞19次,收藏25次。golang 基础之struct func 方法 接口 泛型_go 泛型 struct
文章浏览阅读4.3k次,点赞2次,收藏10次。socket.io-client的二次封装,4.0版本,含有心跳连接、连接超时、连接错误等监听_socket.io-client
文章浏览阅读8.3k次,点赞3次,收藏2次。git restore <file>表示将在工作空间但是不在暂存区的文件撤销更改.git restore --staged <file>作用是将暂存区的文件从暂存区撤出,但不会更改文件。演示1:1、仓库初始状态:干净的仓库,下面有一个readme文件小静静@DESKTOP-MD21325 MINGW64 /d/test1/test1 (master)$ git statusOn branch masterYour branch is up to date with_git restore