首页 > 系统相关 >25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函数,定义和使用函数文件,环境函数和示例

25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函数,定义和使用函数文件,环境函数和示例

时间:2024-09-03 13:25:23浏览次数:12  
标签:函数 zaishu 调用函数 echo hi root declare 定义



文章目录

  • 前言
  • 管理函数
  • 定义函数
  • 交互式环境调用函数
  • 查看函数
  • 删除函数
  • 脚本中的函数
  • 定义及使用函数
  • 使用函数文件
  • 环境函数
  • 示例
  • 总结
  • 友情链接


前言


函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分 函数和shell程序比较相似,区别在于Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此在当前Shell中,函数可对shell中变量进行修改


管理函数

函数由两部分组成:函数名和函数体
帮助参看:help function

定义函数

#语法一:
func_name (){
 ...函数体...
 }
#语法二:
function func_name {
 ...函数体...
 } 
#语法三:
function func_name () {
 ...函数体...
 }
[root@mdns zaishu]#hi() {
> echo "hello hi"
> }
[root@mdns zaishu]#hi
hello hi

交互式环境调用函数

交互式环境下定义和使用函数

[root@zaishu sh]# hello() {
> echo "helloworld"
> }
[root@zaishu sh]# hello
helloworld
[root@zaishu sh]# function hi {
> echo "hellworld"
> }
[root@zaishu sh]# hi
hellworld
[root@zaishu sh]# function nihao() {
> echo "hellworld"
> }
[root@zaishu sh]# nihao
hellworld

查看函数

#查看当前已定义的函数名
declare -F
#查看当前已定义的函数定义
declare -f
#查看指定当前已定义的函数名
declare -f func_name
#查看当前已定义的函数名定义
declare -F func_name
[root@zaishu sh]# declare -F
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
declare -f __VOLNAME
....
declare -f __expand_tilde_by_ref
[root@zaishu sh]# declare -f hi
hi () 
{ 
    echo "hellworld"
}
[root@zaishu sh]# declare -F nihao
nihao

删除函数

unset func_name
[root@zaishu sh]# unset nihao
[root@zaishu sh]# declare -F nihao
[root@zaishu sh]#

脚本中的函数

定义及使用函数

函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它后才能使用,调用函数仅使用其函数名即可

#! /bin/bash
# for example: add 1 2
add(){
  a=$1;
  b=$2;
  z=$((a+b));
  echo "The sum is $z";
}
add $1 $2
[root@zaishu sh]# ./add_num.sh 1 2
The sum is 3
#!/bin/bash
fun1() {
    echo "this is fun1()"
}

fun2() {
    echo "this is fun2()"
}

fun3() {
    echo "this is fun3()"
}

fun4() {
    echo "this is fun4()"
}

fun5() {
    echo "this is fun4()"
}

fun6() {
    echo "this is fun4()"
}

PS3="请选择相应的函数编号(1-7): "
MENU=(
    "1:函数fun1"
    "2:函数fun2" 
    "3:函数fun3"
    "4:函数fun4"
    "5:函数fun5"
    "6:函数fun6"
    "7:退出"
)

select C in ${MENU[*]}; do
    case $REPLY in
        1) 
        fun1
        ;;
        2) 
        fun2
        ;;
        3) 
        fun3
        ;;
        4) 
        fun4
        ;;
        5) 
        fun5
        ;;
        6) 
        fun6
        ;;
        7) 
        break 
        ;;
        *) echo "请输出1-7"
        ;;
    esac
done
[root@mdns zaishu]# ./hello.sh 
1) 1:函数fun1  3) 3:函数fun3  5) 5:函数fun5  7) 7:退出
2) 2:函数fun2  4) 4:函数fun4  6) 6:函数fun6
请选择相应的函数(1-7): 1
this is fun1()
请选择相应的函数(1-7): 3
this is fun3()
请选择相应的函数(1-7): 8
请输出1-7
请选择相应的函数(1-7): 7
[root@mdns zaishu]#

使用函数文件

可以将常使用的函数存入一个单独的函数文件,然后将函数文件载入shell,再调用函数文件,但最好与相关任务有某种联系,例如:functions一旦函数文件载入shell,就可以在命令行或脚本中调用函数。可以使用delcare -f 或set 命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载入此文件
实现函数文件的过程:

  1. 创建函数文件,只存放函数的定义
  2. 在shell脚本或交互式shell中调用函数文件,格式如下:
. filename 或 source   filename
[root@mdns zaishu]#cat funs 
#!/bin/bash
fun1(){
    echo "this is fun1"
}
fun2(){
    echo "this is fun2"
}
[root@mdns zaishu]#source funs # . funs
[root@mdns zaishu]#fun1 
this is fun1
[root@mdns zaishu]#fun2 
this is fun2
[root@mdns zaishu]#declare -f fun1
fun1 () 
{ 
    echo "this is fun1"
}
[root@mdns zaishu]#declare -f fun2
fun2 () 
{ 
    echo "this is fun2"
}

环境函数

类拟于环境变量,也可以定义环境函数,使子进程也可使用父进程定义的函数定义环境函数:

export -f function_name 
declare -xf function_name
定义环境变量:declare -x 变量名
修改环境变量为本地变量: declare +x 环境变量名

示例

查看环境函数:

export -f
 declare -xf

定义普通函数

[root@mdns zaishu]#hi() {
> echo "hello hi"
> }
[root@mdns zaishu]#hi
hello hi
[root@mdns zaishu]#declare -f
hi () 
{ 
    echo "hello hi"
}


[root@mdns zaishu]#declare -F
declare -f hi
[root@mdns zaishu]#declare -xf hi
[root@mdns zaishu]#export -f
hi () 
{ 
    echo "hello hi"
}
declare -fx hi

总结

shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函数,定义和使用函数文件,环境函数和示例。


标签:函数,zaishu,调用函数,echo,hi,root,declare,定义
From: https://blog.51cto.com/zaishu/11907896

相关文章

  • 通过自定义注解、反射和AOP在Spring Boot中动态修改请求参数
    在SpringBoot中,通过自定义注解、反射以及AOP(面向切面编程)来动态修改请求参数是一种高级且强大的技术组合,它允许开发者在不修改原始方法实现的情况下,对方法的执行过程进行干预和定制。这种技术通常用于日志记录、权限校验、参数校验、数据脱敏等场景。下面,我将详细阐述如何......
  • 【Canvas与艺术】五种函数化回文边纹纹饰荟萃
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>五种函数化回文边纹纹饰荟萃</title><styletype="text/css&......
  • 26. shell当中函数返回值,返回值的作用,退出码状态,得到函数处理结果
    函数返回值作用在其他编程语言中,返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果可通过return语句返回。但Shell中返回值表示的是函数的退出状态:返回值0表示函数执行成功,非0表示函数执行失败。if、while、for等语句都是根据函数的退出状态来判断条件是否......
  • Python正则表达式替换(sub)中如何使用替换函数
    defsub_the_chinese_colon_of_the_question_number(_lines:str)->str:""":param_lines:清理后的文本文件内容功能:查找并替换题号后的中文冒号为英文冒号。"""#定义替换函数,用于调用re.sub:defreplacement(match)->str:"&q......
  • pyro 概率编程语言 能直接调用pytorch的save函数保存模型,贝叶斯神经网络
    NeuralNetworks—Pyrodocumentationhttps://docs.pyro.ai/en/stable/nn.htmldocs.pyro.ai/en/stable/nn.html神经网络¶该模块pyro.nn提供在深度概率编程上下文中有用的神经网络模块的实现。烟火模块¶Pyro包括一个类PyroModule,的子类torch.nn.Module,其属性可以被火焰效果修......
  • 述FunsorFunsor是一个类似张量的函数和分布库。概率规划的泛函张量获取系统描述 ppl,p
    项目描述FunsorFunsor是一个类似张量的函数和分布库。看见概率规划的泛函张量获取系统描述。安装使用pip安装:Funsor支持Python3.7+。pipinstallfunsor从源安装:[email protected]:pyro-ppl/funsor.gitcdfunsorgitcheckoutmasterpipinstall.使用funsorFunsor......
  • 西游再现,函数计算一键部署 Flux 超写实文生图模型部署
    从花果山的灵石出世,到取经路上的九九八十一难,再到大闹天宫的惊心动魄……这些耳熟能详的西游场景,如今都能通过Flux模型,以超乎想象的细节和真实感呈现在你眼前。本次实验在函数计算中内置的flux.1-dev-fp8大模型,搭配Lora模型,无需复杂的配置,一键部署,你就能成为这场视觉盛宴的创造者......
  • OpenCV(cv::Mat 类的成员函数 ptr<T>())
    目录1.函数定义2.功能3.示例4.注意事项总结在OpenCV中,Mat类的成员函数ptr<T>()用于获取指向矩阵数据的指针,允许直接访问底层数据。T是指针的类型,它通常与矩阵的元素类型对应。通过这个函数,你可以以一种低开销的方式访问和修改矩阵数据。1.函数定义template<type......
  • class RepeatDataset在哪定义的?
     对于mmaction2工具箱,猜测这个RepeatDataset类大概率是在MMEngine包里面。找到路径:miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmengine/dataset/dataset_wrapper.py果然发现RepeatDataset类放到了mmengine包里面 pyskl/configs/rgbpose_conv3d/rgb_o......
  • 如何修改PbootCMS默认面包屑导航样式及自定义设置方法(如何自定义 PbootCMS 的面包屑导
    在PbootCMS中,面包屑导航是一个非常重要的导航元素,用于帮助用户了解当前页面的位置和路径。系统默认的面包屑样式可能无法满足所有需求,因此需要进行一定的自定义操作。以下是详细的自定义方法:调用面包屑导航的基本方式html {pboot:position}自定义面包屑导航参数可以......