Shell语法(6)--方法传递参数机制

2020-05-01  本文已影响0人  刘小厨

函数

定义函数有两种格式:
①:

name( )
{
  command;
  cmmand2 ;
}

②:

[ function ] funname [ ( ) ]
{
  action;
  [return int;]
}

举个例子:

#!/bin/bash
outParams1="参数一"
outParams2="参数二"
function test(){
        params1="局部变量1"
        params2="局部变量2"
        echo $outParams1
        echo $params1
        echo "我是函数"
}
#函数调用,写在函数下方,直接函数名就可以调用
test

shell语法中没有形参,我们看下如何在调用方法时传递参数:

#!/bin/bash
function test(){
        # 打印第一个参数
        echo $1
}
#调用方法传递一个参数 10
test 10

其中 $n表示第n个参数,不清楚的可以看下
Shell语法(1)--变量的定义和使用

传参可以通过调用方法时候传参,也可以通过脚本传参(终端执行sh文件时候传参),先看下第一种,举个栗子(阶乘):

#!/bin/bash
a=1
factorial () {
for i in `seq $1`
do
            #let 运算符下也可以写成let a*=$i
            let a=$a*$i
done

echo "$1的阶乘 $a"
}

factorial 10

#输出
#10的阶乘 362880

看下执行脚本时候传参:

#!/bin/bash
a=1
factorial () {
#这里接收的是调用方法时候传递的第一个参数
for i in `seq $1`
do
          let a=$a*$i
done

echo "$1的阶乘 $a"
}
#这里接收的是执行脚本时候的第一个参数
factorial $1
#终端输入
# ./factorial.sh 5

#打印结果
5的阶乘 24

提示:上述shell函数执行结果为int类型的值,也就是说大于65535的值不会正常返回,比如上述代码执行# ./factorial.sh 10 打印结果为10的阶乘 0,因为10的阶乘大于65535

函数的返回值

直接举个例子:

#!/bin/bash
fun1(){
#将用户输入参数赋值给num
read -p "请输入数值" num
let 2*$num
}
fun1
#$?表示上调语句的执行结果,是个状态码(0-255之间) 0表示成功
echo "fun1返回值 $?"

执行上述代码,输入数值10,终端输出fun1返回值 0

# ./return.sh
请输入数值10
fun1返回值 0

自定义返回值

将上述代码改为:

#!/bin/bash
fun1(){
read -p "请输入数值" num
return $[ 2*$num ]
}
fun1
echo "fun1返回值 $?"

执行上述代码,输入数值10,终端输出fun1返回值 20,因为返回值在0-255,所以我们输入127以上 的数字不会的到正确的结果:

# ./return.sh
请输入数值10
fun1返回值 20
-----------------------
# ./return.sh
请输入数值200
fun1返回值 144

注意: 在Shell中函数的返回结果是,最后一条指令的执行结果!!!!!,如果我们想要返回值为字符串等类型,可以使用echo指令做为函数的最后一条命令

示例:

#!/bin/bash
fun1(){
read -p "请输入数值" num
echo $[ 2*num ]
}
result=`fun1`
echo "fun1返回值 $result"

执行:

# ./return.sh
请输入数值200
fun1返回值 400
上一篇下一篇

猜你喜欢

热点阅读