让整个脚本运行,记录任何故障,但是在AIX中结束之前不要退出

时间:2015-06-01 20:37:02

标签: shell unix aix

所以这可能有点复杂,我想要做但是忍受我。我正在尝试使用多个未嵌套的if语句来运行脚本。 if语句基本上确定是否存在某些内容,如果不存在则我希望它记录错误。我不希望脚本在出现错误时退出,直到它应该显示整个脚本的哪些部分没有成功。如果整个脚本中没有错误,我基本上希望它说“Good to go”或者其他什么。

这是我到目前为止的一些内容。

#Checks if foo exists as a directory
if [  -d "/foo" ]; then
#foo exists as a directory
echo "foo exists"
else
  #foo does not exist
echo "foo does not exist."
exit 1
fi

#If the directory above exists create the user

id -u bar > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo "bar user exists"
else
        echo "bar user doesn't exist"
exit 1
fi

现在,如果其中一个退出代码为1,它将退出,但我要做的是运行它们,并让脚本的底部告诉我哪个部分失败然后退出如果有任何失败,则为0或1。我想过把它写成

if [ -d /foo && -d /bar ]; 
then 
echo "All's good"
exit 0
elif  [ -d /foo ]; 
then
echo "A is fine!"
elif [ -d /bar ];
echo "B is fine"
elif [ ! -d /foo  ];
echo "A is not fine"
elif [ ! -d /bar ];
echo "B is not fine" 
fi

问题在于我认为这不是很优雅,我不能只写那样的if语句。我曾想过使用trap语句,嵌套if语句,并计算脚本获取的错误数并将其分配给变量。问题是,这些似乎都不合适,因为我必须将整个事件编码为trap并使用if语句我遇到的问题与我在这里相同,这个变量引导我使用Linux所拥有的功能,但AIX没有,这就是我正在编写的功能。

1 个答案:

答案 0 :(得分:0)

为它创建一个返回错误数量的函数:

check_conditions() {
   errors=0
   if  [ -d /foo ]; then
      echo "A is fine!"
   else
      echo "A is not fine"
      (( errors = errors + 1 ))
   fi
   if [ -d /bar ]; then
      echo "B is fine"
   else
      echo "B is not fine"
      (( errors = errors + 1 ))
   fi
   if [ ${errors} -eq 0 ]; then 
      echo "All's good"
   fi
   return ${errors}
}

# main
check_conditions
nr_errors=$?
if [ ${nr_errors} -eq 0 ]; then
   echo "Good to go"
else
   echo "O dear, ${nr_errors} errors found"
fi
exit ${nr_errors}

当你有很多或者dirs时,你可以制作另一个处理dirs的函数或者在循环for dir in /foo /bar; do中检查dirs。

使用bash或ksh运行代码。