函数定义格式:

和js有点类似,不过在 shell 中 function 关键字是可选的。

如:

sum
{
// shell 语句
}

  

function sum()
{
// shell 语句
}

函数调用方法:

sum 参数1 参数2 ...

  

获取函数参数:

这个和我们以往的经验可能不太一样,shell 中获取函数参数的方式有点特别。

一般语言中,都是在函数名后面的括号中给定一个变量名去接收函数参数。

而在 shell 中,获取函数参数的方式是在函数体中使用美元符号加上数字获取,如 $1  获取第一个参数,$2 获取第二个参数,依次类推,但是大于或等于 10 的时候,$ 后面的数字要加上大括号,如 ${10}。

如:

sum()
{
echo $(($1 + $2))
}

  

与 $ 有关的其他参数:

参数处理 说明
$#   传递给函数的参数总个数
$*    以一个字符串显示所有的参数
$$    脚本运行的当前进程的ID号
$!  后台运行的最后的进程的ID号
$@  与$*相同,但是在使用时加引号,并在引号中返回每个参数
$-  显示 shell 使用的当前选项,如:我们使用 set -x 的时候,$- 中会包含 x
$?  显示上一条命令的退出状态,或者说是返回值,没有返回值并正常运行的时候会返回 0

  

如:

#!/bin/bash

funcA()
{
return 123
} sum()
{
echo "参数总个数: $#"
echo "字符串形式显示所有参数: $*"
echo "脚本运行的进程ID号: $$"
echo "字符串形式显示所有参数: $@"
echo "shell脚本运行的选项: $-"
funcA
echo "上一个语句的返回值: $?"
echo $(($1 + $2))
} sum 1 2

上面的代码会输出:

参数总个数: 2
字符串形式显示所有参数: 1 2
脚本运行的进程ID号: 1408
字符串形式显示所有参数: 1 2
shell脚本运行的选项: hB
上一个语句的返回值: 123
3

  

脚本中获取任意多的参数:

#!/bin/bash

sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
echo $sum;
} sumMulti 1 2 3 4 5

  

while 后面的中括号左右需要有空格,语法需要,书写格式没有一般语言自由,

并且赋值表达式的等号左右不能有空格,有空格的语句,shell会将第一个词作为 shell 命令,然后将第一个空格后面的任何内容当作 shell 命令的参数,这也是 shell 的独特之处,理解这一点对于 shell 的学习非常关键!如上面的 sum=0 如果写作 sum = 0,会提示诸如下面的内容:

sum: =: No such file or directory
sum: 0: No such file or directory

也就是说 shell 在运行这个语句的时候,实际上是把 sum 当作 shell 命令了(当然函数也可以这么调用)。

shift 的作用是将第一个参数从参数列表中移除。

获取函数返回值:

1、通过 return 获取返回值:

#!/bin/bash

sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
return $sum;
} sumMulti 1 2 3 4 5
echo "通过return获取返回值: $?"  

我们可以使用上面提到的 $? 获取上一个函数执行的返回值。

2、通过 echo 获取返回值:(原理: 我们可以使用反引号获取命令执行的输出内容)

#!/bin/bash

sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
echo $sum;
} sum=`sumMulti 1 2 3 4 5`
echo "通过echo获取返回值: $sum"

上面函数调用那一行也可以换做:两种写法差不多

sum=$(sumMulti 1 2 3 4 5)

  

  

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

  1. Shell入门教程:Shell函数详解

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

  2. Shell入门教程:Shell函数的返回值

    shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...

  3. (转)Shell函数

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

  4. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  5. Shell函数的简单应用

    Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...

  6. Shell函数语法

    Shell函数语法 定义函数: function   函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名  参数一   参数二 return在函数里面使用会跳出函数并 ...

  7. shell 函数

    1 shell函数的定义及其调用 shell函数有两种格式: function name { commands } name() { commands } 其中,name为函数名,commands为函 ...

  8. Shell函数:Shell函数返回值、删除函数、在终端调用函数

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

  9. Shell函数返回值、删除函数、在终端调用函数

    Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] ...

  10. Linux Shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...

随机推荐

  1. 从零开始的Python学习Episode 7——文件基本操作

    文件基本操作 一.打开文件 f = open('11','r')#open('file path','mode') 创建一个文件对象 文件有多种打开模式: 1. 'r':新建一个文件对象以只读方式打开 ...

  2. Python最简编码规范

    前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...

  3. android开发问题 Failed to pull selection 菜鸟记录

    在eclipse中开发创建了一个sqlite数据库文件,为了查看数据库文件的内容,决定复制到PC上一看究竟,位置在data……里 当我点击ddms文件浏览里的pull a file from the ...

  4. [redis] linux下哨兵篇(3)

    一.前言1.为何部署sentinel哨兵前文redis主从架构中,当主服务故障时,需要手动将从服务切换为主服务,sentinel服务就是将这个过程自动化.主要功能有:1)不时监控主从服务正常运行2)可 ...

  5. RESTful源码笔记之RESTful Framework的基本组件

    快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式. ...

  6. 关于requestanimationframe

    首先字面理解,请求动画框架, 用法: var nextFrame = (function() { return window.requestAnimationFrame || window.webki ...

  7. Sorting a Three-Valued Sequence(三值排序)

    Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...

  8. 《C》数据类型

  9. 01—为什么使用java

    Java解决的问题 1.指针问题 java里面没有指针,用引用解决指针问题,但是引用是一种限制的指针,不能参与整数运行和指向任意位置的内存,并且不用显示回收对象 引用地址:http://blog.cs ...

  10. ajax跨域问题(三种解决方案)

    为什么会出现跨域 跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其 ...