运行 test.sh 文件时出现语法错误“./test.sh: 36: 语法错误:文件结束意外(预期“done”)”

运行 test.sh 文件时出现语法错误“./test.sh: 36: 语法错误:文件结束意外(预期“done”)”

运行 test.sh 文件时出现此语法错误:

./test.sh: 36: Syntax error: end of file unexpected (expecting "done")

测试.sh:

#!/bin/sh

# WebHook
url="DiscordWebHook"
hostname="TestingSvr01"
PublicIP="My IP"

# check current disk usage
df -H | grep -vE '^Filesystem|tmpfs|cdrom|loop' | awk '{ print $5 " " $6 }' | while read output;

# assign variables
do
  #echo $output
  used=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
  USERNAME=\"${hostname}\"
  PUBLICIP=\"${PublicIP}\"
  msg_content=\"$message\"
  DISCORD_WEBHOOK_URL="${url}"

  # if disk reached the threshold, send a notification to Discord #Infra. 
  if [ $used -ge 85 ]; then
curl -H "Content-Type: application/json" -X POST -d "{\"used\": $used, \"partition\": $partition, \"username\": $USERNAME, \"IP\": $publicIP, \"content\": $msg_content}" $DISCORD_WEBHOOK_URL
  else
    echo "${output}  failed"
  fi
exit 0
Done

答案1

Done最后一行区分大小写。bash期望为done,因此请改用done(全部小写)。

以下是检查 bshel​​l 脚本的结果https://www.shellcheck.net/

在此处输入图片描述

PublicIPPUBLICIP=\"${PublicIP}\"不匹配,publicIP请改用。curl -H "Content-Type: application/json" -X POST -d "{"used": $used, "partition": $partition, "username": $USERNAME, "IP": $publicIP, "content": $msg_content}" $DISCORD_WEBHOOK_URLPUBLICIP=\"${publicIP}\"

您可以在 Ubuntu 中安装 ShellChecksudo apt install shellcheck并使用 ShellCheck 运行它,shellcheck test.sh它将是一个非常方便的工具,用于检查您的 shell 脚本,因为它指向它发现的错误所在的每一行中的确切位置。

相关内容