运行 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
(全部小写)。
以下是检查 bshell 脚本的结果https://www.shellcheck.net/。
PublicIP
与PUBLICIP=\"${PublicIP}\"
不匹配,publicIP
请改用。curl -H "Content-Type: application/json" -X POST -d "{"used": $used, "partition": $partition, "username": $USERNAME, "IP": $publicIP, "content": $msg_content}" $DISCORD_WEBHOOK_URL
PUBLICIP=\"${publicIP}\"
您可以在 Ubuntu 中安装 ShellChecksudo apt install shellcheck
并使用 ShellCheck 运行它,shellcheck test.sh
它将是一个非常方便的工具,用于检查您的 shell 脚本,因为它指向它发现的错误所在的每一行中的确切位置。