Bash函数详解

发布于:2025-07-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

1. 基础函数

1.1 定义与调用

可以自定义函数名称,例如将greet改为yana。❌ 不能以数字开头(如 1greet ),建议全小写+下划线(社区惯例)。

# 定义函数
greet() {
    echo "Hello, $1!"
}

# 调用函数
greet "Alice"  # 输出: Hello, Alice!

1.2 检查数字是否为偶数

# 通过 return 返回状态码(0-255)
is_even() {
    if (( $1 % 2 == 0 )); then
        return 0  # 成功(偶数)
    else
        return 1  # 失败(奇数)
    fi
}

# 调用并检查返回值
is_even 4 && echo "偶数" || echo "奇数"

2. 参数处理函数

2.1 计算两数之和

sum() {
    echo $(( $1 + $2 ))
}
sum 3 5  # 输出: 8

2.2 打印所有参数($@

print_args() {
    for arg in "$@"; do
        echo "参数: $arg"
    done
}
print_args "A" "B" "C"
#$@ 指所有参数的列表

2.3 带默认值的问候

greet_user() {
    local name=${1:-"Guest"}  # 默认值 "Guest"
    echo "Welcome, $name!"
}
greet_user  # 输出: Welcome, Guest!

3. 文件操作函数

3.1 检查文件是否存在

file_exists() {
    [ -f "$1" ] && return 0 || return 1
}
file_exists "/etc/passwd" && echo "文件存在"
`||`:如果前一个命令失败(返回非零退出码),则执行后一个命令。
`&&`:如果前一个命令成功(返回零退出码),则执行后一个命令
`return`退出函数,返回值给这个函数;与`exit`的区别是,exit用于关闭所有的文件,结束正在运行的整个程序,他将参数返回给OS(操作系统)。
`return 0`:代表程序正常退出
`return 1`:代表程序异常退出

3.2 创建文件备份

backup_file() {
    local file="$1"
    cp -v "$file" "${file}.bak" || return 1
}
backup_file "data.txt"

4. 日志与错误处理

4.1 格式化日志记录

log() {
    local level=$1
    local msg=$2
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$level] $msg" >> "/var/log/myscript.log"
}
log "INFO" "脚本启动"

4.2 错误退出脚本

die() {
    echo "[ERROR] $1" >&2
    exit 1
}
[ -d "/data" ] || die "目录 /data 不存在"

5. 实用工具函数

5.1 字符串转大写

# 转大写
to_upper() {
    echo "${1^^}"
}
to_upper "hello"  # 输出: HELLO

# 反转字符串
reverse_str() {
    echo "$1" | rev
}
reverse_str "Bash"  # 输出: hsaB

5.2 网络连通性检查

check_internet() {
    ping -c1 google.com &>/dev/null && return 0 || return 1
}
check_internet || die "网络连接失败"

6. 高级函数技巧

6.1 函数返回字符串

获取主机名

get_hostname() {
    echo "$HOSTNAME"  # 通过 stdout 返回
}
host=$(get_hostname)  # 捕获输出

6.2 局部变量(避免污染全局)

统计目录文件数

count_files() {
    local dir="$1"  # 局部变量
    ls "$dir" | wc -l
}

6.3 将函数作为参数调用

apply_operation() {
    local func=$1
    local arg=$2
    $func "$arg"
}

# 调用
apply_operation to_upper "hello"  # 输出: HELLO

7. 常用函数库示例

utils.sh(可复用的函数库)

检查是否为 root 用户,然后自动安装软件包 。

#!/bin/bash
# 常用函数库

# 日志记录
log() {
    echo "[$(date)] $1"
}

# 检查root权限
check_root() {
    [ "$(id -u)" -eq 0 ] || die "需要root权限"
}

# 安装依赖
install_pkg() {
    local pkg=$1
    if ! command -v "$pkg" &>/dev/null; then
        apt-get install -y "$pkg" || die "安装 $pkg 失败"
    fi
}

调用方式

source utils.sh
check_root
install_pkg "curl"

总结:Bash 函数核心要点

特性 说明
定义语法 func_name() { ... }function func_name { ... }
参数传递 通过 $1, $2, $@ 获取
返回值 通过 return 返回状态码,或通过 echo 输出结果
局部变量 使用 local var 避免污染全局作用域
最佳实践 函数名小写+下划线,添加注释,优先返回0/1状态码

网站公告

今日签到

点亮在社区的每一天
去签到