shell脚本模块集合
# 日志模块
#!/usr/bin/env bash
current_time=$(date +%Y-%m-%d)
logfile="1_${current_time}.log"
if [ ! -f "$logfile" ];then
touch $logfile
fi
log_message(){
local message="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') $message" | tee -a "$logfile"
}
log_message "正在测试001"
log_message "003"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 进度条模块
#!/usr/bin/env bash
current_time=$(date +%Y-%m-%d)
logfile="1_${current_time}.log"
if [ ! -f "$logfile" ];then
touch $logfile
fi
log_message(){
local message="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') $message" | tee -a "$logfile"
}
log_message "正在测试001"
log_message "003"
[root@localhost ~]# cat progress_bar.sh
#!/bin/bash
progress_bar(){
# 当前进度偏移量
local process=$1
# 总进度
local total=$2
# 进度条长度
local width=50
# 当前进度百分比
local percent=$((process * 100 / total))
# 填充多少个 '#'
local filled=$((process * width / total))
# 进度条字符串
local bar=$(printf "%${filled}s" | tr ' ' '#')
# 进度条后面的空格
local empty=$(printf "%$((width - filled))s")
# 打印进度条
printf "\r[%-${width}s] %3d%%" "$bar$empty" "$percent"
}
total=100
for ((i = 1; i <= total; i++)); do
sleep 0.05
progress_bar "$i" "$total"
done
echo -e "\n completed!"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
使用示例
#!/bin/bash
backup_database() {
local database=$1
local total_steps=3
local current_step=0
((current_step++))
progress_bar "$current_step" "$total_steps"
mysqldump -u root -p "$database" > "${database}_backup.sql"
((current_step++))
progress_bar "$current_step" "$total_steps"
gzip "${database}_backup.sql"
((current_step++))
progress_bar "$current_step" "$total_steps"
mv "${database}_backup.sql.gz" /backup/directory/
}
backup_database "mydatabase"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 配置文件管理模块
#!/bin/bash
# 配置文件备份
backup_config() {
local config_file=$1
local backup_dir="${2:-/etc/config_backups}"
local timestamp=$(date +"%Y%m%d_%H%M%S")
# 确保备份目录存在
mkdir -p "$backup_dir"
# 创建备份
cp "$config_file" "${backup_dir}/$(basename "$config_file")_${timestamp}"
}
# 配置文件修改
update_config() {
local config_file=$1
local key=$2
local value=$3
# 备份原文件
backup_config "$config_file"
# 使用sed修改配置
sed -i "s|^$key.*|$key=$value|g" "$config_file"
}
# 使用示例
backup_config "/etc/nginx/nginx.conf"
update_config "/etc/environment" "HTTP_PROXY" "http://proxy.example.com:8080"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 网络检测模块
#!/bin/bash
# 网络连接检测
check_network() {
local host=${1:-8.8.8.8}
local timeout=${2:-5}
# 尝试ping
if ping -c 1 -W "$timeout" "$host" &> /dev/null; then
echo "网络连接正常"
return 0
else
echo "网络连接异常"
return 1
fi
}
# 端口检测
check_port() {
local host=$1
local port=$2
if nc -z -w5 "$host" "$port"; then
echo "端口 $port 开放"
return 0
else
echo "端口 $port 关闭"
return 1
fi
}
# 使用示例
check_network
check_port "example.com" 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 彩色输出函数模块
#!/bin/bash
# 文本颜色定义
COLOR_RED='\033[0;31m'
COLOR_GREEN='\033[0;32m'
COLOR_YELLOW='\033[0;33m'
COLOR_BLUE='\033[0;34m'
COLOR_PURPLE='\033[0;35m'
COLOR_CYAN='\033[0;36m'
COLOR_WHITE='\033[0;37m'
# 亮色系列
LIGHT_RED='\033[1;31m'
LIGHT_GREEN='\033[1;32m'
LIGHT_YELLOW='\033[1;33m'
LIGHT_BLUE='\033[1;34m'
LIGHT_PURPLE='\033[1;35m'
LIGHT_CYAN='\033[1;36m'
LIGHT_WHITE='\033[1;37m'
# 背景颜色
BG_RED='\033[41m'
BG_GREEN='\033[42m'
BG_YELLOW='\033[43m'
BG_BLUE='\033[44m'
BG_PURPLE='\033[45m'
BG_CYAN='\033[46m'
# 重置颜色
COLOR_RESET='\033[0m'
#!/bin/bash
# 系统资源彩色输出
monitor_system_resources() {
# CPU使用率
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
local cpu_color=""
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
cpu_color="$COLOR_RED"
elif (( $(echo "$cpu_usage > 50" | bc -l) )); then
cpu_color="$COLOR_YELLOW"
else
cpu_color="$COLOR_GREEN"
fi
# 内存使用率
local memory_usage=$(free | awk '/Mem:/ {printf "%.2f", $3/$2 * 100}')
local memory_color=""
if (( $(echo "$memory_usage > 80" | bc -l) )); then
memory_color="$COLOR_RED"
elif (( $(echo "$memory_usage > 50" | bc -l) )); then
memory_color="$COLOR_YELLOW"
else
memory_color="$COLOR_GREEN"
fi
# 输出带颜色的监控信息
echo -e "CPU使用率: ${cpu_color}${cpu_usage}%${COLOR_RESET}"
echo -e "内存使用率: ${memory_color}${memory_usage}%${COLOR_RESET}"
}
print_color() {
local color=$1
local message=$2
echo -e "${color}${message}${COLOR_RESET}"
}
# 状态输出函数
print_status() {
local status=$1
local message=$2
case "$status" in
"success")
print_color "$COLOR_GREEN" "[✓] $message"
;;
"warning")
print_color "$COLOR_YELLOW" "[!] $message"
;;
"error")
print_color "$COLOR_RED" "[✗] $message"
;;
"info")
print_color "$COLOR_BLUE" "[*] $message"
;;
*)
echo "$message"
;;
esac
}
# 网络连接状态彩色输出
check_network_status() {
local host=${1:-baidu.com}
if ping -c 1 "$host" &> /dev/null; then
print_status "success" "网络连接正常"
else
print_status "error" "网络连接失败"
fi
}
# 使用示例
monitor_system_resources
check_network_status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109


上次更新: 2025/05/13, 15:00:35
← 批量拿取多台服务器的日志文件 指针→