shell函数
2015-12-21 11:14
507 查看
可以将函数看作是脚本中的一段代码,但是有一个主要区别。
执行函数时,它保留当前shelll和内存信息。
如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的shell,因而去除所有原脚本中定义的存在变量。
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。
所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
例子:
1.1. 传递参数和返回值
向函数参数的用法和shell脚本参数的用法一样。
函数内可以使用return返回值,如果不适用return返回或return后不带返回值,则返回值为最后一条shell命令的返回值。
1.2. 在shell中使用函数
当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入s h e l l。
文件头应包含语句#!/bin/sh,文件名可任意选取,但最好与相关任务有某种实际联系。
一旦文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义
的函数。输出列表包括已经载入shell的所有函数。
如果要改动函数,首先用unset命令从shell中删除函数,尽管unset删除了函数以便于此函数对于shell或脚本不可利用,但并不是真正的删除。
改动完毕后,再重新载入此文件。有些shell会识别改动,不必使用unset命令,但为了安全起见,改动函数时最好使用unset命令。
创建函数文件:
定位文件:
检查载入函数:
执行shell函数:
要执行函数,简单地键入函数名即可。
删除shell函数:
编辑shell函数:
重新载入并调用:
1.3. 函数调用
调用同一个脚本中定义函数前面已经介绍,只需要在调用前定义即可。
从函数文件中调用函数,这种方法不会创建另一个shell,所有函数均在当前shell下执行。
调用脚本在调用前需要载入函数文件。
函数文件:
调用脚本:
执行结果:
定位文件不只针对于函数,也可以是包含组成配置文件的全局变量的脚步等。
from: http://m.blog.chinaunix.net/uid-1924596-id-3048863.html
执行函数时,它保留当前shelll和内存信息。
如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的shell,因而去除所有原脚本中定义的存在变量。
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。
函数名() { 命令... } 或者 函数名(){ 命令1... } 如果愿意,可在函数名前加上关键字function: function 函数名() { 命令... } |
例子:
#!/bin/sh #filename:my.sh hello() { echo "this is function hello!" } echo "call function hello() ..." hello echo "call completed." |
向函数参数的用法和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. |
当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入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 ()" |
要执行函数,简单地键入函数名即可。
$ show "abc" show: abc $ add 123 111 show: 123 + 111 = 234 |
$ unset show $ show "abc" 程序“show”尚未安装。 您可以使用以下命令安装: sudo apt-get install nmh |
#!/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 |
调用同一个脚本中定义函数前面已经介绍,只需要在调用前定义即可。
从函数文件中调用函数,这种方法不会创建另一个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 脚本学习之一 ------let,echo,变量
- LinuxShell算术运算
- linux下shell脚本启动java程序jar包
- [Erlang_Question30]Erlang shell是如何工作的?
- linux下使用shell查看apache IP访问量
- mac终端下运行shell脚本
- 《Linux命令、编辑器与Shell编程》读书笔记7-Linux系统管理
- 【192】PowerShell 相关知识
- Bash远程文件传输命令scp
- 【Linux学习笔记】Shell 基础(1) — Shell简介
- Bourne Shell:控制语句、条件判断、文本处理、常用命令
- 《生活在Linux中》之:prefer function to alias in Bash
- shell脚本攻略第一章总结
- bash(一)
- Powershell-基础:数组
- Powershell-Lync:统计当前环境下Lync用户总数
- Powershell-AD:查询并导出OU信息
- Powershell-Lync:以OU为单位启用Lync账户
- Shell插入排序(c语言版)
- Process in Shell