java getopt_getopt使用例子

java getopt_getopt使用例子绝大多数脚本使用 getopts 应该就可以满足需求了 如果需要支持长选项以及可选参数 那么就需要使用 getopt 了 getopt 和 getopts 类似 也是通过冒号来区分选项是否接受参数值 其定义如下 后面没有冒号 表示选项不接参数后面有一个冒号 表示选项必须接参数后面有两个冒号 表示选项参数可选我们来看一下这个命令 example sh a bvalue2argv3 我们看到这

绝大多数脚本使用getopts应该就可以满足需求了,如果需要支持长选项以及可选参数,那么就需要使用getopt了.

getopt和getopts类似,也是通过冒号来区分选项是否接受参数值,其定义如下:

后面没有冒号,表示选项不接参数

后面有一个冒号,表示选项必须接参数

后面有两个冒号,表示选项参数可选

我们来看一下这个命令

example.sh -a -b value2 –argv3 value3

我们看到这个命令有两个短选项和一个长选项,分别是-a,-b和–argv3,其中a不接收参数,b和argv3接收参数,我们看一下如何在脚本里面进行定义

ARGS=`getopt -o ab: -l “argv3:,help” — “$@”`

eval set — “${ARGS}”

因为getopt是一个独立的程序,所以我们使用“来进行getopt的执行和结果获取,并通过eval set将规范化后的命令行参数分配至位置参数(1,1,2,…)

其中-o或–options选项后面接可接受的短选项;-l或–long选项后面接可接受的长选项,用逗号分开

一个完整的示例脚本如下:

#!/bin/bash

ARGS=`getopt -o ab: -l “argv3:,help” — “$@”`

eval set — “${ARGS}”

while true;

do

case “$1” in

-a)

echo “i am a”

shift

;;

-b)

echo “i am b, my value is $2”

shift 2

;;

–argv3)

echo “i am argv3, my value is $2”

shift 2

;;

–help)

echo “i am help info”

exit 0

;;

–)

shift

break

;;

*)

echo “Internal error!”

exit 1

;;

esac

done

if [[ $# -eq 0 ]];then

USAGE

fi

ARGS=`getopt -o d: -l “prepare,cleanup,ip:,sleep:,help” — “$@”`

eval set — “${ARGS}”

while true;

do

case “$1” in

–prepare)

echo “prepare”

ENV_PREPARE

exit 0

;;

–cleanup)

echo cleanup

ENV_CLEAN

exit 0

;;

–ip)

SERVER_IP=$2

shift 2

;;

–sleep)

SLEEP_TIME=$2

shift 2

;;

–help)

USAGE

exit 0

;;

-d)

DO_CASE $2

if [[ $? -eq 0 && ! -z $SLEEP_TIME ]];then

#只有server需要获取结果

GET_RESULT

fi

shift 2

;;

–)

shift

break

;;

*)

echo “Internal error!”

exit 1

;;

esac

done

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217454.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:31
下一篇 2026年3月18日 上午9:32


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号