《前端运维》一、Linux基础–07Shell函数

linuxshell可以用户定义函数,然后在shell脚本中可以随便调用。shell中函数的定义格式如下:[function]funname[()]{action;[return

大家好,又见面了,我是你们的朋友全栈君。

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。shell中函数的定义格式如下:

[ function ] funname [()]

{

    action;

    [return int;]

}

Shell中的函数有两种写法,一种是:

function a() {
  action;
  return init;  
}

另外一种是:

a() {
  action;
  return init;  
}

这两种的含义都是一样的。参数的返回,可以显示加return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n,n可以使0~255的数字。0代表成功。

我们来看个例子:

#!/bin/bash
demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

结果是:

<span role="heading" aria-level="2">《前端运维》一、Linux基础--07Shell函数

 我们再来看一个带有return的函数例子:

#!/bin/bash
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

结果是:

<span role="heading" aria-level="2">《前端运维》一、Linux基础--07Shell函数

 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…之前在变量的一篇文章里我们聊过这个,不再重复,我么来看一个带参数的例子:

#!/bin/bash
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

结果是:

<span role="heading" aria-level="2">《前端运维》一、Linux基础--07Shell函数

ps:

1、$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

例子:

#!/bin/bash

function demoFun1(){
    echo "这是我的第一个 shell 函数!"
    return `expr 1 + 1`
}

demoFun1
echo $?
echo $?

结果:

<span role="heading" aria-level="2">《前端运维》一、Linux基础--07Shell函数  

 2、函数与命令的执行结果可以作为条件语句使用。要注意的是,和 C 语言不同,shell 语言中 0 代表 true,0 以外的值代表 false。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124361.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • iReport自定义快捷键「建议收藏」

    iReport自定义快捷键「建议收藏」设置方法:工具-选项-快捷键映射预览CTRL+D工具-选项-快捷键映射-designer-runreport编辑sql语句ALT+A工具-选项-快捷键映射-designer-editorReportqueryadapttopartentheight快捷键ALT+S页面设计ALT+D适应band的宽度ALT+F顶部对齐ALT+G左对齐ALT+H子报表参考ALT

    2025年10月20日
    5
  • mfc多线程串口通信_python进程和线程之间通信

    mfc多线程串口通信_python进程和线程之间通信AfxBeginThead全局变量参数传递消息传递线程通信目录(?)[-]线程间的通信线程之间的通信简介全局变量方式参数传递方式消息传递方式线程同步法线程间的通信1.线程之间的通信简介一般而言,在一个应用程序中(即进程),一个线程往往不是孤立存在的,常常需要和其它线程通信,以执行特定的任务。如主线程和次线程,次线程与次线程,工作线程和

    2022年9月28日
    3
  • SplitContainer 控件作用[通俗易懂]

    SplitContainer 控件作用[通俗易懂]原文出处:http://blog.csdn.net/xiaobai1593/article/details/7356973作用:(Splitter的简化)使用 SplitContainer 控件可分隔容器(如 Form)的显示区域,并使用户可以调整已添加到 SplitContainer 面板中的控件的大小。当用户将鼠标指针移到拆分器上时,光标将发生变化,以指示可以调整 SplitC

    2022年7月18日
    20
  • scala swing

    scala swing

    2022年4月3日
    40
  • 几款常用UML建模工具解析[通俗易懂]

    本节向大家介绍几款常用UML建模工具,UML是个好东西,但是过分的依赖于UML也不是一件好事,因为有时候它会把简单的东西复杂化。请看下面详细介绍。常用UML建模工具UML不算是个新名词,但是实际中还是用得很少(可能是因为都是做小项目的原因吧,大项目就用得多了).UML是个好东西,但是过分的依赖于UML也不是一件好事,因为有时候它会把简单的东西复杂化.即使是代码的优良结构和可重用性也不能

    2022年4月6日
    131
  • Java学习之Spring框架入门篇

    Java学习之Spring框架入门篇0x00前言最近在学SSM的三大框架,上篇文章,已经更新了Mybatis的相关内容,那么这篇文章就来写写Spring的入门。0x01Spring概述S

    2021年12月12日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号