Linux 内联if shell脚本
是否可以在命令行中执行shell脚本,如下所示:Linux 内联if shell脚本,linux,shell,scripting,sh,Linux,Shell,Scripting,Sh,是否可以在命令行中执行shell脚本,如下所示: counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true"; > 上面的示例不起作用,我只得到字符,而不是我试图得到的结果,即“true” 当我执行ps-ef | grep-c“myApplication时,我得到1个输出。是否可以从脚本中的一行创建结果?谢谢是,语法问题已修复 这几乎奏效了。正确的语法是: counter=`ps
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>
上面的示例不起作用,我只得到
字符,而不是我试图得到的结果,即“true”
当我执行ps-ef | grep-c“myApplication
时,我得到1个输出。是否可以从脚本中的一行创建结果?谢谢是,语法问题已修复
这几乎奏效了。正确的语法是:
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
但是请注意,在涉及
ps
和grep
的此类表达式中,grep
通常会匹配自身,因为字符“grep-cmyapplication”显示在ps列表中。有几种方法可以解决这一问题,其中之一是grep表示[M]之类的内容yapplication
它不起作用,因为您错过了结束if
语句的fi
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
另外,请注意中提到的ps-ef | grep…
匹配自身的问题
更新
事实上,通过使用pgrep
,您可以做得更好:
if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi
其他回复已经解决了您的语法错误,但我强烈建议您将行更改为: test $(ps -ef | grep -c myApplication) -eq 1 && echo true 测试$(ps-ef | grep-c myApplication)-eq 1和echo true 如果您没有尝试将出现次数限制为正好1(例如,如果您只是尝试检查输出行myApplication,并且您希望它不会出现多次),则只需执行以下操作: ps -ef | grep myApplication > /dev/null && echo true ps-ef | grep myApplication>/dev/null&&echo true (如果需要设置变量计数器以供以后处理,则这两种解决方案都不适用。)
使用短路和&&and | |运算符通常比嵌入if/then构造要清晰得多,尤其是在一行中。我努力将多行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
)
FRA_PARAM=“'db_recovery_file_dest'”
FRA=$(
sqlplus-S“/as sysdba”我正在使用MacOS,下面的操作非常好
$ counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true";fi;
真的
如果pgrep myApplication 2>/dev/null,则在[和之前]之后需要空格。则…
不需要括号或命令替换"也不需要,因为除非你告诉它,否则pgrep不会匹配自身。如果他只想匹配一个实例,这将不准确。关于pgrep不匹配自我的好观点。更新的示例。谢谢。在第一个代码示例中,之后的半色是否位于错误的位置?-c
对于pgrep,在le处不是有效的开关ast用于procps的3.2.8版。它在我的情况下不起作用…您需要;然后而不是然后;