在本文中,我们将深入探讨如何使用Shell脚本来执行操作并记录相关的日志信息。日志管理是系统管理和故障排查中的重要部分,而Shell脚本提供了一种自动化此过程的方法。以下是一个具体的实例,展示了如何创建一个包含日志功能的Shell脚本。 让我们分析提供的脚本`log_function.sh`: ```bash #!/bin/bash # 定义一个用于记录正确输出的日志函数 function log_correct() { DATE=$(date "+%Y-%m-%d %H:%M:%S") # 获取当前时间 USER=$(whoami) # 获取当前用户名 echo "${DATE} ${USER} execute $0 [INFO] $@" >> /var/log/log_info.log # 写入日志文件 } # 定义一个用于记录错误输出的日志函数 function log_error() { DATE=$(date "+%Y-%m-%d %H:%M:%S") USER=$(whoami) echo "\${DATE} \${USER} execute \$0 [INFO] \$@" >> /var/log/log_error.log # 写入错误日志文件 } # 定义一个通用的日志处理函数,根据命令执行结果决定调用哪个日志函数 function fn_log() { if [ $? -eq 0 ]; then # 检查上一条命令的返回值 log_correct "$@ sucessed!" # 如果成功,写入正确日志 echo -e "\033[32m $@ sucessed. \033[0m" # 使用颜色输出成功的消息 else log_error "$@ failed!" # 如果失败,写入错误日志 echo -e "\033[41;37m $@ failed. \033[0m" # 使用颜色输出失败的消息 exit 1 # 命令执行失败,退出脚本 fi } ``` 在这个脚本中,我们定义了三个关键函数: 1. `log_correct`:用于记录正常运行的命令,将日志信息写入`/var/log/log_info.log`。 2. `log_error`:用于记录执行失败的命令,将日志信息写入`/var/log/log_error.log`。 3. `fn_log`:这是一个通用的日志处理函数,它会检查上一条命令的执行状态(通过`$?`变量),然后根据结果调用`log_correct`或`log_error`。 在实际使用中,你可以将`fn_log`函数插入到任何需要执行的命令后面,以记录命令的执行情况。例如: ```bash fn_log "touch /tmp/testfile" ``` 这个命令将尝试创建一个名为`/tmp/testfile`的文件,并根据操作的结果向日志文件写入相应的信息。 现在,让我们看看调用这个脚本的示例`log_exec.sh`: ```bash #!/bin/sh # 检查并加载日志功能脚本 if [ -e /mnt/log_function.sh ]; then source /mnt/log_function.sh else echo -e "\033[41;37m /mnt/log_function.sh is not exist. \033[0m" exit 1 fi USER=$(whoami) # 检查脚本是否由root用户执行 if [ $USER == root ]; then log_correct "execute by root" else log_error "execute by ${USER}" echo -e "\033[41;37m you must execute this script by root. \033[0m" exit 1 fi # 执行一个操作并记录日志 if [ -e /var/log/message ]; then echo 0 > /var/log/message fn_log "echo 0 > /var/log/message" fi ``` 这个脚本首先检查`log_function.sh`是否存在,如果存在则将其源代码导入,然后检查脚本是否由`root`用户执行。如果满足这些条件,它将执行一个简单的命令(如清空`/var/log/message`),并使用`fn_log`记录操作。 总结一下,这个实例教给我们如何利用Shell脚本实现: - 自定义日志函数,区分正常和异常情况。 - 使用`$?`检查命令的返回值以确定执行状态。 - 利用`$@`传递参数给函数,以便记录命令本身。 - 使用颜色增强命令执行结果的可视性。 - 结合`date`命令生成精确的日期和时间戳,便于追踪日志。 - 通过`source`命令将一个脚本的功能导入到另一个脚本中。 - 在脚本中进行权限检查,确保以正确的用户身份运行。 通过学习和应用这些技巧,你可以编写更健壮、更易维护的Shell脚本,同时提高系统的可追溯性和问题诊断能力。
- 粉丝: 5
- 资源: 950
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助