1. 首页 > Linux教程 > 正文

Linux教程FG394-Shell函数与数组

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容更多学习教程公众号风哥教程itpux_com,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍Shell函数和数组的使用方法。

Part01-Shell函数

1.1 函数定义与调用

# 函数定义与调用
[root@linux ~]# cat > /fglinux/functions.sh << 'EOF' #!/bin/bash # functions.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 定义函数方式一 hello() { echo "Hello, World!" } # 定义函数方式二 function greet() { echo "欢迎学习Linux Shell编程" } # 带参数的函数 show_info() { echo "脚本名称: $0" echo "参数个数: $#" echo "第一个参数: $1" echo "第二个参数: $2" echo "所有参数: $@" } # 带返回值的函数 add() { local sum=$(($1 + $2)) echo $sum } # 返回状态码的函数 check_file() { if [ -f "$1" ]; then return 0 else return 1 fi } # 调用函数 echo "=== 调用hello函数 ===" hello echo "=== 调用greet函数 ===" greet echo "=== 调用带参数函数 ===" show_info 参数1 参数2 参数3 echo "=== 调用返回值函数 ===" RESULT=$(add 10 20) echo "10 + 20 = $RESULT" echo "=== 调用状态码函数 ===" if check_file /etc/passwd; then echo "文件存在" else echo "文件不存在" fi EOF [root@linux ~]# chmod +x /fglinux/functions.sh [root@linux ~]# /fglinux/functions.sh === 调用hello函数 === Hello, World! === 调用greet函数 === 欢迎学习Linux Shell编程 === 调用带参数函数 === 脚本名称: /fglinux/functions.sh 参数个数: 3 第一个参数: 参数1 第二个参数: 参数2 所有参数: 参数1 参数2 参数3 === 调用返回值函数 === 10 + 20 = 30 === 调用状态码函数 === 文件存在

1.2 实用函数库

# 创建函数库
[root@linux ~]# cat > /fglinux/lib/common.sh << 'EOF' #!/bin/bash # common.sh - 公共函数库 # from:www.itpux.com.qq113257174.学习交流加群风哥微信: itpux-comwx:itpux-com # web: http://www.fgedu.net.cn # 日志函数 log_info() { echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') $1" } log_error() { echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $1" >&2
}

log_warn() {
echo “[WARN] $(date ‘+%Y-%m-%d %H:%M:%S’) $1”
}

# 检查root权限
check_root() {
if [ $(id -u) -ne 0 ]; then
log_error “需要root权限执行”
exit 1
fi
}

# 检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
log_error “命令 $1 不存在”
return 1
fi
return 0
}

# 检查服务状态
check_service() {
if systemctl is-active –quiet $1; then
log_info “服务 $1 正在运行”
return 0
else
log_warn “服务 $1 未运行”
return 1
fi
}

# 备份文件
backup_file() {
local file=$1
local backup=”${file}.bak.$(date +%Y%m%d%H%M%S)”
if [ -f “$file” ]; then
cp “$file” “$backup”
log_info “已备份 $file 到 $backup”
echo “$backup”
else
log_error “文件 $file 不存在”
return 1
fi
}

# 发送告警
send_alert() {
local subject=$1
local message=$2
echo “$message” | mail -s “$subject” admin@fgedu.net.cn
log_info “已发送告警: $subject”
}
EOF

# 使用函数库
[root@linux ~]# cat > /fglinux/use_lib.sh << 'EOF' #!/bin/bash # use_lib.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 加载函数库 source /fglinux/lib/common.sh # 使用函数 log_info "开始执行脚本" check_root check_command nginx check_service nginx backup_file /etc/nginx/nginx.conf log_info "脚本执行完成" EOF [root@linux ~]# chmod +x /fglinux/use_lib.sh [root@linux ~]# /fglinux/use_lib.sh [INFO] 2026-04-04 00:45:00 开始执行脚本 [INFO] 2026-04-04 00:45:00 服务 nginx 正在运行 [INFO] 2026-04-04 00:45:00 已备份 /etc/nginx/nginx.conf 到 /etc/nginx/nginx.conf.bak.20260404004500 [INFO] 2026-04-04 00:45:00 脚本执行完成

Part02-Shell数组

2.更多视频教程www.fgedu.net.cn1 数组操作

# 数组操作示例
[root@linux ~]# cat > /fglinux/arrays.sh << 'EOF' #!/bin/bash # arrays.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 定义数组 echo "=== 定义数组 ===" FRUITS=("苹果" "香蕉" "橙子" "葡萄" "西瓜") echo "水果数组: ${FRUITS[@]}" # 访问数组元素 echo "=== 访问数组元素 ===" echo "第一个元素: ${FRUITS[0]}" echo "第二个元素: ${FRUITS[1]}" echo "最后一个元素: ${FRUITS[-1]}" # 数组长度 echo "=== 数组长度 ===" echo "数组长度: ${#FRUITS[@]}" # 遍历数组 echo "=== 遍历数组 ===" for fruit in "${FRUITS[@]}"; do echo "水果: $fruit" done # 带索引遍历 echo "=== 带索引遍历 ===" for i in "${!FRUITS[@]}"; do echo "索引 $i: ${FRUITS[$i]}" done # 添加元素 echo "=== 添加元素 ===" FRUITS+=("草莓" "芒果") echo "添加后: ${FRUITS[@]}" # 删除元素 echo "=== 删除元素 ===" unset FRUITS[1] echo "删除后: ${FRUITS[@]}" # 数组切片 echo "=== 数组切片 ===" echo "切片[1-3]: ${FRUITS[@]:1:3}" # 关联数组 echo "=== 关联数组 ===" declare -A USER_INFO USER_INFO[name]="风哥" USER_INFO[age]=30 USER_INFO[city]="北京" echo "姓名: ${USER_INFO[name]}" echo "年龄: ${USER_INFO[age]}" echo "城市: ${USER_INFO[city]}" echo "=== 遍历关联数组 ===" for key in "${!USER_INFO[@]}"; do echo "$key: ${USER_INFO[$key]}" done EOF [root@linux ~]# chmod +x /fglinux/arrays.sh [root@linux ~]# /fglinux/arrays.sh === 定义数组 === 水果数组: 苹果 香蕉 橙子 葡萄 西瓜 === 访问数组元素 === 第一个元素: 苹果 第二个元素: 香蕉 最后一个元素: 西瓜 === 数组长度 === 数组长度: 5 === 遍历数组 === 水果: 苹果 水果: 香蕉 水果: 橙子 水果: 葡萄 水果: 西瓜 === 带索引遍历 === 索引 0: 苹果 索引 1: 香蕉 索引 2: 橙子 索引 3: 葡萄 索引 4: 西瓜 === 添加元素 === 添加后: 苹果 香蕉 橙子 葡萄 西瓜 草莓 芒果 === 删除元素 === 删除后: 苹果 橙子 葡萄 西瓜 草莓 芒果 === 数组切片 === 切片[1-3]: 橙子 葡萄 西瓜 === 关联数组 === 姓名: 风哥 年龄: 30 城市: 北京 === 遍历关联数组 === name: 风哥 age: 30 city: 北京
风哥针对Shell函数与数组建议:

  • 使用local关键字定义局部变量
  • 函数返回值使用echo输出
  • 创建公共函数库提高复用性
  • 使用关联数组存储键值对
  • 注意数组的索引从0开始

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息