shell基础知识学习四
2012-09-28 18:48
513 查看
shell中函数类似于java中的方法,脚本代码放在函数中,可以任意位置运行减少大量重复代码。
了解掌握shell函数主要从以下几点:函数的创建、函数调用、变量、返回值、参数。
1、函数创建以及调用。
基本结构:有两种方式带function和不带function,
function hello () { } 以及 hello () { }
举个例子:
#!/bin/sh function hello() { echo "this is a day : `date`" } echo '=======' hello echo '=======' #执行结果 ======= this is a day : Fri Sep 28 11:56:00 CST 2012 =======
需要注意的是:1、函数的创建一定在调用之前。2、函数名称不要重复,否则先定义的会被覆盖。
2、返回值
首先说下默认退出状态,在脚本中用$?表示。表示:最后一次执行命令的退出状态,0代表成功,非0代表失败。
2.1、$?
#!/bin/sh function hello() { echo "this is a day : `date`" cd /qwer } echo "state:$?" echo '=======' hello echo "state: $?" echo '=======' #执行结果: state:0 ======= this is a day : Fri Sep 28 12:12:31 CST 2012 ./fun.sh: line 5: cd: /qwer: No such file or directory state: 1 =======
如上所示:两个$?分别0和1,对比来看下一个程序:
#!/bin/sh function hello() { echo "this is a day : `date`" cd /qwer } echo "state:$?" echo '=======' hello echo "test..test..." echo "state: $?" echo '=======' #执行结果: state:0 ======= this is a day : Fri Sep 28 12:19:28 CST 2012 ./fun.sh: line 5: cd: /qwer: No such file or directory test..test... state: 0 =======
现在可以深刻理解$?的含义了,shell命令最后一次的执行状态,当执行完函数后又执行了其他的命令,那么$?就表示其他命令的执行状态了。
关于$?还有一个好玩的:
#!/bin/sh function hello() { cd /qwer echo "this is a day : `date`" } echo "state:$?" echo '=======' hello echo "state: $?" echo '=======' #执行结果: state:0 ======= ./fun.sh: line 4: cd: /qwer: No such file or directory this is a day : Fri Sep 28 12:26:43 CST 2012 state: 0 =======
好吧,默认退出状态不太好用吧。
2.2、使用返回值return
return只能返回单个的整数,对于字符串脚本会报错。
看下面的程序。用户输入值和100比较,返回不同的值。
read -p "please input :" value test() { if [ $value -lt 100 ] then echo "< 100 " return -1 elif [ $value -eq 100 ] then echo "= 100" return 0 else echo "> 100" return 1 fi } test echo "result value is :$?" #执行结果: please input :999 > 100 result value is :1
即是return的返回值由$?接受。
====================================
有一点很疑惑,如果在上述脚本if语句的结束后,加上return 1000
最后程序的输出,
please input :999
> 100
result value is :1
为什么是1?有的时候是255,???
====================================
另外在一种方法就是使用函数的输出。输出可以被捕获放入shell变量中。
ceo () { read -p "please input a value:" value echo $[ $value * 2 ] } result=`ceo` echo "the result is : $result" #执行结果: please input a value:999 the result is : 1998
注意接受的时候是result = `ceo`
====================================
还是上述脚本,把输出替换成:
echo $[ $vale ]
echo $[ $value * 2 ]
输出变成了:the result is : 0
不明白?
====================================
3、参数的传递
shell脚本函数参数的传递可以用标准参数环境变量表示。
如下脚本:根据传入参数个数不同,做不同输出
#!/bin/sh function param() { if [ $# -lt 2 ] then echo "param count < 2" elif [ $# -gt 2 ] then echo "param count > 2 " else echo "param count =2" fi } param 1 2 3 #执行结果: param count > 2
需要注意的是,函数不能直接使用脚本的参数,函数为自己的参数使用专用的参数环境变量。
就是说在运行脚本时候,用命令行传入的参数函数是无法直接使用的,必须手动传入才可以。
看下面的例子:
function useMainPram() { echo "----" echo $1 echo $2 echo "----" } echo $1 echo $2 useMainPram #文件命名为param.sh ./param.sh 98 99 执行结果: 98 99 ---- ----
函数中的打印没有值,调整脚本中函数调用为:useMainPram $1 $2
同样的执行命令,结果正确展示。
4、变量
变量主要是作用域的问题,在脚本内(不是函数内部)定义的变量在任何地方都是可以用的,属于全局变量。
函数内部可以定义局部变量用local修饰,作用域仅仅在函数内部。
b=100 function tt() { local b=10 result=$[$b + 5 ] } tt echo $result echo $b #执行结果: 15 100
5、库文件
函数可以在脚本内部使用,如果多个脚本要使用同一个函数就要使用到库文件。
首先创建库文件,文件名称ku,注意是没有后缀名称的:
function useMainPram() { echo "----" echo $1 echo $2 echo "----" }
然后在脚本文件中调用,脚本命名param.sh:
. ./ku echo $1 echo $2 useMainPram $1 $2 #执行结果 ./param.sh: 98 99 ---- 98 99 ----
需要注意的是:引入库文件的格式
点后面有个空格,然后是执行库文件。
到这里就差不多了,函数的基本操作就这些了。
相关文章推荐
- 第十二章 学习 shell脚本之前的基础知识
- Linux——学习shell脚本之前的基础知识
- 学习shell脚本之前的基础知识[图文]
- 第十二章 学习 shell脚本之前的基础知识
- 学习shell脚本之前的基础知识
- shell 学习基础知识
- 学习shell脚本之前的基础知识
- 学习 shell脚本之前的基础知识
- Shell学习一(基础知识)
- SHELL学习--shell脚本基础知识
- shell基础知识学习二
- shell基础知识学习
- shell学习之编程基础知识
- 学习shell脚本之前的基础知识(一)(学习记录帖)
- shell基础知识学习三
- 学习 shell脚本之前的基础知识
- 学习shell脚本之前的基础知识[图文]
- shell基础知识学习
- Linux命令-学习shell脚本之前的基础知识
- 学习shell脚本之前的基础知识