SoF2 shell脚本运行报错[1: command not found]求助
解决Shell脚本中
[1: command not found错误 嘿,这个错误我可太熟了!问题出在你if语句里的方括号和变量之间没有添加空格——shell对空格的要求可是相当严格的哦。
错误根源
在shell中,[其实是一个内置命令(和test命令等价),它需要和后面的参数用空格分隔开。你写的["$SERVER" != "0"]会被shell解析成一个名为["$SERVER"的命令,当$SERVER的值为1时,就变成了[1,系统自然找不到这个命令,于是抛出[1: command not found的错误。
修正后的完整脚本
SERVER=$(ps -ef | grep -v grep | grep -c sof2ded) if [ "$SERVER" != "0" ]; then echo "Already Running, exiting" exit else echo "Starting up the server..." cd /home/sof2/ /home/sof2/crons/start.sh > /dev/null 2>&1 fi
关键改动说明
- 在
[后面添加了空格,]前面也添加了空格,确保[命令能正确识别后续参数 - 把老式的反引号命令替换
`ps...`改成了更推荐的$()语法,可读性更好,还支持嵌套场景
额外优化建议
如果你的脚本运行在Bash环境下,还可以用[[ ]]替代[ ],它不需要担心变量为空时的引号问题,语法更灵活也更安全:
SERVER=$(ps -ef | grep -v grep | grep -c sof2ded) if [[ $SERVER != 0 ]]; then echo "Already Running, exiting" exit else echo "Starting up the server..." cd /home/sof2/ /home/sof2/crons/start.sh > /dev/null 2>&1 fi
另外,检查进程的方式还有更简洁可靠的方案,比如用pgrep直接过滤进程名,避免手动处理grep自身的干扰:
if pgrep sof2ded > /dev/null; then echo "Already Running, exiting" exit else echo "Starting up the server..." cd /home/sof2/ /home/sof2/crons/start.sh > /dev/null 2>&1 fi
内容的提问来源于stack exchange,提问作者user3927399
相关产品推荐
相关产品推荐

