函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数。如果想要这个函数,只要调用这个函数的名称就可以了。使用函数的好处在于模块化以及代码可读性强。

(1).函数的创建语法

  函数的创建方法一:

  1. function 函数名称 {
  2. 命令
  3. }

  函数的创建方法二:

  1. 函数名称() {
  2. 命令
  3. }

  注意:函数名称在当前脚本必须唯一。

  调用函数的方法:

  1. 函数名称 参数1 参数2 ......

  调用函数时可以传递参数,函数中使用$1、$2......来引用传递的参数。

(2).函数的使用实例

  实例1:

  1. [root@youxi1 ~]# vim a.sh
  2. #!/bin/bash
  3. function fun1 {
  4. echo "hello world"
  5. }
  6.  
  7. fun2() {
  8. echo $[$1+$2]
  9. }
  10.  
  11. fun1
  12. fun2 1 2
  13. [root@youxi1 ~]# sh a.sh
  14. hello world
  15. 3

  实例2:如果存在相同名称的函数,以最后一个为准

  1. [root@youxi1 ~]# vim b.sh
  2. #!/bin/bash
  3. function fun1 {
  4. echo "hello world"
  5. }
  6.  
  7. fun1() {
  8. echo "This is rewrite"
  9. }
  10.  
  11. fun1
  12. [root@youxi1 ~]# sh b.sh
  13. This is rewrite

(3).return返回值

  使用return命令来退出函数并返回特定的退出码($?)

  1. [root@youxi1 ~]# vim c.sh
  2. #!/bin/bash
  3. fun1() {
  4. echo "return 3"
  5. return 3
  6. echo "why?"
  7. }
  8.  
  9. fun1
  10. [root@youxi1 ~]# sh c.sh
  11. return 3
  12. [root@youxi1 ~]# echo $?
  13. 3

  注意:return一般是在函数的最后一行,因为一旦执行return命令,该函数后面的命令就不执行了。

  return与exit的区别:return和exit都可以返回退出码,但是不同的是,return是退出函数,而exit是退出整个脚本。

(4).函数值赋给变量

  如下方实例中显示,此时的函数就相当于一个命令,需要使用$()或``调用。

  1. [root@youxi1 ~]# vim d.sh
  2. #!/bin/bash
  3. fun1() {
  4. read -p "Input a number:" num
  5. echo $[num*5]
  6. }
  7.  
  8. num2=`fun1`  #也可以是$(fun1)
  9. echo $num2
  10. [root@youxi1 ~]# sh d.sh
  11. Input a number:2
  12. 10

(5).外部参数传入函数

  前面已经提到过,调用函数可以在后面跟随参数,函数内部可以使用$n的形式调用。

  1. [root@youxi1 ~]# vim e.sh
  2. #!/bin/bash
  3. fun1() {
  4. echo $1
  5. }
  6.  
  7. fun2() {
  8. echo $1
  9. }
  10.  
  11. fun3() {
  12. echo $1
  13. }
  14.  
  15. fun1 $1
  16. fun2 /root/a.sh
  17. fun3 5
  18. [root@youxi1 ~]# sh e.sh hello
  19. hello
  20. /root/a.sh
  21. 5

(6).函数的参数

  在一个脚本当中,函数外的参数,函数可以直接调用,并且函数内的参数,只要运行过函数,外部也可以直接调用。

  1. [root@youxi1 ~]# vim f.sh
  2. #!/bin/bash
  3. num=5
  4. fun1() {
  5. num2=$[num*10]
  6. }
  7. fun1
  8. echo $num2
  9. [root@youxi1 ~]# sh f.sh
  10. 50

  注意:脚本内的参数仅限脚本内使用

shell中函数的使用的更多相关文章

  1. shell 中函数放回字符串问题

    shell 中函数放回字符串问题 shell 中不可以直接 return 字符串 ,可以return 数字.如果要return 字符串 改为 echo "hello world" ...

  2. shell中函数返回值

    1.前言 快半年没有写博客了,荒废了很久,工作中的杂事太多,自己越来越懒了.为了鞭策自己成长,还是要坚持写写博客,记录自己的成长. 2.shell函数介绍 语法: [ function ] funna ...

  3. shell从函数文件里调用函数

    碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在以下直接调用:一种是通过加载shell,在shell中直接调用:第三种是将函数写入文件 ...

  4. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  5. Linux Shell 之 Shell中的函数调用

    说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总 ...

  6. Linux shell 自定义函数

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

  7. shell进阶函数

    函数的定义和用途 函数function是由若干条shell命令组成的语句块,实现shell代码的重用和模块化编程. 函数和shell程序的异同点 它与shell程序形式上是相似的,不同的是它不是一个单 ...

  8. shell获取函数的返回值

    背景:定义了一个函数,比对本地和线上服务器集群数量差别,想要获取不同集群的个数.shell和其他语言的函数返回值还是差别挺大的.   定义一个函数 functionname(){      操作内容 ...

  9. linux shell 自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

随机推荐

  1. table的各种用法

    使用 colgroup 和 col 实现响应式表格(table的各种用法):http://coderlt.coding.me/2017/11/20/table-colgroup/

  2. 2019牛客暑期多校训练营(第五场)B:generator 1 (10进制快速幂)

    题意:给定x0,x1,a,b,满足xi=a*xi-1+b*xi-2: 求xn,n<10^(10^6): 思路:10进制快速幂裸题.降幂来写好像也是可以的,但是循环节不是phi(mod),所以数学 ...

  3. 如何保护你的 Python 代码 (一)—— 现有加密方案

    https://zhuanlan.zhihu.com/p/54296517 0 前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密,讲述了如何通过修改 Pytho ...

  4. NSURLProtocol

    An NSURLProtocol object handles the loading of protocol-specific URL data. @abstract This method reg ...

  5. render()--组件--纯函数

    render() 当 被调用时,它会检查 和 的变化并返回以下类型之一: React 元素.通常通过 JSX 创建.例如,<div /> 会被 React 渲染为 DOM 节点,<M ...

  6. O2O项目之一 环境搭配

    技术栈:vue全家桶(使用nuxtjs:https://zh.nuxtjs.org/guide/installation  ) + ssr + redis + mongodb + wabpack + ...

  7. idea中隐藏.iml文件

    在创建父子工程或者聚合工程时产生的大量 .iml 文件,有时会对我们的操作产生干扰,所以,一般情况下,我们都将其隐藏掉,步骤如下: File——>settings——>Editor——&g ...

  8. Ansible自动部署tomcat

    1.首先准备3台机器 ansible机器:192.168.52.34 目标主机:192.168.52.35 目标主机:192.168.52.36 2.关闭防火墙 [root@localhost ~]# ...

  9. UFUN函数 UF_CSYS函数 UF_MTX函数(如何创建坐标系);

    // (题目不够长,写在这了) // 函数有 // UF_MTX3_initialize,UF_CSYS_create_matrix,UF_CSYS_create_csys,UF_CSYS_ask_c ...

  10. Linux安全加固(二)禁止普通用户su到root/设置SSH终端接入白名单/修改history条数

    一.禁止普通用户su到root管理员.设置可以su到root的白名单 1.首先看一下正常情况 2.可以看到普通用户使用su root命令,输入密码即可登录到root用户 3.下面开始配置禁止所有普通用 ...