函数的定义和用途

函数function是由若干条shell命令组成的语句块,实现shell代码的重用和模块化编程。

函数和shell程序的异同点

它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分

区别:

1.shell程序会启动一个子shell来执行

2.函数会在当前shell中运行,因此在当前shell中,函数可以对shell中的变量进行修改 (  函数的有效范围是在当前shell   )

函数的优先级高于内部命令,外部命令,别名. 函数名称如果和以上三种名称冲突,优先函数执行.

删除函数     执行unset functionname

调用函数  functioname    调用时候不要添加()

全局函数    export  -f  functioname

匿名函数    cmd1 || {  cmd2;  cmd3; }       后面的 { }    相当于匿名函数

多个脚本中复用函数

source     functions(functions表示包含很多个函数的脚本文件)  或者 . functions

source    /etc/rc.d/init.d/functions

函数变量类型

1.全局(环境)变量  export

当前shell和子shell有效

2.局部变量(普通变量)

只在当前shell进程有效,为执行脚本会启动专用子shell进程; 因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数

3.本地变量   local

函数的生命周期;函数结束时变量被自动销毁

declare num 在函数中使用的话   相当于declare local  num    会自带local的特性         declare -g  num  声明为局部变量

如果函数中有局部变量,如果其名称同本地变量相同,使用局部变量

函数参数

传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;如“testfunc arg1 arg2 ...”

在函数体中当中,可使用$1, $2, ...调用这些参数;还可以使用$@, $*, $# 等特殊变量

函数返回值

return  退出函数本身   或者    return 100; 函数的返回值必须是一个数字       return 只能在函数中使用

$?  获取函数的返回值

函数有两种返回值:

函数的执行结果返回值:

(1) 使用echo等命令进行输出

(2) 函数体中调用命令的输出结果

函数的退出状态码:

(1) 默认取决于函数中执行的最后一条命令的退出状态码

(2) 自定义退出状态码,其格式为:

return  从函数中返回,用最后状态命令决定返回值

return 0  无错误返回

return 1-255  有错误返回

 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1(){ return ;}
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $? [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2(){ return "aaa"; }
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2
-bash: return: aaa: numeric argument required
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $? [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3() { echo ; }
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $?

shell进阶函数的更多相关文章

  1. linux shell 进阶篇、shell脚本编程-创建函数

    使用函数 #!/bin/bash # testing the script function myfun { echo "This is an example of a function&q ...

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

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

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

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

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

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

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

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

  6. Linux shell 自定义函数

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

  7. shell脚本--函数

    shell的函数和Javacript和php的函数声明一样,只不过shell在调用函数的时候,只需要写函数名就可以调用函数,注意不要在函数名后面加括号 创建并使用函数 #!/bin/bash #文件名 ...

  8. shell获取函数的返回值

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

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

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

随机推荐

  1. "佛祖保佑 永无bug" 注释模板设置详解(仅供娱乐)

    1.注释模板效果图 今天在网上看到一段有趣的注释,佛祖保佑 永无bug, 效果如下图所示:  代码如下所示: /** * _ooOoo_ * o8888888o * 88" . " ...

  2. JavaのEclipse安装Tomcat插件

    由于我装的eclipse是SE版,所以没有Servlet项目,需要自己安装插件. 一:首先到Tomcat的官网下载对应Tomcat版本. http://tomcat.apache.org/ 现在tom ...

  3. Orleans学习总结(一)--入门认识

    最近这段时间接触了些新的东西:Orleans框架.今天是春节前最后一天班,把我这段时间学习的东西总结一下分享给大家. 一.什么是Orleans (文档地址.这里我就直接翻译官方的介绍,有点地方翻译的有 ...

  4. NLP入门资料

    <统计自然语言处理> 一些基础理论概念,涉及统计自然语言处理的基本概念.理论方法和新研究进展,内容包括形式语言与自动机及其在自然语言处理中的应用.语言模型.隐马尔可夫模型.语料库技术.汉语 ...

  5. 剖析Elasticsearch集群系列之三:近实时搜索、深层分页问题和搜索相关性权衡之道

    转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch ...

  6. shell利用数组分割组合字符串

    #!/bin/bash #接收脚本参数如[sh a.txt .0_3_4_f_u_c_k_8080] a=$ #把参数分割成数组 arr=(${a//_/ }) #显示数组长度 #echo ${#ar ...

  7. VMWARE虚拟机不显示主机共享的文件夹解决办法

    执行如下命令重新配置,不用重启. #sudo vmware-config-tools.pl

  8. MPD软件工作坊上海站本周末在上海举行

    本周末(5月26日至27日)由麦思博(msup)主办的第39届MPD软件工作坊即将在上海虹桥会议中心举行.本届MPD将继续围绕软件研发领域,邀请了21位技术大咖,从产品运营.团队管理.架构技术.自动化 ...

  9. Codeforces 1038D - Slime - [思维题][DP]

    题目链接:http://codeforces.com/problemset/problem/1038/D 题意: 给出 $n$ 个史莱姆,每个史莱姆有一个价值 $a[i]$,一个史莱姆可以吃掉相邻的史 ...

  10. [No0000189]改善C#程序的建议10:用Parallel简化Task

    在命名空间System.Threading.Tasks下,有一个静态类Parallel简化了在同步状态下的Task的操作.Parallel主要提供了3个有用的方法:For.ForEach.Invoke ...