Loops 如何在for循环中获得成功
与此抗争Loops 如何在for循环中获得成功,loops,for-loop,variables,grep,skip,Loops,For Loop,Variables,Grep,Skip,与此抗争 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 块只是挂起-我无法捕捉成功/失败的格雷普 如果在serv
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
块只是挂起-我无法捕捉成功/失败的格雷普
如果在services.txt中找不到字符串。。。脚本挂起。。。如果找不到,我希望grep跳过它
services.txt只包含一个单词
谢谢 脚本挂起的原因是grep-q$i命令正在等待输入。您可以尝试在shell中单独运行该命令,并验证它是否提示输入 将if语句中的命令更改为ps aux | grep-i$i可以解决您的问题
注:ps aux | grep-i$i也将grep列为流程之一。确保通过管道将该流程排除到另一个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
}
谢谢Vijay-我后来意识到了这一点,但这仍然是挑战-感谢您的时间和投入。我将在下面发布工作代码,通过它,它将告诉你一些问题。Ed,非常感谢你,这是一个很好的工具和帮助。我上了年纪,从来没有对那些新方法感兴趣,因为我的方法很有效。但这解释了如何以及为什么要这样做。非常感谢