| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > SHELL

使用Bash shell脚本进行功能测试

时间:2006-12-14 11:40:19  来源:IBM中国  作者:Angel Rivera

7. 尝试提供“usage”反馈 FTSLinux联盟
脚本中使用 "usage" 语句是个好主意,它用来说明如何使用脚本。 FTSLinux联盟

# ----------------------------
# Subroutine to echo the usage
# ----------------------------
usage()
{
 echo "USAGE: $CALLER [-h] [-s]"
 echo "WHERE: -h = help       "
 echo "       -s = silent (no prompts)"
 echo "PREREQUISITES:"
 echo "* The environment variable TEST_VAR must be set,"
 echo "* such as: "
 echo "   export TEST_VAR=1"
 echo "$CALLER: exiting now with rc=1."
  exit 1
}
FTSLinux联盟
FTSLinux联盟

调用脚本时,使用“-h”标志可以调用 "usage" 语句,如下所示: FTSLinux联盟
./test-bucket-1 -h FTSLinux联盟

8. 尝试使用“安静”的运行模式 FTSLinux联盟
您或许想让脚本有两种运行模式: FTSLinux联盟

  • 在 "verbose" 模式(您也许想将此作为缺省值)中提示用户输入值,或者只需按下 Enter 继续运行。
  • 在 "silent" 模式中将不提示用户输入数据。

下列摘录说明了在安静模式下运用所调用标志 "-s" 来运行脚本:FTSLinux联盟

# -------------------------------------------------
# Everything seems OK, prompt for confirmation
# -------------------------------------------------
if [ "$SILENT" = "yes" ]
then
 RESPONSE="y"
else
 echo "The $CALLER will be performed."
 echo "Do you wish to proceed [y or n]? "
 read RESPONSE                  # Wait for response
 [ -z "$RESPONSE" ] && RESPONSE="n"
fi 
case "$RESPONSE" in
 [yY]|[yY][eE]|[yY][eE][sS])
 ;;
 *)
  echo "$CALLER terminated with rc=1."
  exit 1
 ;;
esac
FTSLinux联盟
FTSLinux联盟

9. 当出现错误时,提供一个函数终止脚本 FTSLinux联盟
遇到严重错误时,提供一个中心函数以终止运行的脚本不失为一个好主意。此函数还可提供附加的说明,用于指导在此情况下应做些什么: FTSLinux联盟

# ----------------------------------
# Subroutine to terminate abnormally
# ----------------------------------
terminate()
{
 echo "The execution of $CALLER was not successful."
 echo "$CALLER terminated, exiting now with rc=1."
 dateTest=`date`
 echo "End of testing at: $dateTest"
 echo ""
  exit 1
}
FTSLinux联盟
FTSLinux联盟

10. 如有可能,提供可以执行简单任务的函数 FTSLinux联盟
例如,不使用许多很长的行命令,如: FTSLinux联盟

# --------------------------------------------------
echo ""
echo "Creating Access lists..."
# --------------------------------------------------
 Access -create -component Development -login ted -authority plead -verbose
  if [ $? -ne 0 ] 
  then 
  echo "ERROR found in Access -create -component Development -login ted 
    -authority plead"
     let "errorCounter = errorCounter + 1" 
 fi
 Access -create -component Development -login pat -authority general -verbose
  if [ $? -ne 0 ] 
  then 
  echo "ERROR found in Access -create -component Development -login pat 
    -authority general"
     let "errorCounter = errorCounter + 1" 
 fi
 Access -create -component Development -login jim -authority general -verbose
  if [ $? -ne 0 ] 
  then 
  echo "ERROR found in Access -create -component Development -login jim 
    -authority general"
     let "errorCounter = errorCounter + 1" 
 fi
FTSLinux联盟
FTSLinux联盟

……而是创建一个如下所示的函数,此函数也可以处理返回码,如果有必要,还可以增加错误计数器:FTSLinux联盟

CreateAccess()
{
 Access -create -component $1 -login $2 -authority $3 -verbose
  if [ $? -ne 0 ] 
  then 
  echo "ERROR found in Access -create -component $1 -login $2 -authority $3"
     let "errorCounter = errorCounter + 1" 
 fi
}
FTSLinux联盟
FTSLinux联盟

……然后,以易读和易扩展的方式调用此函数:FTSLinux联盟

# ------------------------------------------- 
echo ""
echo "Creating Access lists..."
# ------------------------------------------- 
CreateAccess Development ted    projectlead
CreateAccess Development pat    general
CreateAccess Development jim    general
FTSLinux联盟
FTSLinux联盟

11. 当显示正在生成的输出时,捕获每个脚本的输出 FTSLinux联盟
如果脚本不能自动地将输出发送到文件的话,可以利用 Bash shell 的一些函数来捕获所执行脚本的输出,如: FTSLinux联盟

./test-bucket-1  -s  2>&1  | tee test-bucket-1.out
FTSLinux联盟
FTSLinux联盟

让我们来分析上面的命令:FTSLinux联盟

  • "2>&1" 命令:

    使用 "2>&1" 将标准错误重定向到标准输出。字符串 "2>&1" 表明任何错误都应送到标准输出,即 UNIX/Linux 下 2 的文件标识代表标准错误,而 1 的文件标识代表标准输出。如果不用此字符串,那么所捕捉到的仅仅是正确的信息,错误信息会被忽略。FTSLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门