是否可以在命令行中执行如下shell脚本:
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true"; >
上面的例子不起作用,我只得到>字符,而不是我试图得到的结果,这是“真”当我执行ps -ef | grep -c "myApplication时,我得到1个输出。是否可以从脚本中的单行创建结果?谢谢
>
ps -ef | grep -c "myApplication
u7up0aaq1#
它不起作用,因为您错过了fi来结束您的if语句。
fi
if
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
您可以使用以下方法进一步缩短它:
if [ $(ps -ef | grep -c "myApplication") -eq 1 ]; then echo "true"; fi
此外,请注意@DigitalRoss的回答中提到的ps -ef | grep ...匹配自身的问题。
ps -ef | grep ...
实际上,使用pgrep可以做得更好:
pgrep
if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi
balp4ylt2#
其他回复已经解决了您的语法错误,但我强烈建议您将该行更改为:
test $(ps -ef | grep -c myApplication) -eq 1 && echo true
如果您不想将出现次数限制为正好1(例如,如果您只是尝试检查输出行myApplication,并且希望它不会出现多次),则只需执行以下操作:
ps -ef | grep myApplication > /dev/null && echo true
(If您需要为以后的处理设置变量计数器,则这两种解决方案都不适用。)使用短路的&& and||运算符通常比嵌入if/then结构更清晰,尤其是在单行程序中。
mwyxok5s3#
这 * 几乎 * 成功了。正确的语法是:
但是请注意,在这种包含ps和grep的表达式中,grep通常会匹配自身,因为字符“grep -c Myapplication”会出现在ps列表中。有几种方法可以解决这个问题,其中之一是对[M]yapplication这样的字符进行grep。
ps
grep
[M]yapplication
x3naxklr4#
我正在使用Mac OS和以下工作非常好
$ counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true";fi;
真的之后[和之前]需要空间
vd2z7a6w5#
我很难将多行feed合并到命令中,并将其结果放入一个变量(而不是一个文件)中,然后提出了这个解决方案:
FRA_PARAM="'db_recovery_file_dest'" FRA=$( sqlplus -S "/as sysdba" <<EOF set echo off head off feed off newpage none pages 1000 lines 1000 select value from v\$parameter where name=$FRA_PARAM; exit; EOF )
请注意,单引号单词被替换,因为否则我会收到它自动替换为双引号... ksh,HP-UX。希望这对其他人也有帮助。
5条答案
按热度按时间u7up0aaq1#
它不起作用,因为您错过了
fi
来结束您的if
语句。您可以使用以下方法进一步缩短它:
此外,请注意@DigitalRoss的回答中提到的
ps -ef | grep ...
匹配自身的问题。更新
实际上,使用
pgrep
可以做得更好:balp4ylt2#
其他回复已经解决了您的语法错误,但我强烈建议您将该行更改为:
如果您不想将出现次数限制为正好1(例如,如果您只是尝试检查输出行myApplication,并且希望它不会出现多次),则只需执行以下操作:
(If您需要为以后的处理设置变量计数器,则这两种解决方案都不适用。)
使用短路的&& and||运算符通常比嵌入if/then结构更清晰,尤其是在单行程序中。
mwyxok5s3#
是,已修复语法问题
这 * 几乎 * 成功了。正确的语法是:
但是请注意,在这种包含
ps
和grep
的表达式中,grep
通常会匹配自身,因为字符“grep -c Myapplication”会出现在ps列表中。有几种方法可以解决这个问题,其中之一是对[M]yapplication
这样的字符进行grep。x3naxklr4#
我正在使用Mac OS和以下工作非常好
真的
之后[和之前]需要空间
vd2z7a6w5#
我很难将多行feed合并到命令中,并将其结果放入一个变量(而不是一个文件)中,然后提出了这个解决方案:
请注意,单引号单词被替换,因为否则我会收到它自动替换为双引号... ksh,HP-UX。
希望这对其他人也有帮助。