本文目录导读:

在Shell脚本中实现自定义函数非常简单,主要有以下几种方式:
基本函数定义语法
使用 function 关键字
function 函数名() {
# 函数体
commands
}
省略 function 关键字
函数名() {
# 函数体
commands
}
完整示例
#!/bin/bash
# 定义简单函数
hello() {
echo "Hello, World!"
}
# 调用函数
hello
# 带参数的函数
greet() {
echo "Hello, $1! You are $2 years old."
}
greet "Alice" 25
# 带返回值的函数
add() {
local sum=$(( $1 + $2 ))
echo $sum
return 0
}
result=$(add 5 3)
echo "Sum is: $result"
函数参数处理
#!/bin/bash
# 处理多个参数的函数
process_args() {
echo "函数名称: $0"
echo "参数个数: $#"
echo "所有参数: $@"
echo "所有参数(字符串): $*"
echo "第一个参数: $1"
echo "第二个参数: $2"
# 遍历所有参数
for arg in "$@"; do
echo "处理参数: $arg"
done
}
process_args a b c d
返回值处理
#!/bin/bash
# 使用 return 返回值 (0-255)
check_number() {
if [ $1 -gt 10 ]; then
return 0 # 成功
else
return 1 # 失败
fi
}
check_number 15
if [ $? -eq 0 ]; then
echo "数字大于10"
fi
# 使用 echo 返回值
get_sum() {
local a=$1
local b=$2
echo $((a + b))
}
sum=$(get_sum 10 20)
echo "和是: $sum"
局部变量与全局变量
#!/bin/bash
global_var="全局变量"
my_function() {
local local_var="局部变量"
global_var="函数中修改的全局变量"
echo "函数内部: $local_var"
echo "函数内部: $global_var"
}
my_function
echo "函数外部: $global_var"
# echo "函数外部: $local_var" # 这行会报错,因为local_var只在函数内有效
实际应用示例
#!/bin/bash
# 日志函数
log() {
local level=$1
local message=$2
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$timestamp] [$level] $message"
}
# 文件操作函数
check_file() {
local file=$1
if [ -f "$file" ]; then
log "INFO" "文件 $file 存在"
return 0
else
log "ERROR" "文件 $file 不存在"
return 1
fi
}
# 数组操作函数
get_average() {
local sum=0
local count=0
for num in "$@"; do
sum=$((sum + num))
count=$((count + 1))
done
if [ $count -eq 0 ]; then
echo 0
else
echo $((sum / count))
fi
}
# 使用示例
log "INFO" "脚本开始执行"
check_file "/etc/passwd"
if [ $? -eq 0 ]; then
echo "文件检查通过"
fi
avg=$(get_average 10 20 30 40 50)
echo "平均值是: $avg"
函数库文件
创建 functions.sh 库文件:
#!/bin/bash
# 函数库文件
# 颜色输出
red() { echo -e "\033[31m$1\033[0m"; }
green() { echo -e "\033[32m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }
# 确认操作
confirm() {
read -p "$1 (y/n): " answer
case $answer in
[Yy]* ) return 0 ;;
* ) return 1 ;;
esac
}
在脚本中引用:
#!/bin/bash
source ./functions.sh
green "脚本开始执行"
if confirm "是否继续?"; then
echo "用户确认继续"
else
echo "用户取消操作"
fi
高级技巧
#!/bin/bash
# 函数递归
factorial() {
if [ $1 -le 1 ]; then
echo 1
else
local prev=$(factorial $(( $1 - 1 )))
echo $(( $1 * prev ))
fi
}
echo "5的阶乘是: $(factorial 5)"
# 函数作为参数传递
call_function() {
$1 "这是一个参数"
}
my_callback() {
echo "回调函数被调用,参数: $1"
}
call_function my_callback
注意事项
- 函数定义必须在调用之前
- return 只能返回 0-255 的整数
- 使用 local 关键字避免变量污染
- $? 获取上一次执行命令的返回状态
- 函数中的 $0 仍然是脚本名称,不是函数名
这些就是Shell脚本中实现自定义函数的主要方法,根据你的具体需求选择合适的语法和使用方式。