使用getopts命令解析shell脚本的命令行选项

转自:http://yejinxin.github.io/parse-shell-options-with-getopts-command/

标准的Unix命令一般都提供很多选项,使用者通过命令行提供具体的选项和参数,格式如下:

command -options parameters filename

getopts是shell内建的一个命令,它可以帮助我们处理命令行选项,使得我们的脚本也可以与unix命令保持风格一致。getopts的用法格式为:

getopts option_string variable

具体的例子,直接上脚本:

#!/bin/bash
QUIET=
VERBOSE=
DEVICE=
LOGFILE=/tmp/default

usage()
{
    echo "Usage: `basename $0` [-qv] [-l LOGFILE] -d DEVICE input_file [input_file2...]"
    exit 1
}

[ $# -eq 0 ] && usage

#option_string以冒号开头表示屏蔽脚本的系统提示错误,自己处理错误提示。
#后面接合法的单字母选项,选项后若有冒号,则表示该选项必须接具体的参数
while getopts :qvd:l: OPTION
do
    case $OPTION in
        q)
            QUIET=y
            ;;
        v)
            VERBOSE=y
            ;;
        d)
            DEVICE=$OPTARG        #$OPTARG为特殊变量,表示选项的具体参数
            ;;
        l)
            LOGFILE=$OPTARG
            ;;
        \?)                       #如果出现错误,则解析为?
            usage
            ;;
    esac
done

#$OPTIND为特殊变量,表示第几个选项,初始值为1
shift $(($OPTIND - 1))      #除了选项之外,该脚本必须接至少一个参数
if [ $# -eq 0 ]; then
    usage
fi

if [ -z "$DEVICE" ]; then   #该脚本必须提供-d选项
    echo "You must specify DEVICE with -d option"
    exit
fi

echo "you chose the following options.."
echo "Quiet=$QUIET VERBOSE=$VERBOSE DEVICE=$DEVICE LOGFILE=$LOGFILE"

for file in [email protected]          #依次处理剩余的参数
do
    echo "Processing $file"
done

以上是getopts命令的用法例子,可以看到,getopts命令式不支持长选项的。需要注意的是,还有另外一个Linux命令getopt,它可以支持长选项,但不是内置的命令,unix版本和Linux版本的用法也不一样,用法见另一篇文章

时间: 2024-08-05 09:39:39

使用getopts命令解析shell脚本的命令行选项的相关文章

使用getopt命令解析shell脚本的命令行选项 【转】

本文转载自:http://yejinxin.github.io/parse-shell-options-with-getopt-command 在之前的一篇文章中,介绍了如何利用shell内置的getopts命令来帮助我们处理shell脚本选项和参数,其缺点是只能处理短选项,无法处理长选项.下面,本文将要介绍的是getopt命令,它可以同时处理短选项和长选项. 首先,getopt命令不是一个标准的unix命令,但它在大多数Linux的发行版中都自带了有,如果没有,也可以从getopt官网上下载安

(转)IBM AIX系统硬件信息查看命令(shell脚本)

IBM AIX系统硬件信息查看命令(shell脚本) 原文:http://blog.itpub.net/22085031/viewspace-1054015/ 查看IBM AIX系统的主机型号.序列号.CPU.内存.硬盘.网卡.网卡物理插槽位置信息.是否配置以太网通道.网卡链路状态.当前网络速率.HBA卡.HBA卡物理插槽位置信息.HBA卡WWN.HBA卡支持速率.HBA卡当前速率.VG.PV.LV信息.该主机当前由哪台HMC管理.配置了多少磁带机驱动器tape driver等信息,可以通过一段

shell脚本常用命令(HandBook_1)

shell及其他解释型语言的一般格式?  #!/bin/bash            #shell脚本的首行格式  #!/usr/bin/python  #python脚本的格式  #!/usr/bin/perl        #perl脚本的格式  #Description:      #"#"开头的单个井字号是注释符,其后内容不当做脚本程序执行  COMMAND            #脚本的编程内容部分,命令的堆砌,单一命令的组合完成复杂任务 怎样使得定义的变量生效? 1.~]

Shell 脚本常用命令

Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 1.1           $  美元符号.用来表示变量的值.如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值. 1.2          #  井号.除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了. 1.3    

shell脚本基础命令学习(一)

shell的作用是解析用户的指令,将shell指令按照特定的流程,组合形成脚本. 查看当前系统shell版本: 编写一个简单的shell脚本后,可以使用下面几种方法来执行: 1,使用chmod给脚本增加x权限,如:chmod +x test.sh 2,/bin/sh 或者 /bin/bash 执行脚本(会创建子进程) 3,source ./test.sh 脚本执行 4,小括号方式,会创建子进程 环境变量,可以直接设置,例如var=100,使用unset var可以删除 通配符: * 匹配一个或多

shell脚本介绍 shell脚本结构和执行 date命令用法 shell脚本中的变量

一.shell脚本介绍shell脚本要想写好,必须通过不断地去练习写才能写好,没有捷径要在我们拿到一个需求的时候有一个脚本的大致思路,想到需求怎么去实现shell脚本可以大大提高我们的工作效率二.shell脚本结构和执行[[email protected] ~]# mkdir shell //创建一个shell文件夹,存放实验的shell脚本[[email protected] ~]# cd shell/[[email protected] shell]# ls[[email protected

shell 脚本 常用命令

Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 1.1           $  美元符号.用来表示变量的值.如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值. 1.2          #  井号.除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了. 1.3    

java程序执行,调用shell命令和shell脚本

  坑呀!记得在start()之后, waitFor()之前把缓冲区读出来打log,否则是阻塞缓冲区,没有输出的 package com.jikexueyuancrm.util; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import

Makefile Shell 脚本;sed命令

1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \                        //-d 判断是否存在,在shell中,用[]号代替括号 rm -rf xxx;  \ fi; @cp -fv  xxx  xxxx     //-f 删除已经存在的目标文件而不提示  -v  cp命令将告诉用户正在做什么 例:  cp -fv temp temp2 显示: 'temp'  ->  'temp2'