抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

在使用Shell 编写脚本时,有时需要输出HTML语句,但是由于Shell 是逐行执行的,因此需要使用特殊的方法来实现换行输出HTML语句。

以下是几种常用的方法:

  1. 使用echo -e 命令:
    可以使用echo -e 命令来输出带有换行符的HTML语句。例如:

    1
    echo -e "<html>\n<body>\n<h1>Hello, World</h1>\n</body>\n</html>"

    这样就可以在Shell 中输出带有换行符的HTML语句。

  2. 使用printf 命令:
    可以使用printf 命令来输出带有换行符的HTML语句。例如:

    1
    printf "<html>\n<body>\n<h1>Hello, World</h1>\n</body>\n</html>"

    同样可以在Shell 中输出带有换行符的HTML语句。

但是,在 Shell 脚本中,printf 可以解析换行符 \n 以及其他转义字符,例如制表符 \t,但不能自动解析反斜杠 \ 本身。简单来说:

  • \n 作为换行符,是 printf 能解析的特殊字符。
  • \ 本身不会被解释成转义字符,它需要结合其他字符(例如 \n)才能具有特殊的含义。

例如

1
2
3
4
5
6
7
8
9
root@ubuntu:/data/monitor# printf   "<html>\n<body>\n"  \  "<h1>Hello, World</h1>\n</body>\n</html>"
<html>
<body>
root@ubuntu:/data/monitor# echo -e "<html>\n<body>\n" \ "<h1>Hello, World</h1>\n</body>\n</html>"
<html>
<body>
<h1>Hello, World</h1>
</body>
</html>

最后整理一个简单的shell巡检脚本

查看代码
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
#!/bin/bash

# 获取内存使用情况
get_memory() {
free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'
}

# 获取根目录的磁盘使用情况
get_disk() {
df -h | awk '$NF=="/"{printf "%s\t\t", $5}'
}

# 检查/data目录是否挂载
get_disk_data() {
if mountpoint -q /data; then
df -h | awk '$NF=="/data"{printf "%s\t\t", $5}'
else
echo "未挂载\t\t"
fi
}

# 获取CPU负载情况
get_cpu() {
top -bn1 | grep "load average:" | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'
}


# 发送钉钉通知
send_dingtalk_message() {
local message="$1"
local webhook_url="https://oapi.dingtalk.com/robot/send?access_token="

curl -X POST "$webhook_url" \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"title": "服务器监控报告",
"text": "'"$message"'"
}
}'
}

# 获取系统信息
MEMORY=$(get_memory)
DISK=$(get_disk)
DISK_DATA=$(get_disk_data)
CPU=$(get_cpu)
HOST_IP=$(hostname -I | awk '{print $1}')
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 打印表头
#printf "Memory\t\tDisk\t\tDisk_Data\t\tCPU\n"
# 打印结果
# echo -e "$MEMORY$DISK$DISK_DATA$CPU"
# 构建消息内容
MESSAGE=$(echo -e "<font color='#FFA500'>[服务器巡检] [$HOST_IP] </font> 开始啦.......\n\n" \
"--- \n\n" \
"<font color='#708090' size=2>巡检时间:$CURRENT_TIME</font>\n\n" \
"<font color='#778899' size=2>内存占用:$MEMORY</font>\n\n" \
"<font color='#778899' size=2>根磁盘占用:\n$DISK</font>\n\n" \
"<font color='#778899' size=2>Data磁盘占用:\n$DISK_DATA</font>\n\n" \
"<font color='#778899' size=2>CPU负载:\n$CPU</font>\n\n" \
"--- \n\n")
# 发送钉钉通知
send_dingtalk_message "$MESSAGE"

评论