电脑技术学习

对话 UNIX: 更多 shell 脚本技术

dn001

  在执行包含 getopt(称为 opttest)的脚本时,如果在 -x 或 --xxxxx 中使用有效的参数,getopt 会识别出开关并执行 case 开关中的代码:

# ./hm -x
Arg x hit!

  下面是使用无效开关或选项时的结果:

# ./hm -a
Invalid Option: -a

  文档,文档,文档

  我们在职业生涯中早晚会受到这个问题的困扰。老板要求您看看一个 10 年前编写的脚本,它的作者已经不再为公司工作了。您会说 “没问题 吗?通常情况下,可能没问题;但是,如果这个脚本很复杂,执行了您不习惯使用的命令,采用的编写风格与您的风格不一样,或者干脆就不能正常工作,您就遇到大麻烦了。在这种情况下,一些反映作者当初编写这个脚本时的想法的提示会有很大的帮助。有时候,您开发了一个自认为只使用一次的脚本,但是以后却发现还需要修改它。或者,您用几星期时间编写了一个巨大的脚本,您了解这个脚本的所有细节,但是如果别人阅读它,却不知所云。这几种情况说明,文档之于开发人员就像脚本之于用户,都非常重要。

  看看清单 6 所示的函数。

  清单 6. 没有注释的脚本示例

confirm_and_exit() {
 [[ ${_DEBUG_LEVEL} -ge 3 ]] && set -x
 while [[ -z ${_EXIT_ANS} ]]
 do
  cup_echo "Are you sure you want to exit? [Y/N] 
    c" ${_PROMPT_ERR_ROW} ${_PROMPT_ERR_COL}
  ${_TPUT_CMD} cnorm
  read ${_NO_EOL_FLAG:+${_READ_FLAG:-'-n'}} ${_NO_EOL_FLAG} _EXIT_ANS
  ${_TPUT_CMD} civis
 done
 case ${_EXIT_ANS} in
  [Nn]) unset _EXIT_ANS; return 0;;
  [Yy]) exit_msg 0 1 "Exiting Script";;
    *) invalid_selection ${_EXIT_ANS}; unset _EXIT_ANS;;
 esac
 return 0
}

标签: