首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux Shell函数步骤简介

2013-10-19 
Linux Shell函数方法简介? echo -n print 2a: ? return $[ $a * 2 ]}fun1echo return value $?[~/shel

Linux Shell函数方法简介

? echo -n "print 2a: "

? return $[ $a * 2 ]

}

fun1

echo "return value $?"

[~/shell/function]# ./return.sh?

enter a: 100

print 2a: return value 200

由于shell状态码最大是255,所以当返回值大于255时会出错

[~/shell/function]# ./return.sh?

enter a: 200

print 2a: return value 144

3.函数输出

为了返回大于255的数、浮点数和字符串值,最好用函数输出到变量:

[~/shell/function]# cat ./fun_out.sh?

#!/bin/bash

function fun2 {

? read -p "enter a: " a

? echo -n "print 2a: "

? echo $[ $a * 2 ]

}

result=`fun2`

echo "return value $result"

[~/shell/function]# ./fun_out.sh ? ??

enter a: 400

return value print 2a: 800

4.向函数传递参数(使用位置参数):

[~/shell/function]# cat ./parameter.sh?

#!/bin/bash

if [ $# -ne 3 ]

then

? ? echo "usage: $0 a b c"

? ? exit

fi

fun3() {

? ? echo $[ $1 * $2 * $3 ]

}

result=`fun3 $1 $2 $3`

echo the result is $result

[~/shell/function]# ./parameter.sh ?1 2 3

the result is 6

[~/shell/function]# ./parameter.sh ?1 2

usage: ./parameter.sh a b c

5.全局变量与局部变量

默认条件下,在函数和shell主体中建立的变量都是全局变量,可以相互引用,当shell主体部分与函数部分拥有名字相同的变量时,可能会相互影响,例如:

[~/shell/function]# cat ./variable.sh ? ?

#!/bin/bash

if [ $# -ne 3 ]

then

? ? echo "usage: $0 a b c"

? ? exit

fi

temp=5

value=6

echo temp is: $temp

echo value is: $value

fun3() {

? ? temp=`echo "scale=3;$1*$2*$3" | bc -ql` ??

? ? result=$temp

}

fun3 $1 $2 $3

echo "the result is $result"

if [ `echo "$temp > $value" | bc -ql` -ne 0 ]

then?

? ? echo "temp is larger"

else

? ? echo "temp is still smaller"

fi

[~/shell/function]# ./variable.sh ?12 3 2

temp is: 5

value is: 6

the result is 72

temp is larger

在这种情况下,在函数内部最好使用局部变量,消除影响

[~/shell/function]# cat ./variable.sh?

#!/bin/bash

if [ $# -ne 3 ]

then

? ? echo "usage: $0 a b c"

? ? exit

fi

temp=5

value=6

echo temp is: $temp

echo value is: $value

fun3() {

? ? local temp=`echo "scale=3;$1*$2*$3" | bc -ql` ??

? ? result=$temp

}

fun3 $1 $2 $3

echo "the result is $result"

if [ `echo "$temp > $value" | bc -ql` -ne 0 ]

then?

? ? echo "temp is larger"

else

? ? echo "temp is still smaller"

fi

[~/shell/function]# ./variable.sh ?12 3 2

temp is: 5

value is: 6

the result is 72

temp is still smaller

6.向函数传递数组变量:

[~/shell/function]# cat array.sh?

#!/bin/bash

a=(11 12 13 14 15)

echo ${a[*]}

function array(){

? echo parameters : "$@"?

? local factorial=1

? for value in "$@"

? do

? ? factorial=$[ $factorial * $value ]

? done

? echo $factorial

}

array ${a[*]}

[~/shell/function]# ./array.sh?

11 12 13 14 15

parameters : 11 12 13 14 15

360360

7.函数返回数组变量

[~/shell/function]# cat array1.sh?

#!/bin/bash

a=(11 12 13 14 15)

function array(){

? echo parameters : "$@"?

? local newarray=(`echo "$@"`)

? local element="$#"

? local i

? for (( i = 0; i < $element; i++ ))

? {

? ? newarray[$i]=$[ ${newarray[$i]} * 2 ] ? ?

? }

? echo ?new value:${newarray[*]}

}

result=`array ${a[*]}`

echo ${result[*]}

[~/shell/function]# ./array1.sh?

parameters : 11 12 13 14 15 new value:22 24 26 28 30

热点排行