Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 内联if shell脚本_Linux_Shell_Scripting_Sh - Fatal编程技术网

Linux 内联if 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

是否可以在命令行中执行shell脚本,如下所示:

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版。它在我的情况下不起作用…您需要
;然后
而不是
然后;