GMT 脚本进阶(二):怎样用 getopts 拾取命令行参数
本系列共 4 篇:(一)Shell 技巧 · (二)怎样 getopts · (三)分享与扩展 · (四)C 语言 API 上一篇文章中我们介绍了一些在 GMT 脚本编写中可能会用到的 Shell 编程基础知识,今天我们将介绍 Linux 中一个很棒的内置命令 getopts。使用它我们可以方便地自定义标签并获取命令行参数。本篇教程将首先通过一个例子介绍 getopts 的使用方法,然后结合之前我们学习的 gmt_shell_functions.sh 脚本编写一个自动化绘制平面图的 Shell 脚本。如果你准备好了,我们就开始吧。 getopts 简短说明 话不多说,先上例子(personal_info.sh,不用着急看脚本,我们会在后面逐步讲解): #!/bin/bash # 这个简单脚本会拾取姓名、年龄与性别三个参数并显示对应的信息。 # 初始化三个变量name age gender为Unknown name="Unknown" age="Unknown" gender="Unknown" # 显示个人信息 参数依次为 name age gender show_info() { if [[ ${2} -ge 18 && ${3} == 'm' ]]; then echo ${1} is a ${2} years ago man. elif [[ ${2} -ge 18 && ${3} == 'f' ]]; then echo ${1} is a ${2} years ago woman. elif [[ ${2} -lt 18 && ${3} == 'm' ]]; then echo ${1} is a ${2} years ago boy. elif [[ ${2} -lt 18 && ${3} == 'f' ]]; then echo ${1} is a ${2} years ago girl. else echo "Alien." fi } # 使用getopts从命令行获取参数 while getopts "hn:a:g:" arg do case $arg in # 拾取到-h选项,显示帮助信息后退出 h) printf "usage: ${0##*/} -n<name> -a<age> -g<gender> [-h]\n" printf "%s\t%s\n" "-n" "Your name" printf "%s\t%s\n" "-a" "Your age." printf "%s\t%s\n" "-g" "Your gender. Enter 'm' for male and 'f' for female." printf "%s\t%s\n" "-h" "Show help information." exit 0;; n) name=$OPTARG;; # 对变量进行赋值,注意后跟双分号结束。 a) age=$OPTARG;; g) gender=$OPTARG;; ?) # 拾取到未知参数,显示帮助信息后退出。 printf "error: unknow argument\nuse -h option to see help information.\n" exit 1;; esac done # 检查参数值并调用函数显示个人信息 if [[ ${name} != "Unknown" && ${age} != "Unknown" && ${gender} != "Unknown" ]]; then show_info ${name} ${age} ${gender} fi 在终端运行此脚本: ...