本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程

上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高。

高级语言都支持函数,Shell也不例外。今天就为大家介绍下Shell中函数相关用法。

一、Shell函数的语法

因为函数是脚本类语言,在执行时是逐行执行的,因此,Shell 函数必须先定义后使用。

Shell 函数的定义格式如下:

[ function ] funname [()]
{command;[return int;]
}

说明:function 关键词是可选项,可加可不加。

大括号内饰函数体,最后是返回值,可以加【return】关键词来指定函数返回内容,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)。

二、Shell函数使用举例

接下来我们还是通过例子来学习下Shell函数的运用。

示例1:

#!/bin/bash
# author:Linux大学
# url:www.linuxdaxue.com
#date:2016-06-01demo(){echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demo
echo "-----函数执行完毕-----"

说明:demo是一个函数的定义,函数体只有一句:echo“这是我的第一个 shell 函数!“

然后通过函数名来调用函数。

程序输出:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

这个例子并没有体现函数的入参等使用,接下来给大家介绍下Shell中函数的传参方法。

三、Shell函数参数处理

在Shell中,调用函数时可以向其传递参数。

在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数,$0代表脚本本身。

Shell函数参数处理例子

示例2:

我们再看一个例子:

#!/bin/sh
#Author:Linux大学
#url:http://www.linuxdaxue.com
#date:2016-06-01
function fSum()
{echo "入参为:"$1,$2return $(($1+$2))
}
fSum 5 7
total=$(fSum 3 2)
echo "Return :"$total,$?

这个定义了一个计算参数和的函数,函数可以通过$1,$2这种形式来获取入参值,然后通过$(($1+$2))这种形式来将两值相加,并返回结果。

调用时,也可以通过括号的形式来调用,Shell会调用单括号里面的命令。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。

输出:

入参为:5,7
Return :入参为:3,2,5

注意:

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

函数中用到的特殊字符

另外,还有几个特殊字符用来处理参数:

参数 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

好了,有关Shell函数的相关知识先为大家介绍到这里,Shell中的函数非常强大,在此不再展开讲,希望大家能够自己多多练习,熟练掌握。

更多Linux Shell教程请看:Linux Shell脚本系列教程

原文:Linux Shell系列教程之(十五) Shell函数简介

上一篇:Linux Shell脚本入门教程系列之(十四) Shell Select教程

下一篇:Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

本文转自:Linux Shell脚本入门教程系列之(十五) Shell函数简介

Linux Shell脚本入门教程系列之(十五) Shell函数简介相关推荐

  1. Linux Shell脚本入门教程系列之(五)Shell字符串

    本文是Linux Shell脚本系列教程的第(五)篇,更多shell教程请看:Linux Shell脚本系列教程 字符串是Shell编程中最常用最有用的数据类型,继上一篇之后,今天,Linux大学网就 ...

  2. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  3. Linux Shell脚本入门教程系列之(十四) Shell Select教程

    本文是Linux Shell脚本系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句 ...

  4. Linux Shell脚本入门教程系列之(十二)Shell until循环

    本文是Linux Shell脚本系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环 ...

  5. Linux Shell脚本入门教程系列之(十)Shell for循环

    本文是Linux Shell脚本系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,继上一篇之后,今天 ...

  6. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程

    本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之 后,分支语句非常实用,基本上高级语言都支持分支语句(pytho ...

  7. Linux Shell脚本入门教程系列之(十一)Shell while循环

    本文是Linux Shell脚本系列教程的第(十一)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇Linux Shell系列教程之(十)Shell for循环中, ...

  8. Linux Shell脚本入门教程系列之(九)Shell判断 if else 用法

    本文是Linux Shell脚本系列教程的第(九)篇,更多shell教程请看:Linux Shell脚本系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外.继上一篇之后,今天 ...

  9. Linux Shell脚本入门教程系列之(八)Shell printf命令详解

    本文是Linux Shell脚本系列教程的第(八)篇,更多shell教程请看:Linux Shell脚本系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对She ...

最新文章

  1. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
  2. Node.js学习笔记(一)
  3. node升级命令_Laravel Mix 4升级说明与“排坑儿”指南
  4. centos7 安装git_如何在 CentOS 7 上挂载 Amazon EFS 文件系统?
  5. 机械制造技术学习笔记(七)
  6. Citrix Port(常用端口)
  7. 今日头条 CEO 张一鸣:面试了 2000 个年轻人
  8. python copy函数用法_Python深浅拷贝
  9. 高等数学下-赵立军-北京大学出版社-题解-练习8.4
  10. VS2013 异常处理
  11. C++提高部分_C++普通函数与函数模板的区别---C++语言工作笔记084
  12. 这打车App麻烦了!遭黑客勒索巨额比特币
  13. 更改ESXi主机root用户密码
  14. 把路由器改成无线网卡
  15. LoadRunner教程(13)-LoadRunner 服务水平协议
  16. 温湿度传感器的工作原理及应用领域你了解多少呢
  17. google保存网页为图片
  18. less转换css及html里面JS的引入
  19. QCC3040---芯片数据手册 ADK release data sheet
  20. 穆易天气app代码(一)

热门文章

  1. Cow Contest(POJ-3660 )
  2. linux私有组信息存放在哪,【Linux】Linux私有组,主要组和附加组
  3. python现在的时间是几点_Python 的日期和时间处理
  4. AI(artificial intelligence)的学习
  5. 网页mp3提取器_用Python写一个酷狗音乐下载器!
  6. 6D位姿估计算法Densefusion代码阅读
  7. PyCharm的structure自动定位到相应的函数位置
  8. scala中class与object区别.
  9. phpcms底部版权信息修改教程——修改“开发团队”信息
  10. DedeCMS高仿老版chinaz站长网模板