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, …调用这些参数;还
可以使用$@, $*, $#等特殊变量
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
转载于:https://blog.51cto.com/195175108/1854979
shell 函数定义及应用相关推荐
- matlab调用sh函数,Shell 函数定义与调用
linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...
- shell函数定义、函数调用及函数返回值用法
1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 ...
- shell 函数定义和调用
为什么80%的码农都做不了架构师?>>> 一. 函数定义 语法: [function] functionname[()]{action;[return int;] } 说明: ...
- Shell函数详解(函数定义、函数调用)
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可. Shell 中的函数和C++.Java.Python.C# 等其它编程语言中的函数类 ...
- shell函数(用法及定义)
shell函数 将命令序列按格式写在一起 可方便重复使用命令序列 文章目录 shell函数 一.shell函数定义: 方法一 方法二 二.函数返回值: 以乘法2乘以某数为例 三.函数传参: 加法 四. ...
- Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)
分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...
- 【拔刀吧少年】之shell函数
函数 一.shell函数定义 二.格式 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归查目录 七.创建函数库 总结 一.shell函数定义 将命令序列按格式写在一起 ...
- Shell函数知识点大全
文章目录 一.Shell 函数 二.Shell 函数定义 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归目录 七.函数库 一.Shell 函数 1.将命令序列按格式 ...
- linux shell 函数库,bash shell 函数库
bash shell 函数库ash由自由软件基金会,Inc.版权所有(C) 1989-2011. 语法 bash [options] [file] 描述 Bash是一种与sh兼容的命令语言解释器,它执 ...
- shell 函数 与 函数库
目录 前言 一.shell 函数 1.1 Shell函数定义 1.2 函数返回值 1.3 函数参数传值 1.4 函数变量生命周期 1.5 函数中可以调用函数 二.函数之递归 2.1 阶乘 2.2 遍历 ...
最新文章
- 重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)...
- 【深度学习】新人如何入门Pytorch的路线?有哪些资源推荐?
- flask框架(四):通过局域网访问网站
- 大华摄像头解码 ffmpeg_解码矩阵配套液晶拼接屏系统解决安防行业设备过于复杂的问题...
- STC学习:便携式温度采集器
- 快应用广告开发、各大手机平台测试id、错误码汇总
- python列表常见的5种去重方法
- 【果壳笔记】生物信息学——陈小伟老师部分
- 推销自己的最佳媒介之一就是博客
- 微信小程序自定义组件(1)----地址选择器
- [强烈推荐]ring0下文件解锁强制删除工具
- 请说一下你是如何理解互联网思维的?
- codelite解决中文乱码问题
- 中外大都市人口密度的数据比较
- EduSoho网校系统产品更新:PPT动画转码
- 协作通信-af df的matlab仿真,协作通信-AF与DF的MATLAB仿真.pdf
- 分享实录 | 阿里巴巴代码缺陷检测探索与实践
- 数据结构与算法——算法基础
- Word中利用字体把文字转换为特殊图案(转)
- [极客大挑战 2019]PHP1