我正在尝试用grep编写for循环。当grep返回一个值时,我想显示消息“running”。如果没有返回任何值,则显示“可用”。
我认为我的if语句有问题,但我找不到任何东西。
任何建议都将不胜感激。
#!/bin/sh
#JWR1.0, REL1.10
echo "Content-type: text/html"
echo ""
chk_port = 'ps -ef | grep "port $i -"'
for (( i=1; i<=5; i++ ))
do
if [[ $chk_port ]]; then
echo "Running - $i<br>"
else
echo "Available - $i<br>"
fi
done
echo "<br>"
# For debugging
ps -ef | grep "port 1 -"
示例输出:
Available - 1
Available - 2
Available - 3
Available - 4
Available - 5
apache 7706 7700 0 15:07 ? 00:00:00 grep port 1 -
答案 0 :(得分:1)
我想您的问题是,ps的输出中有没有 port $i
,但您的脚本认为它存在。
问题是,命令grep port $i -
也在ps -ef
的输出中,在调试输出中很明显。您可以使用ps -ef|grep foo
为了避免它,有一个技巧,只需做
chk_port=$(ps -ef | grep "[p]ort $i -")
例如:
kent$ ps -ef|grep nothing
kent 10226 4752 0 00:36 pts/2 00:00:00 grep --color=auto nothing
kent$ ps -ef|grep [n]othing
zsh: no matches found: [n]othing
您还可以检查grep(grep -q)的返回码以确定是否找到了模式。如果未找到匹配项,则grep返回1,否则返回0。