我想用 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”或更大值。)