如何在for循环中grep成功

问题描述 投票:-2回答:2

为此奋斗...

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仅包含单个单词

谢谢!

loops for-loop variables grep skip
2个回答
0
投票

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

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

注意:ps aux | grep -i $i还将grep列为该过程之一。确保通过将其通过管道传递到另一个grep ps aux | grep -i $i | grep -v 'grep'

来排除该进程

0
投票

这是工作代码

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
}
© www.soinside.com 2019 - 2024. All rights reserved.