You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本报错:unexpected token 'then'及'elif'问题求助

问题排查与解决

语法错误原因

你的脚本报错是因为Shell的if/elif语法规则:条件表达式闭合后,then必须与if/elif在同一行(用分号分隔),或者在条件行末尾添加反斜杠表示换行延续。你当前的写法中then单独成一行,且条件行末尾没有分号/反斜杠,Shell无法识别then属于if语句的一部分,因此抛出语法错误。

修正后的脚本

while true
do
  # Subscribe to relevant topics
  mosquitto_sub -h 192.168.1.37 -t "0_0" -t "0_1" | while read -r topic
  do
    # 注意:mosquitto_sub是订阅消息,不是监听客户端订阅事件,这里逻辑可能存在误解
    echo "Received message from topic: ${topic}"
    
    # Check the topic and redirect the subscription
    if [[ $topic == "0_0" ]]; then
      mosquitto_sub -h 192.168.30.xxx -t "$topic"  # 补充完整IP地址
    elif [[ $topic == "0_1" ]]; then
      mosquitto_sub -h 192.168.25.xxx -t "$topic"  # 补充完整IP地址
    fi
  done
  sleep 10 # Wait 10 seconds until reconnection
done

额外注意事项

  • IP地址完整性:脚本中192.168.30和192.168.25是不完整的IP,需要补充最后一段(比如192.168.30.1),否则mosquitto_sub无法连接到正确的MQTT broker。
  • 逻辑误区:mosquitto_sub的作用是订阅并接收指定topic的消息,而非监听客户端的订阅行为。你的注释提到"every time a client subscribes to a topic",如果要实现监听客户端订阅事件,需要使用MQTT的$SYS主题(比如$SYS/broker/subscribes/+/+),或者配置broker开启订阅日志后解析日志,当前脚本逻辑无法实现该需求。

内容的提问来源于stack exchange,提问作者Samuel Mikhael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:31