💜 想真正擅长编程? 从一门课程开始,100% 免费

第6节:Shell 脚本中的函数与参数传递

一、知识讲解

在 Shell 脚本中,函数(Function) 是实现模块化编程的关键。 函数能让脚本更简洁、更易维护,并能复用逻辑。 本节将学习:

  • Shell 函数的定义与调用
  • 函数返回值
  • 位置参数($0、$1、$2...)
  • 特殊变量($#、$@、$*、$?、$$)

1. 函数的定义与调用

基本定义

Shell
# 语法1
function 函数名() {
    命令序列
}

# 语法2(推荐)
函数名() {
    命令序列
}

示例:

Shell
say_hello() {
    echo "Hello, $1!"
}
say_hello Tom

执行结果:

plain
Hello, Tom!

说明: $1 表示函数第一个参数。


2. 函数的返回值

方式一:使用 return 返回状态码(0~255)

Shell
sum() {
    result=$(($1 + $2))
    return $result
}

sum 3 4
echo "返回值: $?"

⚠️ 注意:$? 只能获取函数的返回状态码,且最大 255。

方式二:通过 echo 输出结果

Shell
sum() {
    echo $(($1 + $2))
}

result=$(sum 5 6)
echo "结果是: $result"

3. 脚本参数传递

执行脚本时也可以传参:

Shell
#!/bin/bash
# demo.sh
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数个数: $#"
echo "所有参数: $@"

执行:

Shell
bash demo.sh apple banana

输出:

plain
第一个参数: apple
第二个参数: banana
参数个数: 2
所有参数: apple banana

4. 常用特殊变量

变量 含义
$0 当前脚本名
$1
~$9 第1~9个参数
$# 参数个数
$@ 以独立形式输出所有参数
$* 以整体形式输出所有参数
$? 上一条命令或函数的返回状态
$$ 当前脚本的进程号

5. 函数与脚本结合使用

一个完整示例:

Shell
#!/bin/bash
# calc.sh
# 简易计算器

add() {
    echo $(($1 + $2))
}

sub() {
    echo $(($1 - $2))
}

if [ $# -ne 3 ]; then
    echo "用法: bash calc.sh add/sub num1 num2"
    exit 1
fi

case $1 in
  add)
    result=$(add $2 $3)
    ;;
  sub)
    result=$(sub $2 $3)
    ;;
  *)
    echo "未知操作"
    exit 1
    ;;
esac

echo "计算结果: $result"

执行:

Shell
bash calc.sh add 10 5
# 输出:计算结果: 15

二、示例代码

示例1:函数的定义与调用

Shell
#!/bin/bash
say_hi() {
    echo "Hi, $1! Welcome to Shell."
}
say_hi Alice

示例2:函数返回值

Shell
#!/bin/bash
add() {
    echo $(($1 + $2))
}
res=$(add 4 9)
echo "结果: $res"

示例3:脚本参数传递

Shell
#!/bin/bash
echo "脚本名: $0"
echo "第一个参数: $1"
echo "总参数数: $#"
echo "所有参数: $@"

三、课堂练习

  1. 编写脚本 greet.sh
  • 定义函数 greet(),接收一个名字参数;
  • 输出“你好,XXX,欢迎使用Shell脚本!”
  1. 编写脚本 math.sh
  • 定义 add() 和 mul() 函数;
  • 用户从命令行传入操作符与两个数;
  • 输出结果。
  1. 扩展:在脚本中添加判断逻辑,当参数不足时提示正确用法。