Bash unix脚本有问题

Bash unix脚本有问题,bash,unix,Bash,Unix,下面是我的脚本,每次我运行它时,它都会进入其他部分。当我运行TEST2EVAL命令时,它会给出1 #!/bin/sh TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l' if [ "$TEST2EVAL" = 1 ] then java -jar /path/to/jar & else echo "Running" fi 为了将命令的输出保存在变量中,必须将命令用反勾(`)括起来,而不是单引号(')。因此,将脚本的第二行

下面是我的脚本,每次我运行它时,它都会进入其他部分。当我运行TEST2EVAL命令时,它会给出
1

#!/bin/sh
TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l'
if [ "$TEST2EVAL" = 1 ]
then
java -jar /path/to/jar &
else
echo "Running"
fi

为了将命令的输出保存在变量中,必须将命令用反勾(
`
)括起来,而不是单引号(
'
)。因此,将脚本的第二行更改为:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l`

为了将命令的输出保存在变量中,必须将命令用反勾(
`
)括起来,而不是单引号(
'
)。因此,将脚本的第二行更改为:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l`

您在命令替换中使用了错误的引号:不是单引号:

TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l'
但是反报价:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l`

更好的方法是使用
TEST2EVAL=$(ps auxf | grep some.jar | grep-v grep | wc-l)
。更清楚的是,所有与POSIX兼容的shell都支持它,并且在必要时可以更轻松地嵌套它。

您在命令替换中使用了错误的引号:不是单引号:

TEST2EVAL='ps auxf | grep some.jar | grep -v grep | wc -l'
但是反报价:

TEST2EVAL=`ps auxf | grep some.jar | grep -v grep | wc -l`

更好的方法是使用
TEST2EVAL=$(ps auxf | grep some.jar | grep-v grep | wc-l)
。它更清晰,得到所有POSIX兼容shell的支持,并且在必要时可以更容易地嵌套。

假设您正在尝试找出是否有任何进程在其命令行上运行
some.jar
,您可能需要:

if pgrep -f some.jar; then
    echo running;
else
    echo not running;
fi

假设您正试图找出是否有任何进程在其命令行上使用
some.jar
运行,您可能需要:

if pgrep -f some.jar; then
    echo running;
else
    echo not running;
fi

是的,试图找到一个进程,如果它没有运行,想启动它!现在开始工作了@sssV应该指出的是,这不是在测试使用该jar的
java
进程。任何触摸该jar(或任何其他同名文件)的操作都会触发“已在运行”检测。是的,将使用唯一的名称,并将此脚本用于cronjobyes,尝试查找进程,如果进程未运行,则希望启动它!现在开始工作了@sssV应该指出的是,这不是在测试使用该jar的
java
进程。任何接触到该jar(或任何其他同名文件)的内容都会导致“已在运行”检测失败。是的,将使用唯一的名称,并将此脚本用于cronjob