Bash Shell语法之三函数简介

 Bash Shell语法之三函数简介

一、什么是Bash函数

像其他编程语言一样,Shell 也支持函数。Shell函数必须先定义后使用。函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。

二、Bash函数定义格式

[ function ] fun () {

        函数体

[ retrun n ]

}

  说明:

    1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

三、函数返回值

函数返回值,可以用return语句;如果不加,会将最后一条命令运行结果作为返回值。Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值(非0)表示失败。

四、函数参数

在函数种调用函数参数的方式,同脚本中调用脚本参数的方式:位置参数 $1 $2 ……$# $* $@

五、函数调用

函数名出现的地方,会被自动替换为函数;要执行函数中的命令必须在脚本中或命令行上调用函数

六、函数实例

1、

1.png

2、2.png

3、函数定义实例

4.png

5.png

  从上面这个例子的结果我们可以得到几点结论:

         1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。所以第一行报错。

         2total=$( fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 单括号里面可以是命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

         3、函数返回值,只能通过$? 系统变量获得,直接通过=获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。

4、函数作用域实例

  6.png

7.png

  我们一起来分析下上面这个实例,可以得到如下结论:

  1. 定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。

  2. 需要获得函数值:通过$?获得

  3. 如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。

  4. 如果需要定义自己变量,可以在函数中定义:local 变量= ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值

原创文章,作者:wxdz_2004(古雨秋),如若转载,请注明出处:http://www.178linux.com/4067

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-05-11 12:01
下一篇 2015-05-11 12:21

相关推荐

  • 4

    1;复制/etc/skel目录为/home/tuinser1, 要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 #   install -d -m 700 /etc/skel /home/tuser1  #  &nbsp…

    Linux干货 2017-01-16
  • 新的篇章

    第一天,linux,努力,奋斗!

    Linux干货 2017-07-11
  • 磁盘管理和高级文件系统管理-习题

    高级文件系统管理-习题 1、 创建一个可用空间为40G 的RAID1 设备,要求其chunk大小为128k ,文件系统为ext4 ,有一个空闲盘,开机可自动挂载至/backup目录 [root@centos7 ~]# mdadm -C /dev/md0 -c 128 -a yes -l 1 -n 2 -x 1 /dev/sdb /dev/sdc /dev/s…

    Linux干货 2016-09-01
  • keepalived+nginx-upstream部署高可用反向代理

    keepalived+nginx-upstream部署高可用反向代理 实验拓扑 实验要求 两个web server提供httpd服务,ip地址分别是172.18.27.201、202,掩码是16 两个nginx proxy提供高可用反向代理,ip地址分别是172.18.27.102、200,掩码是16. client能够访问web server,使用dr模型…

    2017-05-15
  • 26期全程班-第五周博客作业

      1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep “^[[:space:]]\+” /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; # grep “^…

    Linux干货 2017-03-09
  • Linux基础知识(一)-linux哲学思想,基础命令,FHS

    1.描述计算机的组成及其功能 2.按系列罗列Linux 的发行版,并描述不通发行版之间的联系和区别. 3.描述Linux的哲学思想,并按照自己的理解对其进行解释 4.说明Linux系统命令的使用格式,详细介绍ifconfig,echo,tty,startx,export.pwd,history,shutdown,poweroff,reboot,hwclock…

    Linux干货 2016-09-22