⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex33.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 SH
字号:
#!/bin/bash# 练习 getopts 和 OPTIND# 在Bill Gradwohl的建议下, 这个脚本于 10/09/03 被修改.# 在这里我们将学习如何使用 'getopts' 来处理脚本的命令行参数.# 参数被作为"选项"(标志)来解析, 并且对选项分配参数. # 试一下, 使用如下方法来调用这个脚本# 'scriptname -mn'# 'scriptname -oq qOption' (qOption 可以是任意的哪怕有些诡异字符的字符串.)# 'scriptname -qXXX -r'## 'scriptname -qr'    - 意外的结果, "r" 将被看成是选项 "q" 的参数.# 'scriptname -q -r'  - 意外的结果, 同上.# 'scriptname -mnop -mnop'  - 意外的结果# (OPTIND在选项刚传递进来的地方是不可靠的). # (译者注: 也就是说OPTIND只是一个参数指针, 指向下一个参数的位置.#  比如:	-mnop 在mno处理的位置OPTION都为1, 而到p的处理就变成2, #			-m -n -o 在m的时候OPTION为2, 而n为3, o为4,#			也就是说它总指向下一个位置). ##  如果选项需要一个参数的话("flag:"), 那么它将获取#+ 命令行上紧挨在它后边的任何字符.NO_ARGS=0 E_OPTERROR=65if [ $# -eq "$NO_ARGS" ]  # 不带命令行参数就调用脚本?then  echo "Usage: `basename $0` options (-mnopqrs)"  exit $E_OPTERROR        # 如果没有参数传递进来, 那么就退出脚本, 并且解释此脚本的用法.fi  # 用法: scriptname -options# 注意: 必须使用破折号 (-) while getopts ":mnopq:rs" Optiondo  case $Option in    m     ) echo "Scenario #1: option -m-   [OPTIND=${OPTIND}]";;    n | o ) echo "Scenario #2: option -$Option-   [OPTIND=${OPTIND}]";;    p     ) echo "Scenario #3: option -p-   [OPTIND=${OPTIND}]";;    q     ) echo "Scenario #4: option -q-\ with argument \"$OPTARG\"   [OPTIND=${OPTIND}]";;    #  注意, 选项'q'必须分配一个参数,     #+ 否则, 默认将失败.    r | s ) echo "Scenario #5: option -$Option-";;    *     ) echo "Unimplemented option chosen.";;   # 默认情况的处理  esacdoneshift $(($OPTIND - 1))#  (译者注: shift命令是可以带参数的, 参数就是移动的个数)#  将参数指针减1, 这样它将指向下一个参数.#  $1 现在引用的是命令行上的第一个非选项参数,#+ 如果有一个这样的参数存在的话.exit 0#   就像 Bill Gradwohl 所描述的,#  "getopts机制允许指定一个参数, #+ 但是scriptname -mnop -mnop就是一种比较特殊的情况, #+ 因为在使用OPTIND的时候, 没有可靠的方法来区分到底传递进来了什么东西."

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -