摘要

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

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

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

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

一、Shell函数的语法

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

Shell 函数的定义格式如下:

[ function] funname [()]

{

command;

[returnint;]

}

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

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

二、Shell函数使用举例

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

示例1:

#!/bin/bash

# author:Linux大学

# url:www.linuxdaxue.com

#date:2016-06-01demo(){echo "这是我的第一个 shell 函数!"}echo "-----函数开始执行-----"demoecho "-----函数执行完毕-----"

说明: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

functionfSum()

{echo "入参为:"$1,$2return $(($1+$2))

}

fSum5 7total=$(fSum 3 2)echo "Return :"$total,$?

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

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

输出:

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

注意:

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

函数中用到的特殊字符

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

参数

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

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

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

linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...相关推荐

  1. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

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

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

  3. linux sed p变量,Linux sed 命令详解系列教程之各种问题解决

    本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...

  4. shell for循环命令行_精心汇总的24道shell脚本面试题

    虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇 ...

  5. linux 挂载硬盘_Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令...

    大家好,我是可乐,一个专注原创,乐于分享的程序猿.本系列教程持续更新,可以微信搜索「 IT可乐 」第一时间阅读.回复<电子书>有我为大家特别筛选的海量免费书籍资料 通过前面两篇博客,我们介 ...

  6. linux中rcf命名管道,RCF的简单使用教程以及什么是回调函数

    RCF的使用教程 RCF(Remote Call Framework)是一个使用C++编写的RPC框架,在底层RCF支持多种传输实现方式(transport implementations). 包括T ...

  7. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux

    提示:本文档为ESP32教程系列,旨在为客户进行ESP32系列芯片开发提供环境搭建.工程示例演示等方面的参考文档及视频演示,降低ESP32系列芯片.模组开发的入门难度. ESP32教程系列文档主要参考 ...

  8. Linux小小白入门教程(十五):用户和用户组

    Linux是一个权限控制非常严格的操作系统.在不了解Linux权限规则前提下,基本对Linux的操作会寸步难行. 简介 Linux中权限.用户.用户组三者之间关系紧密.要更好的使用Linux,必需掌握 ...

  9. python函数助手_转jmeter(十五)函数助手

    由于时间和版本问题,其中有些内容和排版我做了修改和重新整理,使其更符合最新的jmeter版本. 一.使用jmeter函数助手 启动jmeter后,可以在JMeter的选项菜单中找到函数助手对话框(快捷 ...

最新文章

  1. C# checked、unchecked操作符
  2. 新的Mac下如何配置开发者账号信息
  3. mysql防注入pdo_mysql PDO和存储过程动态SQL注入
  4. pandas 根据单号分类_由 “猫捉老鼠”游戏联想的用户分类问题
  5. ? SegmentFault Hackathon 文艺复兴上海站作品集 - 获奖篇
  6. JAVA并发编程实战---第三章:对象的共享(2)
  7. easyui label显示不全_easyui 元素遍历问题
  8. springboot异步任务
  9. mac原版镜像下载 macos官方镜像下载
  10. 小白的一周学习汇总!
  11. 基于DMD实现透过多模光纤(MMF)的聚焦
  12. 普度大学计算机科学博士,Top15普渡大学计算机博士全奖录取
  13. MyExcel 2.2.0 版本发布,支持公式导出
  14. ERP业务流程优化设计之思想和原则
  15. 情侣博客源码php,分享超炫的表白页面和爱的纪念日源码
  16. 磁盘分区MBR与GPT详解
  17. [杂记]LeTeX模板——ppt
  18. python编写word_如何使用Python来编辑word
  19. win常用快捷键 和 Dos(cmd)快捷键
  20. 谈谈关于Android迷宫密码破解

热门文章

  1. 3、深入理解计算机系统笔记:程序的机器级表示
  2. Cisco ××× 完全配置指南-连载-IOS ×××阶段2连接详解
  3. etcd 集群运维实践
  4. 首次编译Java小程序
  5. 对Linux Kernel 4.15的支持的VirtualBox 5.2.8发布
  6. mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
  7. 从零构建一个简单的 Python 框架
  8. CodeIgniter自带的数据库类使用介绍
  9. dubbo的provider和consumer的demo
  10. 微软云计算介绍与实践(实践之十七)