http://xiaosu.blog.51cto.com/2914416/531247

Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快。

1.  函数定义

function 函数名()

{

语句

[return]

}

关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后可以跟一个括号,

符号“{”表示函数执行命令的入口,该符号也可以在函数名那一行,“}”表示函数体的结束,两个大括号之间是函数体。

语句部分可以是任意的Shell命令,也可以调用其他的函数。

如果在函数中使用exit命令,可以退出整个脚本,通常情况,函数结束之后会返回调用函数的部分继续执行。

可以使用break语句来中断函数的执行。

declare –f 可以显示定义的函数清单

declare –F可以只显示定义的函数名

unset –f 可以从Shell内存中删除函数

export –f将函数输出给Shell

另外,函数的定义可以放到.bash_profile文件中,也可以放到使用函数的脚本中,还可以直接放到命令行中,还可以使用内部的unset命令删除函数。一旦用户注销,Shell将不再保持这些函数。

2.  函数的调用

函数调用的实例:

#!/bin/bash

function show

{

echo “hello , you are calling the function”

}

echo “first time call the function”

show

echo “second time call the function”

show

3.  函数参数的传递

函数可以通过位置变量传递参数。例如

函数名 参数1 参数2 参数3 参数4

当函数执行时,$1 对应 参数1,其他依次类推。

实例:

#!/bin/bash

function show

{

echo “hello , you are calling the function  $1”

}

echo “first time call the function”

show first

echo “second time call the function”

show second

4.  函数的返回值

函数中的关键字“return”可以放到函数体的任意位置,通常用于返回某些值,Shell在执行到return之后,就停止往下执行,返回到主程序的调用行,return的返回值只能是0~256之间的一个整数,返回值将保存到变量“$?”中。

实例:

#!/bin/bash

function test

{

RESULT=`expr $1 \% 2`     //表示取余数

if [ $RESULT –ne 0 ] ; then

return 0

else

return 1

fi

}

echo “Please enter a number who can devide by 2”

read N

test $N

case $? in

0)       echo “yes ,it is”;;

1)       echo “no ,it isn’t”;;

esac

在这里要注意参数传递了,上面read进来的数字,必须加上dollar符号才能传递给函数,我刚开始不知道是哪里错了,找了半天才知道是这里出错了。

5.  函数的载入

如果函数在另外一个文件中,我们该怎么调用它呢?

这里就有一个方法。比如show 函数写在了function.sh里面了,我们就可以用

source function.sh

show

这样就可以调用了。

6.  函数的删除

用法:unset –f 函数名

7.  函数的作用域

默认情况下,变量具有全局作用域,如果想把它设置为局部作用域,可以在其前加入local

例如:

local a = ”hello”

使用局部变量,使得函数在执行完毕后,自动释放变量所占用的内存空间,从而减少系统资源的消耗,在运行大型的程序时,定义和使用局部变量尤为重要。

8.  函数的嵌套

函数可以进行嵌套,实例:

#!/bin/bash

function first

{

function second

{

function third

{

echo “------this is third”

}

echo “this is the second”

third

}

echo this is the first

second

}

echo “ start ……..”

first

小苏的Shell编程笔记之六--Shell中的函数的更多相关文章

  1. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  2. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  3. shell编程系列1--shell脚本中的变量替换

    shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...

  4. shell编程笔记(1)

    shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言    强类型(变量)    事先转换成可执行格式    C.C++.JAVA.C#           ...

  5. shell编程笔记(基本部分)

    1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...

  6. linux系列之-—01 shell编程笔记

    一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...

  7. shell编程笔记1

    参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877   通过chmod改变文件权限 补充知识: 1Linux文件的三 ...

  8. Shell编程学习之Shell编程基础(一)

    这篇随笔将要介绍关于Shell编程的基本知识,这些将会在假设你已经熟悉了Linux系统和命令行的基本知识. 构建基本脚本 你应该了解或熟悉使用Shell命令行了,但是只是使用Shell命令行的命令,有 ...

  9. shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)

    如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...

随机推荐

  1. Selenium驱动Chrome浏览器

    import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome ...

  2. 阿里云DTS VS MySQLdump

    云平台的到来,使得越来越多用户的数据库由云下迁到云上.对于这种情况,阿里对此提出两种方案,一种是MySQL自带的MySQLdump,另外一种就是阿里云的DTS. DTS支持异构数据源之间的数据迁移同步 ...

  3. Nginx 配置 HTTPS自签名证书

    工具: OpenSSL ssl的开源实现,几乎实现了市面上所有的加密 libcrypto: 通用加密库, 任何软件要实现加密功能 链接调用这个库 libssl: TLS/SSL 加密库 openssl ...

  4. Julia 学习笔记(一):数组

    个人向,只会记录一些需要注意的点. 前言 学习 Julia 已经有一段时间了,但是进步缓慢.这一方面是最近代码写得少,一方面是 Julia 学习资料少.中文资料更少,但也有我没做笔记的缘故导致学习效率 ...

  5. NO3——BFS

    #include <stdio.h> #include <string.h> #include <queue> using namespace std; struc ...

  6. vector sort AND 友元

    # include<iostream> # include<string> # include<algorithm> # include<stdio.h> ...

  7. iOS-开发,拨打电话

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"te ...

  8. 第四次JAVA作业

    public class TvbDog { public static void main(String[] args) {  Dog per=new Dog("陈狗"," ...

  9. mysqli DB封装

    <?php class DB { //私有的属性 private static $dbcon = false; private $host; private $port; private $us ...

  10. Flink之状态之状态获取

    1.什么是状态 对于任何一个操作,都可以被看成是一个函数,比如y=f(x),如果对于同一个x的任何一次输入,得到的y都是相同的,则可以认为这个函数是无状态,否则,这个函数就是有状态的.Flink的一大 ...