Shell之function函数的定义及调用示例

本文介绍了Shell中function函数的定义和调用方法,包括位置传参、使用return返回值以及数组传参的示例,旨在提升Shell脚本的可读性和代码复用性。

function函数的定义及调用

将一些相对独立的代码变成函数,可以提高程序的可读性和重用性。避免重复编写大量相同的代码

function函数的定义

方法一:

1

2

3

4

5

6

7

function_name ()

{

    statement1

    statement2

    ....

    statementn

}

方法二:

1

2

3

4

5

6

7

function function_name()

{

   statement1

   statement2

   ....

   statementn

}

 function函数的调用【位置传参】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/usr/bash/env bash

#!/bin/bash

#解释器选第一个或第二个

factorial() {

value=1

for((i=1;i<=$1;i++))

do

#       value=$[$value * $i]

#       value=$(($value*$i))  等价于   value=$(($value * $i))

        let value*=$i       #等价于  let value=$value*$i  不等价于 let value=$value * $i

done

echo "$1的阶乘是: $value"

}

#调用函数并传参

factorial $1

//测试传参

[root@mysql-master /soft/scripts]# sh function1.sh 5

5的阶乘是: 120

[root@mysql-master /soft/scripts]

函数使用return返回值【位置传参】

在Shell中,return语句只能返回某个0-255之间的整数值,如果超出这个范围就会返回错误的结果。在Shell中还有一种更优雅的方法帮助用户来获得函数执行后的某个结果,那就是使用echo,例如上例。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#! /bin/bash

function sum()

{

  returnValue=$(( $1 + $2 ))

  return $Value

}

sum 16 4

echo $?

//测试

[root@mysql-master /soft/scripts]# sh sum.sh 

20

//echo返回不在0-255范围的结果

#! /bin/bash

function length()

{

  str=$1

  result=0

  if [ "$str" != "" ] ; then

      result=${#str}

  fi

  echo "$result"

}

len=`length "abc123"`

echo "The string's length is $len "

//测试

[root@mysql-master /soft/scripts]# sh length.sh  

The string's length is 6 

函数的调用【数组传参】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

#!/bin/bash

#数组num

num=(1 2 3 4 5 6)

array() {

        local value=1       #加local表示value是局部参数,不影响函数外的同名参数

        for i in $@         #所有的参数{1..6}

        do

                let value*=$i

        done

        echo "$value"

}

array ${num[@]}

//测试

[root@mysql-master /soft/scripts]# sh function2.sh 

720

####传入数组参数,输出数组参数####

#!/bin/bash

num=(1 2 3)

num2=(3 4 5)

array() {

        local newarr=($@)

        for((i=0;i<$#;i++))   #或者写成for i in $@;do;outarr[j++]=$[$i*3];done

        do

                outarr[$i]=$(( ${newarr[$i]} * 3 ))

        done

        echo "${outarr[@]}"

}

reslut=`array ${num[*]}`

echo $reslut

reslut2=`array ${num2[*]}`

echo $reslut2

//测试

[root@mysql-master /soft/scripts]# sh  function3.sh 

3 6 9

9 12 15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jh035

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值