电脑技术学习

对话 UNIX: 更多 shell 脚本技术

dn001

#!/bin/bash
_X=1
while [[ ${_X} -le 10 ]]
do
 [[ ${_X} -lt 5 ]] && echo "X is less than 5!"
 _Y=`expr ${_X} + 1`
 if [[ ${_Y} -eq 6 ]]
 then
  echo "Y is now equal to ${_Y}"
 fi
 _X=${_Y}
done

  再次运行这个脚本:

# ./make_errors
X is less than 5!
X is less than 5!
X is less than 5!
X is less than 5!
Y is now equal to 6

  恭喜!这个脚本现在正常工作了!

  set -x 选项

  有时候,对 shell 脚本执行基本的错误排除步骤并不像前一个示例那么容易。如果所有努力都失败了,并且想不出脚本的错误之处在哪里,那么最后一招就是动用 “杀手锏!Ksh、Bash 和其他现代 shell 都支持在 set 命令中使用 -x 开关。如果使用 set –x 选项,执行的每个命令都显示在 stdout 中。为了突出显示执行的代码,set –x 把 PS4 变量的值加在显示的每行代码前面。请记住,这种做法会产生大量文本,所以在查看输出时要有耐心。

  减小前一个示例中的循环计数值,在脚本的开头添加 set -x 和一个注释,见清单 12。

  清单 12. set -x 示例

#!/bin/bash
set -x
# loop through and display some test statements
_X=1
while [[ ${_X} -le 4 ]]
do
 [[ ${_X} -lt 2 ]] && echo "X is less than 2!
 _Y=`expr ${_X} + 1`
 if [[ ${_Y} -eq 3 ]]
 then
  echo "Y is now equal to ${_Y}"
 fi
 _X=${_Y}
done

标签: