我们经常在调试脚本时添加一些必要的调试信息,以便跟踪到程序中的错误。在完成调试后,一般都会选择删除这些额外的调试信息,在过了一段时间之后,如果脚本需要添加新的功能,那么我们将不得不重新进行调试,这样又有可能需要添加这些调试信息,在调试成功之后,这些信息可能会被再次删除。如果我们能够为我们的调试信息添加调试级别,使其只在必要的时候输出,我想这将会是一件非常惬意的事情。
[root@xieqichao ~]# cat > test2.sh
#!/bin/sh
if [[ $# == 0 ]]; then
echo "Usage: ./test2.sh -d debug_level"
exit 1
fi
#1. 读取脚本的命令行选项参数,并将选项赋值给变量argument。
while getopts d: argument
do
#2. 只有到选项为d(-d)时有效,同时将-d后面的参数($OPTARG)赋值给变量debug,表示当前脚本的调试级别。
case $argument in
d) debug_level=$OPTARG ;;
\?) echo "Usage: ./test2.sh -d debug_level"
exit 1
;;
esac
done
#3. 如果debug此时的值为空或者不是0-9之间的数字,给debug变量赋缺省值0.
if [[ -z $debug_level || $debug_level != [0-9] ]]; then
debug_level=0
fi
echo "The current debug_level level is $debug_level."
echo -n "Tell me your name."
read name
name=`echo $name | tr [a-z] [A-Z]`
if [ $name = "STEPHEN" ];then
#4. 根据当前脚本的调试级别判断是否输出其后的调试信息,此时当debug_level > 0时输出该调试信息。
test $debug_level -gt 0 && echo "This is stephen."
#do something you want here.
elif [ $name = "ANN" ]; then
#5. 当debug_level > 1时输出该调试信息。
test $debug_level -gt 1 && echo "This is ann."
#do something you want here.
else
#6. 当debug_level > 2时输出该调试信息。
test $debug_level -gt 2 && echo "This is others."
#do any other else.
fi
CTRL+D
[root@xieqichao ~]# ./test2.sh
Usage: ./test2.sh -d debug_level
[root@xieqichao ~]# ./test2.sh -d 1
The current debug level is 1.
Tell me your name. ann
[root@xieqichao ~]# ./test2.sh -d 2
The current debug level is 2.
Tell me your name. ann
This is ann.