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联盟 |