shell函数介绍和使用

1. shell中的函数

 1.1 函数优点

  函数的优点:代码模块化,调用方便,节省内存;代码量少,排错简单; 可以改变代码的执行顺序

 1.2 函数语法

  语法一(推荐使用):
  函数名 () {
    代码块
    return N
  }

  语法二:
  function 函数名 {
    代码块
    return N
  }

 1.3 函数应用

  shell中调用函数时,不用加小括号,直接写函数名就可以。

  实现一个10的阶乘函数。

    注意: 使用 let方式进行计算时,调用变量时可以不用写 $符;双小括号(()) 必须得写 $符。

    例子中 循环体的五种计算方式都可以, 推荐使用 let 方式来计算

#!/bin/bash
factorial() {
    result=1
    for((i=1; i<=10; i++))
    do
        #result=$(($result * $i))
     #let result=$result*$i
#let result=result*i
     #let result*=$i
     let result*=i
done echo "10的阶乘为$result" return 0 }
# 调用函数,不用加() factorial

 1.4 函数传参

  shell 函数中,传参

#!/bin/bash

factorial() {
    result=1
    for((i=1; i<=$1; i++))
    do
        result=$(($result * $i))
    done
    echo "$1的阶乘为$result"
    return 0
}

# 调用函数,不用加()
factorial $1
factorial $2
factorial $3

# 结果如下
3的阶乘为6
5的阶乘为120
10的阶乘为3628800

 1.5 shell函数返回值

  1. return 返回值 -- 即函数的执行状态

    在 C++、Java、C#、Python 等大部分编程语言中,返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果就通过 return 关键字返回;

    但是 Shell 中的 return 返回值表示的是函数的退出状态:默认的返回值为 0 表示函数执行成功了,返回值为非 0 表示函数执行失败(出错)了。if、while、for 等语句都是根据函数的退出状态来判断条件是否成立。函数执行失败时,我们可以自定义return返回值,这样就可以根据返回值(退出状态)来判断具体出现了什么错误,比如一个打开文件的函数,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

    $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值,我们可以根据 $? 来获取上一个函数的执行状态(执行成功或执行失败的类型)

#!/bin/bash

test() {
  echo "arg1 = $1"
  if [ $1 == "1" ]; then
    return 111
  else
    return 100
  fi
}

test 1
echo "该函数的执行状态值为$?"


执行结果如下:
arg1 = 1
该函数的执行状态值为111

  2. echo 返回值 -- 获取函数处理后的结果

    如何得到函数的处理结果呢?比如,定义了一个函数,计算从 m 加到 n 的和,最终得到的结果该如何返回呢?  

    这个问题有两种解决方案:

      一种是借助全局变量,将得到的结果赋值给全局变量,直接使用全局变量

#!/bin/bash

result=1        # 全局变量
factorial() {
    result=1
    for((i=1; i<=10; i++))
    do
        let result*=i
    done
    return 198
}

factorial
echo "the last result is $result"

结果如下:
the last result is 3628800

      一种是在函数内部使用 echo、printf 命令将结果输出,在函数外部使用$()或者``捕获结果。

#!/bin/bash

factorial() {
    result=1
    for((i=1; i<=10; i++))
    do
        let result*=i
    done
    echo "10的阶乘为$result"
    return 198
}

out_result=`factorial`
echo "the last result is $out_result"
echo "the last result also is $(factorial)"

结果如下:
the last result is 10的阶乘为3628800
the last result also is 10的阶乘为3628800

   `` 或 $() 捕获了echo的输出结果,并将结果赋值给变量out_result 或 直接输出结果。

 

shell函数介绍和使用

上一篇:VirtualBox启动时出现error: The machine is not mutable


下一篇:linux安装subversion