专题总结--shell中的函数
一 定义函数
方法1
函数名()
{
函数要实现的功能代码
}
方法2
function 函数名() { 函数要实现的功能代码 }
#!/bin/bash factorial(){ fac=1 for (( i = 1; i <= 10; i++ )); do fac=$[ $fac*$i ] done echo "10的阶乘为:$fac" } factorial --------------------------------------------------------------------- #!/bin/bash factorial(){ fac=1 for (( i = 1; i <= $num; i++ )); do fac=$[ $fac*$i ] done echo "$num的阶乘为:$fac" } num=5 #调用函数之前,定义了一个num变量 factorial ----------------------------------------------------------------- #!/bin/bash factorial(){ fac=1 for (( i = 1; i <=$1; i++ )); do fac=$[ $fac*$i ] done echo "$1的阶乘为:$fac" } factorial 6 #这个6会直接传递给函数factorial()的$1 ------------------------------------------------------------------ #!/bin/bash factorial(){ fac=1 for (( i = 1; i <=$1; i++ )); do fac=$[ $fac*$i ] done echo "$1的阶乘为:$fac" } factorial $1 #这个$1会直接传递给函数factorial()的$1,直接执行./factorial.sh 10 ------------------------------------------------------------------ #!/bin/bash factorial(){ fac=1 for (( i = 1; i <=$1; i++ )); do fac=$[ $fac*$i ] done echo "$1的阶乘为:$fac" } factorial $1 #直接执行./factorial.sh 5 8 10 factorial $2 factorial $3 ------------------------------------------------------------------ #使用let和shell的for循环实现阶乘 #!/bin/bash factorial(){ fac=1 for i in `seq 10` do let fac=$i*$fac done echo "10的阶乘为:$fac" } factorial
二 函数的返回值
函数的返回值:函数最后一条命令的执行结果,要么0,要么非0.但是可利用return自定义返回结果,但是不能超过255,只能返回0~255的数;
程序的返回值:程序最后一条命令的执行结果;
#!/bin/bash fun(){ read -p "please input a num:" num let 2*$num } fun echo "fun return value:$?" --------------------------------------------------------------------- (1)函数的返回值 fun2() { read -p "enter num:" num return $[2*$num] } fun2 echo "fun2 return value: $?" ##shell的返回码最高是255,如果超过255就会报错 ## ./return.sh ##enter num: 100 ##200 ------------------------------------------------------------------ (2)程序的返回值 fun2() { read -p "enter num:" num echo $[2*$num] ## 自定义函数的返回值,叫做函数的输出,可以是字符串 } result=`fun2` ##将函数的调用结果赋值给变量result echo "fun2 return value: $resault" ## ./return.sh ##enter num: 200 ##400
三 函数位置参数与脚本程序的位置参数
函数的位置参数:在函数后面加的位置参数
脚本程序的位置参数:在执行脚本程序时,后面加的位置参数
#!/bin/bash fun(){ if [ $# -ne 3 ];then echo "usage: 'basename $0' par1 par2 par3" exit fi echo "$(($1*$2*$3))" } res=`fun 2 3 5` echo "res is: $res" -------------------------------------------------------------------- fun3() { echo "$(($1 * $2 * $3))" } result=`fun3 $1 $2 $3` ## 脚本程序的位置参数传递给函数的位置参数 ,从左到右代表:$1代表执行脚本的第1个参数,$2代表执行 ## 脚本的第2个参数 ## result='fun3 $3 $2 $1' ## 从左——>右代表:$3代表执行脚本的第3个参数,$2代表执行脚本的第2个参数... echo "result is : result" ## ./result.sh 2 3 4 result is : 24 ------------------------------------------------------------------ fun3() { echo "$(($1 * $2 * $3))" } num1=$1 num2=$2 num3=$3 result=`fun3 num1 num2 num3` ## 脚本程序的位置参数传递给函数的位置参数 echo "result is : result" ## ./result.sh 2 3 4 result is : 24
四 函数中的数组变量
4.1 往函数中传数组
#!/usr/bin/bash num=(1 2 3 4 5) echo "${num[@]}" ##输出数组的元素 array() { factorial=1 ##默认是全局变量,在不同函数之间可以使用 若只是在函数内部生效加local for i in "$@" do factorial=$[factorial * $i] done echo "$factorial" } array ${num[@]} ##or写成:array ${num[*]}## 获取数组的所有元素的值 ## $@,$*:表示所有参数 ## ./fun_array.sh ---------------------------------------------------------------- 直接写死的话: num=(1 2 3 4 5) array() { factorial=1 ##默认是全局变量,在不同函数之间可以使用 若只是在函数内部生效加local for i in ${num[@]} do factorial=$[factorial * $i] done echo "$factorial" } array
4.2 函数返回--输出数组变量
#函数接受位置参数:$1,$2,...$n
#函数接收数组变量 $* 或 $@
#函数将接收到的所有参数赋值给数组 newarray=($*)
#函数使用参数的数量 $#
#!/bin/bash num=(1 2 3) array(){ #echo -e "all parameters:$* " #给局部数组赋值 #local new_array=($*) local new_array=($@) #echo "${new_array[1]}" for((i=0;i<$#;i++)) do outarray[$i]=$((${new_array[$i]}*5)) done echo "${outarray[*]}" } res=`array ${num[*]}` echo ${res[*]} ---------------------------------------------------------------- num=(1 2 3) array() { a=55 local newarray=() local i ## $#:代表传入参数的个数 local j for i in $* do outarray[j++]=$[$i*5] done echo "${outarray[*]}" ##echo可以输出数组,也可以输出字符串 } result=`array ${num[*]};echo $a` ## 反引号``会在子shell执行 echo ${result[*]} array ${num[*]} ##会在当前的shell中执行 echo "a: $a"
浙公网安备 33010602011771号