Shell脚本如何实现自定义函数

wen 实用脚本 3

本文目录导读:

Shell脚本如何实现自定义函数

  1. 基本函数定义语法
  2. 完整示例
  3. 函数参数处理
  4. 返回值处理
  5. 局部变量与全局变量
  6. 实际应用示例
  7. 函数库文件
  8. 高级技巧
  9. 注意事项

在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

注意事项

  1. 函数定义必须在调用之前
  2. return 只能返回 0-255 的整数
  3. 使用 local 关键字避免变量污染
  4. $? 获取上一次执行命令的返回状态
  5. 函数中的 $0 仍然是脚本名称,不是函数名

这些就是Shell脚本中实现自定义函数的主要方法,根据你的具体需求选择合适的语法和使用方式。

上一篇脚本如何批量调整音频声道

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!