电脑技术学习

对话 UNIX: 更多 shell 脚本技术

dn001

  这个脚本可以正常工作,但是它只能在两个位置搜索一个文件。

  清单 4 提供相同的功能,但是允许用户在任何位置搜索任何文件。

  清单 4. 使脚本更灵活

#!/bin/bash
exit_msg() {
 [[ $# -gt 1 ]] && echo "${0##*/} (${1}) - ${2}"
 exit ${1:-0}
}
[[ $# -lt 2 ]] && exit_msg 1 "Usage: ${0##*/} <file name> <location>"
_FNAME="${1}"
_DNAME="${2}"
[[ ! -d "${_DNAME}" ]] && exit_msg 2 "Unable to read or find Directory '${_DNAME}'"
if [[ -f "${_DNAME}/${_FNAME}" ]]
then
 exit_msg 0 "Found file '${_DNAME}/${_FNAME}'"
else
 exit_msg 3 "Unable to find file '${_DNAME}/${_FNAME}'"
fi

  这个脚本更灵活,因为它允许用户指定要搜索的任何文件和任何搜索目录。

  提供选项

  在编写一个 shell 脚本时,一些用户可能会说,“它真不错! 或者 “我喜欢使用它;而同时,其他用户可能不同意这个评价,他们可能不希望执行相同的操作。人们喜欢有选择,为什么不给他们提供选项呢?内置的 shell 命令 getopt 可以完成这个任务。

  清单 5 提供一个在 AIX 中使用 getopt 的基本示例。

  清单 5. getopt 示例

#!/usr/bin/ksh
_ARGS=`getopt -o x --long xxxxx -n ${0##*/} -- "$@"`
while [[ $# -gt 0 ]]
do
 case "${1}" in
  -x|--xxxxx) echo "Arg x hit!"shift;;
      --) shift; break;;
       *) echo "Invalid Option: ${1}"break;;
 esac
done

标签: