在使用Shell 编写脚本时,有时需要输出HTML语句,但是由于Shell 是逐行执行的,因此需要使用特殊的方法来实现换行输出HTML语句。
以下是几种常用的方法:
使用echo -e 命令:
可以使用echo -e 命令来输出带有换行符的HTML语句。例如:
1
| echo -e "<html>\n<body>\n<h1>Hello, World</h1>\n</body>\n</html>"
|
这样就可以在Shell 中输出带有换行符的HTML语句。
使用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"
|