我正在获取第一个脚本的输出,但无法获取以下脚本中语句if
第二部分的输出:if
#!/bin/ksh
err_abc=`grep -r "XYZ" /home |wc -l`
err_AB=`grep -r "XYZ" /home` > /dev/null 2>&1
err_ERR=`grep -r "ERROR" /home |wc -l`
err_eRR=`grep -r "ERROR" /home` > /dev/null 2>&1
if [ $err_abc -gt 0 ]
then
echo "$err_AB"
else
echo "No errors found"
if [ $err_ERR -gt 0 ]
then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
fi
答案1
您确定代码正在执行您认为它正在执行的操作吗?让我们缩进它以便我们可以更容易地看到逻辑:
if [ $err_abc -gt 0 ]; then
echo "$err_AB"
else
echo "No errors found"
if [ $err_ERR -gt 0 ]; then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
fi
当且仅当第一个块的测试为假时,您的第二个if
块才会执行。如果您希望在所有情况下都运行这两个测试,则需要重写:
if [ $err_abc -gt 0 ]; then
echo "$err_AB"
else
echo "No errors found"
fi
if [ $err_ERR -gt 0 ]; then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
另外,只有当第二个测试为假时,exit 0
您在最终if
语句中的子句才会被执行(如果有的话)。else
如果这不是您的意图,则应适当移动该声明。
答案2
您需要做很多额外的工作来设置变量:您要递归地 grep 4 次。您只需执行一次:
all_errs=$(grep -r -E "XYZ|ERROR" /home 2>/dev/null)
然后可以从该变量中检索其他信息
err_AB=$(grep "XYZ" <<< "$all_errs)
err_abc=$(wc -l <<< "$err_AB")
err_eRR=$(grep "ERROR" <<< "$all_errs")
err_ERR=$(wc -l <<<"$err_eRR")