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

执行ssh命令后If条件判断报then/if不匹配错误如何解决?

Shell 脚本if判断执行ssh命令报错解决方案

核心错误原因

  • 测试括号[、]前后缺少必要空格:[是Shell内置命令而非语法标记,必须与后续判断条件用空格隔开,]作为命令结束参数,前面也必须加空格,原有写法[$? -eq 0]不符合语法要求。
  • 控制流关键字缺少分隔符:then、else、fi属于Shell流程控制关键字,和前面的代码段之间必须用分号或者换行分隔,原有代码中echo "ok"之后直接跟else、邮件命令结束后直接跟fi,均未设置分隔符,会触发语法报错。

修正后的代码示例

基于原有逻辑修改版本

ssh $p_ftp_user@$IP $SPATH
if [ $? -eq 0 ]; then
    echo "ok"
else
    echo "test" | mailx -r test@gmail.com -s "File Failure" $v_email_id
fi

如果需要写为单行格式,需补全所有分隔符:

ssh $p_ftp_user@$IP $SPATH; if [ $? -eq 0 ]; then echo "ok"; else echo "test" | mailx -r test@gmail.com -s "File Failure" $v_email_id; fi

更推荐的简化写法

直接将ssh命令作为if的判断条件,无需单独读取$?,可避免$?被中间插入的其他命令意外覆盖的问题:

if ssh $p_ftp_user@$IP "$SPATH"; then
    echo "ok"
else
    echo "test" | mailx -r test@gmail.com -s "File Failure" $v_email_id
fi

注意:如果$SPATH是包含特殊字符、管道、空格的复合命令,建议将ssh的执行参数用双引号包裹,避免本地Shell提前解析变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:18:03