Bash 脚本有问题

Bash 脚本有问题

我想用 bash 编写小脚本。

请求:我有一个在一台服务器上运行的 WAS 应用程序,它包含许多正在运行的 jvm。

现在我想编写一个脚本,记录所有 jvm 正在运行什么以及所有 jvm 停止什么,并将其存储在一个 txt 文件中。

我已经写了一些如下的脚本。

但是当我运行某些 jvms 状态时无法显示在 txt 文件中。

请你帮助我好吗?

if [ -n  `grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt ` ]; then

    echo "TNT_Stg_AppSrv01  status UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "TNT_Stg_AppSrv01  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi



if [ -n  `grep jvm3  /tmp/Rajesh/log.txt ` ]; then

    echo "jvm3 status is UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "jvm3  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStopStatus.html
fi

if [ -n `grep jvm1  /tmp/Rajesh/log.txt ` ]; then

    echo "jvm1 status is UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "jvm1  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi

答案1

例如第一行的这一部分:

grep TNT_Stg_AppSrv01 /tmp/Rajesh/log.txt

不打印任何内容,就像 grep 找不到搜索字符串的情况一样,那么您将有效地拥有

如果 [ -n ];则

... 在脚本的第一行 - 因为它正在运行。

"将您正在检查的字符串的结尾放在if- 中。

例如

如果 [ -n "`grep TNT_Stg_AppSrv01 /tmp/Rajesh/log.txt`" ]; 然后

... 可能不会效果更好。

我还建议使用$( command )反引号。
我相信它更便携 - 也更容易阅读。

答案2

您在条件中使用-n,它检查字符串的长度(在本例中是 grep 命令的输出)。

最好使用返回代码,这是的默认行为if,即:

if [ grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt ]; then   
    echo "TNT_Stg_AppSrv01  status UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html    
  else    
    echo "TNT_Stg_AppSrv01  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi

来自 grep 的手册页:

如果找到所选行,则退出状态为 0,如果未找到,则退出状态为 1。如果发生错误,则退出状态为 2。(注意:POSIX 错误处理代码应检查“2”或更大值。)

相关内容