Shell函数的7种用法介绍
这篇文章主要介绍了Shell函数的7种用法介绍,本文讲解了在shell文件内部定义函数并引用、返回值、函数输出、向函数传递参数、全局变量与局部变量等内容,需要的朋友可以参考下。
1. 在shell文件内部定义函数并引用:
程序名:./factorial.sh,用于求阶乘
10的阶乘是:3628800
由于shell状态码最大是255,所以当返回值大于255时会出错。
4.向函数传递参数(使用位置参数):
在这种情况下,在函数内部最好使用局部变量,消除影响。
6.向函数传递数组变量:
7.函数返回数组变量
1. 在shell文件内部定义函数并引用:
点击(此处)折叠或打开
-
[~/shell/function]# cat factorial.sh
-
#!/bin/bash
-
function factorial
-
{
-
factorial=1
-
for (( i=1;i <= $1;i++ ))
-
do
-
factorial=$[ $factorial * $i ]
-
done
-
echo $1的阶乘是:$factorial
-
}
-
echo '程序名':$0,用于求阶乘
-
factorial $1
- [~/shell/function]# ./factorial.sh 10
10的阶乘是:3628800
2.返回值
函数返回码是指函数最后一条命令的状态码,可以用于函数返回值
使用return命令手动指定返回值:
点击(此处)折叠或打开
-
[~/shell/function]# cat return.sh
-
#!/bin/bash
-
function fun1 {
-
read -p "enter a: " a
-
echo -n "print 2a: "
-
return $[ $a * 2 ]
-
}
-
fun1
-
echo "return value $?"
-
[~/shell/function]# ./return.sh
-
enter a: 100
- print 2a: return value 200
点击(此处)折叠或打开
-
[~/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
点击(此处)折叠或打开
-
[~/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` #多了个local关键字
-
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
点击(此处)折叠或打开
-
[~/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
点击(此处)折叠或打开
-
[~/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