shell 函数定义及应用

1、函数介绍

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

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

使用时, 在shell 中  source  /path fo function_file,函数将保留至用户退出,也可以使用 unset function_name ,撤销函数

函数和shell程序比较相似,区别在于:

Shell程序在子Shell中运行

而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改

2、函数返回值

函数有两种返回值:

函数的执行结果返回值:

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

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

函数的退出状态码:

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

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

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

return 0 无错误返回。

return 1-255 有错误返回

3、在脚本中定义、使用函数

函数定义:

函数在使用前必须定义,因此应将函数定义放在脚本开始部分,

直至shell首次发现它后才能使用

调用函数仅使用其函数名即可。

示例:

$cat func1

#!/bin/bash

# func1

hello()

{

echo "Hello there today‘s date is `date +%F`"

}

echo "now going to the function hello"

hello

echo "back from the function

使用函数:

可以将经常使用的函数存入函数文件,然后将函数文件载入shell。

文件名可任意选取,但最好与相关任务有某种联系。例如: functions.main

一旦函数文件载入shell,就可以在命令行或脚本中调用函数。

可以使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数。

若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载入此文件

创建函数文件:

函数文件示例:

$cat functions.main

#!/bin/bash

#functions.main

findit()

{

if [ $# -lt 1 ] ; then

echo "Usage:findit file"

return 1

fi

find / -name $1 –print

}

载入函数:

函数文件已创建好后,要将它载入shell

定位函数文件并载入shell的格式:

. filename 或 source filename

注意:此即<点> <空格> <文件名>

这里的文件名要带正确路径

示例:上例中的函数,可使用如下命令:

$ . functions.main

执行函数:

要执行函数,简单地键入函数名即可:

示例:

$findit groups

/usr/bin/groups

/usr/local/backups/groups.bak

删除函数:

现在对函数做一些改动。首先删除函数,使其对shell不可用。使用unset命令完成此功能.

命令格式为:

unset function_name

实例:

$unset findit

再键入set命令,函数将不再显示

函数参数:

函数可以接受参数:

传递参数给函数:调用函数时,在函数名后面以空白分隔

给定参数列表即可;例如“ testfunc arg1 arg2 …”

在函数体中当中,可使用$1, $2, …调用这些参数;还

可以使用[email protected], $*, $#等特殊变量

4、函数变量

变量作用域:

环境变量:当前shell和子shell有效

本地变量:只在当前shell进程有效,为执行脚本会启动专用子shell进程;因此,本地变量的作用范围是当前shell脚本

程序文件,包括脚本中的函数。

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

注意:如果函数中有局部变量,如果其名称同本地变量, 使用局部变量。

在函数中定义局部变量的方法

local NAME=VALUE

为了避免函数中变量与shell中已经定义的变量或者命令名字冲突,尽可能使用局部变量

5、函数递归

函数递归:

函数直接或间接调用自身

(注意递归层数)

递归实例:

阶乘是基斯顿·卡曼于 1808 年发明的运算符号,是数学术语一个正整数的阶乘( factorial)是

所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。

n!=1×2×3×…×n。

阶乘亦可以递归方式定义: 0!=1, n!=(n-1)!×n。

n!=n(n-1)(n-2)…1

n(n-1)! = n(n-1)(n-2)

示例: fact.sh

#!/bin/bash

#

fact() {

if [ $1 -eq 0 -o $1 -eq 1 ]; then

echo 1

else

echo $[$1*$(fact $[$1-1])]

fi

}

fact 5

时间: 2025-01-06 00:32:15

shell 函数定义及应用的相关文章

shell 函数定义和调用

一. 函数定义 语法: [function] functionname[()]{     action;     [return int;] } 说明: 1.可以带function fun()  定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255 #!/bin/sh build(){     echo $1, $2;     return $(($1+$2)) } b

Shell函数与数组

1.什么是函数 被命名的语句块儿:有开始和结束的边界; begin ...... end 2.Shell语句中的语句块儿 (1).(语句1:语句2:...) (2).{语句1:语句2:...} (3).if else elif while for (4).被命名的语句块儿,函数: 3.Shell函数的定义 函数的要素:(1).函数名称 (2).语句块儿 (3).返回值 (4).参数 Shell函数定义2种基本格式: (1) function 函数名称(){ $1 //若干语句 } 返回值类型:是

Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组

case多分支语句 case语句的结构: 针对变量的不同取值,分别执行不同的命令列 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; ..... *) 默认命令序列 esac 示例: 字符类型识别: 提示用户输入一个字符: 判断出该字符是字母.数字或者其他字符. 脚本如下: [[email protected] opt]# vim test01.sh #!/bin/bash read -p "请输入一个字符:" key case $key in [a-z]

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

http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以

shell - 函数、数组定义与调用

#!/bin/bash # returning an array value function arraydblr() { local origarray local newarray local elements local i origarray=(`echo "[email protected]"`) newarrray=(`echo "[email protected]"`) elements=$[ $# -1 ] for((i=0;i<=$eleme

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

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu

linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu

Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

定义Shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255). 示例(test_fun.sh): #!/bin/sh fSum 3 2; fSum() { ec

shell中函数定义及使用

#!/bin/sh #函数要定义在使用之前 function lession(){    echo "this is a function" } lession function lession2(){    echo "this is lession2"    echo "The first is $1"    echo "The first is $2" } lession2 1 2 function lession3()