专题总结--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
eg:阶乘

二 函数的返回值

  函数的返回值:函数最后一条命令的执行结果,要么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
eg

 三 函数位置参数与脚本程序的位置参数

 函数的位置参数:在函数后面加的位置参数

 脚本程序的位置参数:在执行脚本程序时,后面加的位置参数

#!/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
eg

  四 函数中的数组变量

    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 
eg

   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"
eg

 

posted on 2020-11-14 21:06  rwwh  阅读(113)  评论(0)    收藏  举报

导航