shell函数
来源:互联网 发布:中超数据库 搜狐 编辑:程序博客网 时间:2024/06/03 16:23
可以将函数看作是脚本中的一段代码,但是有一个主要区别。
执行函数时,它保留当前shelll和内存信息。
如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的shell,因而去除所有原脚本中定义的存在变量。
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。
函数名()
{
命令...
}
或者
函数名(){
命令1...
}
如果愿意,可在函数名前加上关键字function:
function 函数名()
{
命令...
}
所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
例子:
#!/bin/sh
#filename:my.sh
hello()
{
echo "this is function hello!"
}
echo "call function hello() ..."
hello
echo "call completed."
1.1. 传递参数和返回值
向函数参数的用法和shell脚本参数的用法一样。
函数内可以使用return返回值,如果不适用return返回或return后不带返回值,则返回值为最后一条shell命令的返回值。
#!/bin/sh
#filename:my.sh
hello()
{
echo "param_count:$#"
AAA="$1"
BBB="$2"
echo "AAA=$AAA"
echo "BBB=$BBB"
return 1
}
echo "call function hello() ..."
hello "aaa" "bbb"
if [ $? -eq 0 ] ; then
echo "hello return 0"
else
echo "hello return !0"
fi
if hello "111" "222" ; then
echo "hello return 0"
else
echo "hello return !0"
fi
echo "call completed."
输出:
$ ./my.sh
call function hello() ...
param_count:2
AAA=aaa
BBB=bbb
hello return !0
param_count:2
AAA=111
BBB=222
hello return !0
call completed.
1.2. 在shell中使用函数
当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入s h e l l。
文件头应包含语句#!/bin/sh,文件名可任意选取,但最好与相关任务有某种实际联系。
一旦文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义
的函数。输出列表包括已经载入shell的所有函数。
如果要改动函数,首先用unset命令从shell中删除函数,尽管unset删除了函数以便于此函数对于shell或脚本不可利用,但并不是真正的删除。
改动完毕后,再重新载入此文件。有些shell会识别改动,不必使用unset命令,但为了安全起见,改动函数时最好使用unset命令。
创建函数文件:
#!/bin/sh
#filename:myfun.sh
show()
{
echo "show: $1"
}
add()
{
echo "show: $1 + $2 = `expr $1 + $2`"
}
定位文件:
格式:
<点> <空格> <斜线> <文件名>
$ . ./myfun.sh
检查载入函数:
$ set | grep "show ()"
$ set | grep "add ()"
执行shell函数:
要执行函数,简单地键入函数名即可。
$ show "abc"
show: abc
$ add 123 111
show: 123 + 111 = 234
删除shell函数:
$ unset show
$ show "abc"
程序“show”尚未安装。 您可以使用以下命令安装:
sudo apt-get install nmh
编辑shell函数:
#!/bin/sh
#filename:myfun.sh
show()
{
echo "modify show..."
echo "show: $1"
}
add()
{
echo "show: $1 + $2 = `expr $1 + $2`"
}
重新载入并调用:
$ . ./myfun.sh
$ show "abc"
modify show...
show: abc
1.3. 函数调用
调用同一个脚本中定义函数前面已经介绍,只需要在调用前定义即可。
从函数文件中调用函数,这种方法不会创建另一个shell,所有函数均在当前shell下执行。
调用脚本在调用前需要载入函数文件。
函数文件:
#!/bin/sh
#filename:functions.sh
my_add()
{
echo "my_add show: $1 + $2 = `expr $1 + $2`"
}
调用脚本:
#!/bin/sh
#filename:main.sh
# 定位函数文件
. ./functions.sh
#调用函数
echo "call my_add..."
my_add 10 20
echo "call completed."
执行结果:
$ ./main.sh
call my_add...
my_add show: 10 + 20 = 30
call completed.
定位文件不只针对于函数,也可以是包含组成配置文件的全局变量的脚步等。
from: http://m.blog.chinaunix.net/uid-1924596-id-3048863.html
- [shell]shell函数
- shell函数
- Shell 函数
- Shell 函数
- shell函数
- shell --函数
- shell 函数
- shell函数
- shell函数
- 【shell】函数
- shell 函数
- shell---函数
- Shell 函数
- shell函数
- shell 函数
- Shell 函数
- shell函数
- Shell 函数
- Unity3D研究院之Machine动画脚本自动生成AnimatorController
- listview使用addfootview不显示
- Linux——获取帮助
- 优化UITableViewCell高度计算的那些事
- 从工程中删除Cocoapods
- shell函数
- Jni 学习之Java调用C++
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)
- 安全级别
- 卡片游戏
- HTML5基础标签与SEO
- 分级marker改进 改变分级图标
- 静态检测工具-cppcheck
- linux shell自定义函数(定义、返回值、变量作用域)介绍