📜  Bash案例声明(1)

📅  最后修改于: 2023-12-03 14:59:30.413000             🧑  作者: Mango

Bash案例声明

Bash是Unix系统中的一种命令解释器,其可执行脚本文件的文件名后缀为.sh。Bash脚本可用于自动化系统管理、任务调度等一系列操作。下面是一些Bash案例声明,带您领略Bash在实际开发中的应用。

1. 自动化备份脚本

该脚本用于自动备份指定目录下的文件到指定的备份目录中,并且保留最近7天的备份,其他备份自动删除。示例代码如下:

#!/bin/bash

BACKUP_DIR="/var/backup/mysql/"
SOURCE_DIR="/var/lib/mysql/"
EXCLUDE_LIST="/root/exclude-list.txt"

# Create backup directory if it does not exist
mkdir -p $BACKUP_DIR

# Remove old backups
find $BACKUP_DIR -type f -mtime +7 -exec rm -f {} \;

# Backup files
rsync -a --delete \
      --exclude-from="$EXCLUDE_LIST" \
      $SOURCE_DIR $BACKUP_DIR

该脚本将MySQL数据库的数据目录/var/lib/mysql/备份到/var/backup/mysql/目录下,排除/root/exclude-list.txt中指定的文件或目录,保留最近7天的备份,其他备份自动删除。

2. 文件监控脚本

该脚本用于监控指定目录下的文件变化并进行相应的操作,如打印变化的文件名、发送邮件等。示例代码如下:

#!/bin/bash

WATCH_DIR="/root/watch/"
MAIL_TO="admin@example.com"

inotifywait -m -r -e modify,create,delete $WATCH_DIR |
while read file; do
  echo "File changed: $file"
  echo "Sending email to $MAIL_TO"
  echo "File changed on $(date)" | mail -s "File changed" $MAIL_TO
done

该脚本使用inotifywait命令监控/root/watch/目录下的文件变化,并在文件变化时打印文件名、发送邮件通知。

3. 日志分析脚本

该脚本用于对指定日志文件进行分析,如查找出现频率最高的IP、统计请求次数等。示例代码如下:

#!/bin/bash

LOG_FILE="/var/log/nginx/access.log"

# Top IPs by request count
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -n 10

# Top URLs by request count
awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -nr | head -n 10

# 404 errors
grep '" 404 ' $LOG_FILE

该脚本使用awk命令对Nginx的访问日志/var/log/nginx/access.log进行分析,输出出现频率最高的IP、访问URL和404错误。

4. 系统监控脚本

该脚本用于监控系统资源使用情况,如CPU、内存、网络等。示例代码如下:

#!/bin/bash

while true; do
  CPU=$(top -bn1 | grep '^%Cpu' | awk '{print $2+$4}')
  MEM=$(free | awk '/Mem/{printf("%.2f"), $3/$2 * 100.0}')
  NET=$(ifstat -i eth0 -qT 1 1 | tail -n 1 | awk '{print $1 "," $2}')
  echo "$(date +%F\ %T),CPU:$CPU,Memory:%$MEM,Network:in/out=$NET KB/s"
done

该脚本使用top命令监控CPU使用率,free命令监控内存使用率,ifstat命令监控网络带宽使用情况,并每秒输出一次监控结果。

Bash在实际开发中十分常用,可以方便地实现系统管理、任务调度、数据处理等多种操作。以上案例仅为Bash可能的应用范例,欢迎程序员们探索更多用途。