我编写了以下shell脚本:
#!/bin/ksh
main()
{
echo 'Checking if process is running...'
if [ [ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l] != 0 ]; then
echo "startEventProcessorScript is not running"
nohup /apps/fasigw/test/bin/startEventProcessor &
fi
echo '******************************************************************'
echo ' Script started successfully '
echo '******************************************************************'
}
main $*
当我执行上述脚本时,收到以下错误消息:
Checking if process is running...
main[3]: test: ] missing
wc: illegal option -- ]
usage: wc [-c|-m] [-lw] [name ...]
我无法解决此问题。 startEventProcessor 是一个位于path / apps / fasigw / test / bin中的脚本。请帮忙
答案 0 :(得分:3)
要在if
语句中获取命令的输出,您应该使用command substitution,即使用$(...)
代替[..]
。
if [ $(ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l) != 0 ]
请注意,这可以简化为:
if [ $(pgrep -cf "Djava.security.auth.login.config") != 0 ]
或:
if ps -ef | grep -q "[D]java.security.auth.login.config"; then
("[D]java..."
中的括号是经常用来确保grep命令与其自己的进程不匹配的技巧。)