执行Start-Batch.sh报line1语法错误:意外token`|'如何解决?
报错原因排查
- 直接报错原因:脚本第一行单独存在无意义的
|管道符,管道符必须用于连接前后两个命令,单独出现属于无效语法,shell解析第一行时直接触发syntax error near unexpected token|'`报错。 - 脚本还存在多个潜在语法错误,需同步修复:
- 单引号嵌套错误:给变量
a赋值时外层已经使用单引号,内层awk的{'print $2'}的单引号会提前截断外层字符串,导致语法解析混乱。 - if判断语法不规范:
if["${a:-0}" ==0 ]中[是shell内置命令,必须和后面的判断条件、末尾的]都用空格隔开,同时==两侧也需要加空格,否则会被识别为无效字符串报错。 - PID匹配逻辑冗余:多层ps+grep的组合容易匹配到grep自身进程,且如果出现多个匹配PID时判断逻辑会失效。
- 单引号嵌套错误:给变量
修复后的完整脚本
#!/bin/bash # 用pgrep直接获取对应进程PID,更简洁稳定 a=$(pgrep -f "SpringBoot.jar") echo "PID: $a" if [ "${a:-0}" == "0" ]; then nohup /opt/../java -Xms1g -Xmx3g -jar SpringBoot.jar & disown else echo "Already Job is running, Please stop the orginal process" fi
验证执行方法
- 给脚本添加执行权限:
chmod +x Start-Batch.sh - 执行前先校验语法合法性:
bash -n Start-Batch.sh,无输出即代表语法正常 - 直接执行脚本即可正常运行
内容的提问来源于stack exchange,提问作者Dinesh thiru
相关产品推荐
相关产品推荐

