在使用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"
 
   |