一、知识讲解
在 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 "所有参数: $@"
三、课堂练习
- 编写脚本
greet.sh
- 定义函数
greet(),接收一个名字参数; - 输出“你好,XXX,欢迎使用Shell脚本!”
- 编写脚本
math.sh
- 定义
add()和mul()函数; - 用户从命令行传入操作符与两个数;
- 输出结果。
- 扩展:在脚本中添加判断逻辑,当参数不足时提示正确用法。