bash 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
}
. 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
- · Windows 98全自动克隆安装盘
- · 松打造个性Win98启动画面
- · 用快捷键全面掌控你的Windo…
- · 利用Win98自带的Winipcfg命…
- · 让“状态栏”永驻“资源管理…
- · 在Win98中关闭光盘自动播放…
- · 巧用WinRAR为Win9x登陆系统…
- · 优化Windows启动提升性能
- · Win XP教程-XP高级技巧-添加无线Internet摄像机
- · Win XP教程-XP高级技巧-自动重启问题
- · Win XP教程-XP高级技巧-几个著名的Windows伪优化技巧
- · Win XP教程-XP高级技巧-揪出系统中胡作非为的DLL黑手
- · Win XP教程-XP高级技巧-常见系统文件的丢失与损坏
- · Win XP教程-XP高级技巧-传输流的下一件好事
- · Win XP教程-XP高级技巧-厨房中的Windows XP
- · Win XP教程-XP高级技巧-数字照片难题
- · Win XP教程-XP高级技巧-构建一台家用服务器
- · Win XP教程-XP高级技巧-将一台桌面计算机变成服务器
- · 在WindowsXP以幻灯片方式浏…
- · WindowsXP到底有多安全
- · 让Windows2000/XP快速复制移…
- · 让WindowsXP开始菜单变模样…
- · 让“状态栏”永驻“资源管理…
- · Windows桌面清爽五招跟我来…
- · 跳舞毯WindowsXP下安装全攻…
- · 在WindowsXP怎样让电脑开关…
- · WindowsXP中怎样禁止使用“…
- · 英文版WindowsXP的中文支持…
- · 在WinXP下640x480256色的设…
- · 修改Win2k注册表抵抗拒绝服务
- · 在Win2000中预防Ping攻击
- · Windows 2000 微软最成功的失败
- · Windows 2000中隐患重重的十大“服务”
- · NTFS格式大硬盘数据恢复特殊案例
- · 电脑高手常用技巧应用全接解
- · 有效防范自己的IP泄漏的办法
- · Win2000系统二十条超级应用技巧
- · 在SCSI硬盘上装Windows 2000
