您的位置:首页 > 运维架构 > Shell

shell脚本(函数定义及参数调用)

2019-06-24 22:04 1246 查看

                                        函数的定义及参数调用

函数是完成特定功能的代码片段,在shell中定义函数可以使用代码模块化,便于调用,函数必须先定义才可以使用。

一、定义函数的方式

方法一:

函数名() {

        函数要实现的功能代码

}


方法二:

function 函数名 {

        函数要实现的功能代码

}


二、调用参数

函数名 变量

函数名 变量重新赋值

函数名 位置变量$1 $2 $3.....

以下是函数传参的一些示例

函数位置变量的传递

#!/bin/bash
########函数的位置参数传递
if [ $# -ne 3 ];then  #如果脚本后接的参数不等于3个,那么则打印脚本用法并退出
        echo "usage: : `basename $0` par1 par2 par3"    
        exit
fi
fun() {
        echo "$[$1 * $2 * $3]"
        #这里的$1 $2 $3是函数的位置参数
}
result=`fun $1 $2 $3`
#而这里的$1 $2 $3是脚本的接受的位置参数,而fun函数将脚本接受的位置参数传递到了函数中
echo "$result"


函数调用数组变量中的数值

#################
#该脚本先定义数组,其中有1-5个值,而后定义一个arry函数,作用是接收外部参数num的数值,并且每次取值与sum值相乘
num=(1 2 3 4 5) #定义数组num
sum=1           #定义sum初始值为1
#定义函数array
arry() {
        for i in "$@"    # "$@" 为所有参数 $* 也代表所有参数,不需要加“”
        do
        let sum*=$i     #sum的值与$i读取的值相乘,再赋值给自己
        done
}
arry ${num[@]}          # 执行函数array,读取$num中的值.
echo $sum


#!/bin/bash
#以上脚本作用和该脚本相同,执行脚本时带数字参数,for循环所有数字,逐个给sum2相乘
sum2=1
for j in $*
do
        let sum2*=$j
done
echo $sum2

       

以下例子举例如何从定义变量中拿参数并重新赋值给函数中变量

local 变量名 是为了不与其他变量冲突,只在该函数中生效,不影响全局

#!/bin/bash
##############
#接收变量重新赋值
#传递参数到函数中,并且重新计算赋值
################
num=( 1 2 3 )   #赋值数组num
#定义函数array
array() {
        local newnum=($*)    #定义函数局部变量newnum
        local i              #定义函数局部变量i
        for ((i=0;i<$#;i++)) #  $#为接收的所有参数 $*同理 此行即为 $i起始值为0,给下面new作为索引,索引值<$#
        do
        product[$i]=$[${newnum[$i]} * 5]  #将每次遍历newnum数组的值乘以5,重新赋值给new
        done
}
array ${num[@]}  #调用函数array
echo ${product[@]} #输出$num数组的值


小扩展,函数返回值

#!/bin/bash
###
##funtion的函数返回值 return
############
fun() {
        read -p "enter number: " num
        let sum=2*$num
        #返回$?的值
        return $[2*$num]
}
fun
#shell的返回值不能超过255,无论你输入什么数字,以上运算返回的值都在255以内
echo "fun return value: $?"



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐