linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。

原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675421.html

微信:intsmaze

函数定义

  1. #!/bin/sh
  2. # func1.sh
  3. hello() ## 函数定义
  4. {
  5. echo "Hello there today's date is `date +%Y-%m-%d`"
  6. # return 2 ###返回值其实是状态码,只能在[0-255]范围内
  7. }
  8. hello #函数调用
  9. echo $? #获取函数的return值,就是获取上一个命令的状态码,如果return 2没有注释,就是获取return 2 命令的状态吗。
  10. echo "now going to the function hello intsmaze"

调用脚本

  1. [hadoop@centos-Reall-131 shtest]$ sh func1.sh
  2. Hello there today's date is 2017-04-06
  3. 0
  4. now going to the function hello intsmaze

注意:

1.必须在调用函数之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。

2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

函数参数

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

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

  1. [hadoop@centos-Reall-131 shtest]$ sh fun1.sh
  2. 第一个参数为 1 !
  3. 第二个参数为 2 !
  4. 第十个参数为 10 !
  5. 第十个参数为 34 !
  6. 第十一个参数为 73 !
  7. 参数总数有 11 个!
  8. 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

函数返回值

  1. #!/bin/bash
  2. # fun2.sh
  3. funWithReturn(){
  4. echo "这个函数会对输入的两个数字进行相加运算..."
  5. echo "输入第一个数字: "
  6. read aNum
  7. echo "输入第二个数字: "
  8. read anotherNum
  9. echo "两个数字分别为 $aNum 和 $anotherNum !"
  10. return $(($aNum+$anotherNum))
  11. }
  12. funWithReturn
  13. echo "输入的两个数字之和为 $? !"#这里上一个命令是 return $(($aNum+$anotherNum))

调用脚本

  1. [hadoop@centos-Reall-131 shtest]$ sh fun2.sh
  2. 这个函数会对输入的两个数字进行相加运算...
  3. 输入第一个数字:
  4. 100
  5. 输入第二个数字:
  6. 200
  7. 两个数字分别为 100 200 !
  8. 输入的两个数字之和为 44 !#这里上一个命令是 return 300

跨脚本调用函数

假如上述的脚本文件fun1.sh保存在此路径:/root/fun1.sh

则可在脚本fun_other.sh中调用脚本fun1.sh中的函数

  1. #!/bin/bash
  2. # fun_other.sh
  3. . /root/fun1.sh # 注: . 和 / 之间有空格
  4. # 或者 source /root/fun1.sh
  5. funWithParam 11 22 33 44 55 66 77 88 99 100 101

调用脚本

  1. [hadoop@centos-Reall-131 shtest]$ sh fun_other.sh
  2. 第一个参数为 1 !
  3. 第二个参数为 2 !
  4. 第十个参数为 10 !
  5. 第十个参数为 34 !
  6. 第十一个参数为 73 !
  7. 参数总数有 11 个!
  8. 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
  9. 第一个参数为 11 !
  10. 第二个参数为 22 !
  11. 第十个参数为 110 !
  12. 第十个参数为 100 !
  13. 第十一个参数为 101 !
  14. 参数总数有 11 个!
  15. 作为一个字符串输出所有参数 11 22 33 44 55 66 77 88 99 100 101 !

Linux之shell编程函数使用的更多相关文章

  1. 【Hadoop离线基础总结】linux的shell编程

    linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...

  2. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  3. Linux下Shell编程

    Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...

  4. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  5. 3. Linux的shell编程

    Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...

  6. Linux之shell编程的基本使用

    1.Shell shell是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的系统级程序 2.shell编程打印hello world 2.1 代码部分 #!/bin/ba ...

  7. Linux操作系统shell与函数详解

    shell和函数的定义 1. linux  shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell  函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...

  8. linux中shell编程

    shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...

  9. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

随机推荐

  1. BZOJ 3401: [Usaco2009 Mar]Look Up 仰望(离线+平衡树)

    刷银组刷得好开心= = 离线按权值排序,从大到小插入二叉树,查找树中比这个数大的 CODE: #include<cstdio>#include<iostream>#includ ...

  2. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

  3. p1154 地平线

    题目描述 Farmer John的牛们认为,太阳升起的那一刻是一天中最美好的,在那时她们可以看到远方城市模糊的轮廓.显然,这些轮廓其实是城市里建筑物模糊的影子. 建筑物的影子实在太模糊了,牛们只好把它 ...

  4. linux 下 zookeeper安装

    1.安装zookeeper-3.4.6cd /usr/soft#解压zookeeper 安装包tar -zvxf zookeeper-3.4.6#拷贝安装包到安装目录cp zookeeper-3.4. ...

  5. USTC 1119 graph 图的同构

    USTC 1119 图的同构的严格定义可以参考离散数学:The simple graphs G1=(V1,E1) and G2=(V2,E2)are isomorphic if there exist ...

  6. Spring+CXF的WebServices简单示例

    本文就最简单的WebServices示例来演示Spring和CXF的整合. 使用Maven创建webapp项目,pom如下 <properties> <cxf.version> ...

  7. Visual Studio 20周年,我和VS不得不说的故事(内含福利)

    Visual Studio 2017正式版已如期发布(点击这里查看发布全记录)!自去年 11 月正式宣布 Visual Studio 项目之后,微软终于正式推出了“宇宙最强集成开发环境(IDE)”的最 ...

  8. BOM基础(四)

    最近写的文章感觉内容不像之前那么充实,内容可能也有点杂.对于DOM,和BOM来说,要理解是不难的,难的是做的时候.要自己想的到,而且,对于目前阶段来说,BOM还存在着很大的兼容性问题,最主要就是要兼容 ...

  9. 学习H5一周随笔

    H5学习也已经进行了一个周了,除了学习过程中的乱哄哄的脑子,对H5初学者(我)常见的问题有了如下见解. 1.初学者在建立新的Html文件之后,有时候会把 <meta charset=" ...

  10. JSP +++SERVIET总复习

    一. JSP基础概念 软件架构 B/S架构:Browser/Server,浏览器-服务器 最大的优点就是:一次部署,处处访问. C/S架构:Client/Server,客户端-服务器 功能.事件丰富, ...