Appearance
注释
单行注释
基本语法
bash
#!/bin/bash
# 这是一个单行注释
echo "Hello, World!"
# 在命令后添加注释
echo "Hello, World!" # 这也是注释
# 注释可以解释代码
name="张三" # 定义变量 name
echo "$name" # 输出变量注释的作用
bash
#!/bin/bash
# 脚本名称: hello.sh
# 功能描述: 打印欢迎信息
# 作者: Your Name
# 创建日期: 2024-01-01
# 版本: 1.0
echo "Hello, World!"多行注释
使用 : << 'EOF'
bash
#!/bin/bash
: << 'EOF'
这是一个多行注释
可以写多行内容
不会被执行
EOF
echo "Hello, World!"使用 : << 'COMMENT'
bash
#!/bin/bash
: << 'COMMENT'
这是多行注释
可以包含任意字符
包括特殊符号
COMMENT
echo "Hello, World!"使用 : << 'BLOCK'
bash
#!/bin/bash
: << 'BLOCK'
这是多行注释的另一种写法
使用不同的标识符
BLOCK
echo "Hello, World!"注释的最佳实践
1. 解释代码功能
bash
# 好的做法
# 计算两个数的和
result=$((a + b))
# 不好的做法
result=$((a + b))2. 添加脚本说明
bash
#!/bin/bash
# 脚本名称: backup.sh
# 功能描述: 备份指定目录到指定位置
# 使用方法: ./backup.sh <源目录> <目标目录>
# 作者: Your Name
# 创建日期: 2024-01-01
# 版本: 1.0
# 检查参数
if [ $# -ne 2 ]; then
echo "使用方法: $0 <源目录> <目标目录>"
exit 1
fi
# 备份操作
cp -r "$1" "$2"3. 标记待办事项
bash
#!/bin/bash
# TODO: 添加错误处理
# TODO: 优化性能
# FIXME: 修复这个 bug
# HACK: 临时解决方案
echo "Hello, World!"4. 解释复杂逻辑
bash
#!/bin/bash
# 检查文件是否存在,如果不存在则创建
if [ ! -f "$file" ]; then
touch "$file"
fi
# 检查文件是否可读,如果不可读则修改权限
if [ ! -r "$file" ]; then
chmod +r "$file"
fi注释的使用场景
1. 文件头注释
bash
#!/bin/bash
# ==============================================
# 脚本名称: system_monitor.sh
# 功能描述: 系统监控脚本
# 作者: Your Name
# 创建日期: 2024-01-01
# 版本: 1.0
# ==============================================
# 检查系统状态
check_system_status() {
# 检查 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
echo "CPU 使用率: $cpu_usage"
# 检查内存使用率
mem_usage=$(free -m | grep "Mem" | awk '{print $3/$2 * 100.0}')
echo "内存使用率: $mem_usage"
# 检查磁盘使用率
disk_usage=$(df -h / | awk 'NR==2 {print $5}')
echo "磁盘使用率: $disk_usage"
}2. 函数注释
bash
#!/bin/bash
# 计算两个数的和
# 参数: $1 - 第一个数, $2 - 第二个数
# 返回: 两个数的和
add() {
echo $(($1 + $2))
}
# 计算两个数的积
# 参数: $1 - 第一个数, $2 - 第二个数
# 返回: 两个数的积
multiply() {
echo $(($1 * $2))
}
# 使用函数
result=$(add 10 20)
echo "10 + 20 = $result"
result=$(multiply 10 20)
echo "10 * 20 = $result"3. 配置说明
bash
#!/bin/bash
# ==============================================
# 配置文件
# ==============================================
# 日志目录
LOG_DIR="/var/log/myapp"
# 日志文件
LOG_FILE="$LOG_DIR/app.log"
# 最大日志大小(MB)
MAX_LOG_SIZE=100
# 日志保留天数
LOG_RETENTION_DAYS=30
# ==============================================
# 函数定义
# ==============================================
# 记录日志
log() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $message" >> "$LOG_FILE"
}
# 检查日志大小
check_log_size() {
local size=$(du -m "$LOG_FILE" | cut -f1)
if [ $size -gt $MAX_LOG_SIZE ]; then
log "日志文件超过最大大小,进行轮转"
rotate_log
fi
}
# 日志轮转
rotate_log() {
local timestamp=$(date '+%Y%m%d_%H%M%S')
mv "$LOG_FILE" "$LOG_FILE.$timestamp"
touch "$LOG_FILE"
log "日志轮转完成"
}4. 调试注释
bash
#!/bin/bash
# 调试模式
DEBUG=false
# 调试输出函数
debug() {
if [ "$DEBUG" = true ]; then
echo "[DEBUG] $1"
fi
}
# 主程序
main() {
debug "开始执行程序"
# 执行一些操作
debug "执行操作 1"
# 操作 1 的代码
debug "执行操作 2"
# 操作 2 的代码
debug "程序执行完成"
}
# 运行主程序
main临时禁用代码
使用注释禁用代码
bash
#!/bin/bash
# 启用的代码
echo "Hello, World!"
# 临时禁用的代码
# echo "这行代码被禁用了"
# echo "这行代码也被禁用了"
# 再次启用的代码
echo "Goodbye, World!"使用多行注释禁用代码块
bash
#!/bin/bash
echo "Hello, World!"
: << 'DISABLED_CODE'
echo "这段代码被禁用了"
echo "可以包含多行"
echo "不会被执行"
DISABLED_CODE
echo "Goodbye, World!"注释的注意事项
1. 不要过度注释
bash
# 好的做法
# 计算两个数的和
result=$((a + b))
# 不好的做法
# 定义变量 result
# 使用算术运算符 +
# 计算 a 和 b 的和
# 将结果赋值给 result
result=$((a + b))2. 保持注释的准确性
bash
# 好的做法
# 计算两个数的积
result=$((a * b))
# 不好的做法
# 计算两个数的和
result=$((a * b)) # 注释与代码不符3. 注释应该解释为什么,而不是是什么
bash
# 好的做法
# 使用临时文件避免内存溢出
temp_file=$(mktemp)
# 不好的做法
# 创建临时文件
temp_file=$(mktemp)实用示例
示例1:完整的脚本注释
bash
#!/bin/bash
# ==============================================
# 脚本名称: backup.sh
# 功能描述: 备份指定目录到指定位置
# 使用方法: ./backup.sh <源目录> <目标目录>
# 作者: Your Name
# 创建日期: 2024-01-01
# 版本: 1.0
# ==============================================
# 配置变量
BACKUP_DATE=$(date '+%Y%m%d_%H%M%S')
LOG_FILE="/var/log/backup.log"
# 记录日志函数
log() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $message" >> "$LOG_FILE"
}
# 检查参数
if [ $# -ne 2 ]; then
echo "错误: 参数数量不正确"
echo "使用方法: $0 <源目录> <目标目录>"
exit 1
fi
# 检查源目录是否存在
if [ ! -d "$1" ]; then
echo "错误: 源目录不存在: $1"
log "错误: 源目录不存在: $1"
exit 1
fi
# 创建目标目录
mkdir -p "$2"
# 执行备份
log "开始备份: $1 -> $2"
cp -r "$1" "$2/backup_$BACKUP_DATE"
# 检查备份是否成功
if [ $? -eq 0 ]; then
log "备份成功"
echo "备份成功: $2/backup_$BACKUP_DATE"
else
log "备份失败"
echo "备份失败"
exit 1
fi示例2:函数注释
bash
#!/bin/bash
# 检查服务状态
# 参数: $1 - 服务名称
# 返回: 0 - 运行中, 1 - 未运行
check_service_status() {
local service="$1"
if systemctl is-active --quiet "$service"; then
return 0
else
return 1
fi
}
# 重启服务
# 参数: $1 - 服务名称
# 返回: 0 - 成功, 1 - 失败
restart_service() {
local service="$1"
systemctl restart "$service"
return $?
}
# 使用函数
if check_service_status "nginx"; then
echo "nginx 正在运行"
else
echo "nginx 未运行,尝试重启"
if restart_service "nginx"; then
echo "nginx 重启成功"
else
echo "nginx 重启失败"
fi
fi总结
注释的关键点:
- 单行注释:使用
#符号 - 多行注释:使用
: << 'EOF'语法 - 注释作用:解释代码、提供说明、标记待办事项
- 最佳实践:
- 解释代码功能
- 添加脚本说明
- 标记待办事项
- 解释复杂逻辑
- 注意事项:
- 不要过度注释
- 保持注释的准确性
- 注释应该解释为什么,而不是是什么
下一节我们将学习条件判断的使用。