Bash 如何验证变量

Bash 如何验证变量,bash,loops,Bash,Loops,我创建了以下脚本 for i in $(ls /home/test); do health=$(curl -s http://192.168.1.100/api/stream_health/$i); if [ $health = "true" ] then echo "At `date` $i stream is running" else ps aux | grep -v grep | grep $(cat /root/bin/xproxy.conf | grep "$i" | cut -f3

我创建了以下脚本

for i in $(ls /home/test);
do health=$(curl -s http://192.168.1.100/api/stream_health/$i);
if [ $health = "true" ]
then echo "At `date` $i stream is running"
else
ps aux | grep -v grep | grep $(cat /root/bin/xproxy.conf | grep "$i" | cut -f3 -d":" | cut -c1-5) | awk '{print $2}' | xargs kill -9
fi
done;
问题是,如果在/root/bin/xproxy.conf中找不到$i,脚本将使用grep error命令退出。如果在/root/bin/xproxy.conf中找不到$I,我如何进行某种验证,然后跳过此循环并转到下一个循环。

这应该可以:

[[ $(grep $i /root/bin/xproxy.conf ]] || continue
1) grep可以在以下文件中找到表达式:
grep expresion file
。因此,您不需要使用:
cat文件| grep expresion

2.a)您可以使用&&运算符,它可以解释为“如果上一个命令成功(实际退出代码=0),则执行下一个命令

grep $i /root/bin/xproxy.conf && ps aux | grep -v grep | grep $(grep "$i" /root/bin/xproxy.conf  | cut -f3 -d":" | cut -c1-5) | awk '{print $2}' | xargs kill -9
2.b)另一种方式是在使用特殊变量执行grep后请求退出代码:

grep $i /root/bin/xproxy.conf &>/dev/null
if [ $? = 0 ]
then
    ps aux | grep -v grep | grep $(grep "$i" /root/bin/xproxy.conf  | cut -f3 -d":" | cut -c1-5) | awk '{print $2}' | xargs kill -9
fi

.
grep
在文件中找不到
$i
的值不应该终止该循环。由于缺少输入,它将导致
xargs
错误,但是循环应该继续正常,除非您启用了
set-e
或类似选项。
/root/bin/xproxy.conf
中的采样行是什么样子的?似乎有be许多优化范围。例如,
cat | grep
ps | grep-v grep | grep
grep | cut
等都可以进行优化。