Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > 其他编程语言 > bash Shell中函數的應用小結
【标  题】:bash Shell中函數的應用小結
【关键字】:bash,Shell
【来  源】:http://blog.chinaunix.net/article.php?articleId=46818&blogId=2939

bash Shell中函數的應用小結

Your Ad Here 在shell編程中,很多時候都需要自定義函數.查了一些資料,對它進行了一些總結.有些列子也是摘抄過來,不為別的,只為更好理解.

下面是一个標準的helloworld函数的脚本(ex1.sh)示例:

 

代码:

 

sample()

{

echo "hello world!"

}

 

函数同样可以接受参数,存放第一个参数,存放第二个参数,$*存放输入参数的列表,

 

Bash shell 提供位置參數來擔任參數的傳遞工作。

 

例:sample2.sh p1 p2 p3 p4 p5 p6 p7 p8 p9

 

其中 p1 p2 p3 p4 p5 p6 p7 p8 p9 為欲傳入 sample2.sh 這支 shell 9 個參數,此時,用 來代表 script 本身的檔案名稱, 代表第一個參數,也就是 p1 代表第一個參數,也就是 p2,其它依此類推。

 

$# 代表參數的總數,也就是 9

代表這個程序的名稱,在這里就是 ”sample2.sh”

$* 代表所有的參數,也就是 " p1 p2 p3 p4 p5 p6 p7 p8 p9"

$@ 代表所有的參數,也就是 "p1" "p2" "p3" "p4" "p5" "p6" "p7" "p8" "p9"

$* $@ 的區別為:"$*" 代表 " p1 p2 p3 p4 p5 p6 p7 p8 p9",是將所有的參數作為一個整體字串來處理,而"$@" 代表 "p1" "p2" "p3" "p4" "p5" "p6" "p7" "p8" "p9",所有的參數還是分開的.

shift 用來移動參數的位置,每執行一次,則所有的參數往左移一位,

使用set可用來重新設定位置參數,比如:set a b c d,表示重新設定 a, b, c, d

 

例程:

# cat sample2.sh

exa2()

{

a=

b=

result=a+b

echo $result

}

echo "Enter two numbers"

read num1 num2

echo -n "result is: "

exa2 $num1 $num2

 

$ sample2.sh

Enter two numbers

3 4

result is:7

 

函数返回值:

使用return语句,在程序中,在调用函数之后保存返回状态$?的值.

這樣的作法只能有一個返回值.如果想有多個返回值怎麼辦呢,我想只有使用全局變量的方法了.

 

代码:

# cat sample3.sh

 

exa3()

{

a=

b=

result=a+b

return $result

}

echo "Enter two numbers"

read num1 num2

exa3 $num1 $num2

answer=$?

echo "$num1 to $num2 is $answer"

 

 

shell函數也可以递归調用,目前還不太清楚递归調用的層級限制,可能和c一樣吧.:

 

代码:

 

power()

{

x=

y=

if [ $y -eq 1 ]

then

return $x

else

y=`expr $y - 1`

power $x $y

result=`expr $? \* $x`

return $result

fi

}

echo "Enter two numbers"

read num1 num2

power $num1 $num2

answer=$?

echo "$num1 to $num2 is $answer"

 

默认情况下,所有函数的变量都是全局变量.你可以用typeset去声明一个局部变量:

 

代码:

 

easy()

{

typeset a

a=`expr + `

b=`expr + `

echo "easy a is " $a

echo "easy b is " $b

}

a=10

b=20

easy $a $b

echo "global a is " $a

echo "global b is " $b

 

Output:

easy a is 30

easy b is 30

global a is 10

global b is 30

 

如果要在脚本中多次使用函数,可以把它放在一个函数目录中,像一个普通文件一样,使用的时候把它放在脚本开始的地方:

. functionfile

#cat  sm1.sh

sam1()

{

a=

b=

if [ $b -eq 1 ]

then

return $a

else

b=`expr $b - 1`

sam1 $a $b

result=`expr $? \* $a`

return $result

fi

}

 #cat  sm2.sh

. sm1.sh

echo –n "Enter two numbers:"

read a b

sam1 $a $b

result=$?

echo "Answer is:" $result

 

運行sm2.sh

$ sh sm2.sh

Enter two numbers:2 5

Answer is: 32

shell 学习计划:【上一篇】
The C Shell tutorial:【下一篇】
【相关文章】
  • shell 学习计划
  • SHELL中编写FTP
  • SHELL举例综合
  • bash之初
  • Shell基本工作原理
  • bash Bash 实例
  • shell基础二:查找技巧,find及xargs的使用
  • BASH 中的字符串处理
  • 分析tuxedo的service时间日志的bash脚本
  • shell语法总结
  • 【随机文章】
  • GNUPLOT学习
  • JBOSS 4.0.X 简易使用手册
  • 技术基础 什么是NAS网络附属存储?
  • 不能往新浪邮箱发邮件解决过程
  • 用iNowShare与朋友共同分享好“东东”
  • 不想干了,fuck那群白痴领导
  • 编程交流与学习--Effective C++的思考
  • 创建企业级Internet邮件服务器
  • FreeHand MX全新体验三
  • IDEA数据加密算法介绍
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.