执行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
相关产品推荐
相关产品推荐

