繁体   English   中英

如何 grep 在 for 循环中成功

[英]How to grep success in a for loop

正在为此苦苦挣扎……

for i in `cat services.txt`
do
if ! grep -q $i; then
echo " $i Is NOT Running"
else
echo " Checking $i on `hostname`..."
ps aux | grep -i $i | awk '{print $1, $11}'| cut -d' ' -f1-2| sort
echo -e " "
sleep 4
fi
done

该块只是挂起 - 我无法捕捉 grep 的成功/失败

如果未找到 services.txt 中的字符串...脚本挂起...如果未找到 grep 则跳过它

services.txt 仅包含单个单词

谢谢!

您的脚本挂起的原因是因为命令grep -q $i正在等待输入。 您可以尝试在 shell 中单独运行该命令,并验证它是否提示输入。

将命令更改为ps aux | grep -i $i if 语句中的ps aux | grep -i $i应该可以解决您的问题。

注意: ps aux | grep -i $i ps aux | grep -i $i列出 grep 也作为进程之一。 确保通过管道将其排除在另一个 grep ps aux | grep -i $i | grep -v 'grep' ps aux | grep -i $i | grep -v 'grep'

这是工作代码

checkservices() {
cat >$HOME/services.txt <<EOF
ganglia
hbase
hdfs
hive
hue
livy
mapred
test-missing-service
mysql
oozie
presto
spark
yarn
zeppelin
EOF

for i in `cat $HOME/services.txt`
do 
if `ps -ef  | grep ^$i | grep -v grep >/dev/null`
then 
i=$(echo "$i" | awk '{print toupper($0)}')
echo "$i -- is running on `hostname`"
echo ""
sleep 2
else 
i=$(echo "$i" | awk '{print tolower($0)}')
echo "$i -- IS NOT running on `hostname` error"
echo ""
fi
done
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM