Bash函数

一、什么是Bash函数

Bash不支持goto语句,可以用funciton实现程序流程跳转。
当前shell中一组组织在一起并被命名的命令。
比脚本的效率高,一旦定义,就成为shell内存的一部分,可以随时被调用,不必从文件中读取。

二、函数定义

两种定义方式:
1、函数名 +() + 定义
2、funciton + 函数名 + () + 定义,()可选
function func () {

statements
return 1;

}
第一个花括号两边的空格是必须的。

三、函数返回值

1、如果使用函数返回值,return只能返回一个整数(0~255),不能返回字符串,且返回值保存在$?变量中,不能直接赋值给其它变量
例如,下面获得函数返回值的写法是错误的

function func () { return 3; }
i=`func`

2、如果return没有指定参数,则是最后一行脚本的退出状态值

3、如果要将函数返回值赋值给一个变量,有两种方式:
a)用$?赋值

func
i=$?

b)在函数中,用echo打印返回值,再赋值

function func () { echo 3; }
i=`func`

四、函数参数

1、向函数传递的参数被当作位置参量来处理,在函数中是本地变量
2、函数参数用$1, $2 ,..., $n来表示,但和通过命令行传递给脚本的参数不同。调用方式如下:

func param1 param2

3、如果函数中要使用脚本的参数,只能将脚本的参数作为函数的参数传递给函数,例如,可以将脚本的第1个参数$1作为函数的第2个参数传给函数,那么函数则通过$2来访问脚本的第1个参数

$ function welcome { echo "Hi, $1 and $2"; }
$ welcome tom joe
Hi,tom and joe
$ set cb panda ; echo $*
cb panda
$ welcome tom joe
Hi,tome and joe
$ echo $1 $2
cb panda

五、函数中的变量和陷阱

1、在一个shell中的变量无局部和全局之分,随用随声明,无作用域的概念。例如,在一个if...fi块中定义的变量,出了这个块的作用域仍然有效。这也说明BASH不适合编写大的复杂的程序
2、和变量一样,函数内部的陷阱是全局的
3、函数中可以定义局部变量,出了函数无效,使用local来定义

func() {

local count
echo $count

}

六、函数调用

1、使用function只是定义函数,要执行函数中的命令必须在脚本中或命令行上调用函数,例如:$ func param1 param2
a) 将函数单独放入一个脚本里,再在命令行上执行脚本(直接执行,或使用.,或source),是不会执行函数里的命令的
b) 将函数单独放入一个脚本,然后执行,相当于在执行该脚本的shell环境中定义了该函数
例如:下面的命令只是在shell环境中定义函数,并不会调用函数
$ ./func_script.sh

$source ./func_script.sh

2、函数可以递归:函数可以自己调用自己,调用次数没有限制

3、函数中使用exit命令退出整个脚本。

七、常用命令

1、查看定义了哪些函数
$declare -f
$declare -F //只列出函数名

2、撤消函数定义
$unset func_name

3、将函数输出给子shell
$export -f func_name

=-=-=-=-=
Powered by Blogilo

时间: 2024-11-25 07:46:19

Bash函数的相关文章

select、bash函数初识及rpm命令详解

8月18号,主要学习内容: 一.循环的特殊用法及select 二.bash函数基础 三.rpm命令 一.循环的特殊用法及select 1)while循环的特殊用法(遍历文件的每一行):  while read line; do 循环体 done < /PATH/FROM/SOMEFILE 依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line 2)((-))格式 可以用于算术运算 双小括号方法也可以使bash Shell实现C语言风格的变量操作 #I=10 #((

bash 函数返回值任意值

bash函数的返回值只能是一个数值,以0表示成功,非0表示失败.如果想在bash函数中返回除了数值之外的值,需要些技巧. 以返回一个字符串为例: 1. 通过全局变量var 1 function fun() 2 { 3 var="Hello world!" 4 } 5 6 fun 7 echo $var 2. 利用子程序的标准输出 1 function fun() 2 { 3 local var="Hello world!" 4 echo "$var&quo

一些方便系统诊断的bash函数

原文地址:一些方便系统诊断的bash函数 1 一些方便系统诊断的bash函数:http://hongjiang.info/common-bash-functions/ 2 3 这段脚本包含100多个bash函数,是我几年前方便自己调试和诊断问题写的.贴出来给有需要的人,因为比较懒怎么使用这些函数就不写说明了.其中以下划线开头的是表示私有函数,以cf_开头的表示公共函数,可当做命令使用. 4 # check current os is linux 5 function cf_is_linux()

setV:一个管理 Python 虚拟环境的 Bash 函数

了解一下 setV,它是一个轻量级的 Python 虚拟环境管理器,是 virtualenvwrapper 的替代产品.-- Sachin Patil(作者) 这一年多来,我的 bash_scripts 项目中悄悄隐藏这 setV ,但现在是时候该公开了.setV 是一个 Bash 函数,我可以用它代替 virtualenvwrapper .它提供了使你能够执行以下操作的基本功能: 默认使用 Python 3 创建一个新的虚拟环境 使用带有 -p(或 --python)的自定义 Python 路

马哥教育第十三天系统启动流程、grub、模块、bash函数

kernel的功能:进程管理.文件系统.硬件驱动.内存管理.安全功能:SELinux.网络子系统,标准库:glibc 进程是运行在cpu上但用户进程受控于内核,用户进程需要完成特权指令时将触发软中断由用户模式转为内核模式,由内核代为执行特权指令并把结果返回给用户进程. Linux为单内核体系结构但是它支持模块化,模块还可以动态装载或卸载,Linux内核:核心 + 外围模块 核心:/boot/vmlinux-VERSION-release 模块:/lib/modules/VERSION-relea

bash函数定义/使用/传参…

函数:function, 功能     过程式编程,代码重用         模块化编程         简洁             语法:         function f_name {             函数体         }         或者         f_name() {             函数体         }         调用:使用函数名         函数名出现的地方,会被自动替换为函数代码:             练习:利用函数改写此前

bash 函数使用,实现模块化编程

bash支持使用函数,函数出现的地方,而自动被替换成函数定义的代码,一个函数定义后可以多次被重复使用,大大减少代码量 函数定义格式: 第一种 FuncName() {     函数体         } 第二种 function FuncName {     函数体 } 函数有两种返回值:     正常返回的数据:           函数中的打印语句,如echo或print           函数中命令的执行结果     执行状态返回值:          取决于函数中执行的最后一条语句,最

linux下Bash函数功能之编写脚本(十一)

1.脚本编程之函数: function: 结构化编程,不能独立运行,需要调用时执行,可以被多次调用 格式1: function 函数名 { 语句 ... } 格式2: 函数名() { 语句 ... } 2.调用函数执行状态返回值: 格式:return 数值,数值在0-255之间 3.使用函数完成判断用户是否存在的脚本 3.1.函数能够接受一个参数,参数为用户名: 如果用户存在,返回正常状态值: 如果用户不存在,返回错误状态值: 3.2.在主程序中调用函数:如果用户存在,显示用户的shell和UI

Bash函数使用

1 #!/bin/bash 2 3 function Fun_Name() 4 { 5 #function here 6 echo "this is a function" 7 } 8 9 Fun_Name