使用linux的命令时,经常会用man来查询可选参数及其含义。偶尔我们也会开发自己的小工具。

如何给小工具快速添加可选参数呢?

java

java的开发者应该是更喜欢使用配置文件的方式来与程序交互,无论是property还是yml。

在参数不是特别多时,cmd的params也是不错的选择。提到给java传参数,大多数人一定是会

想到main函数的args数组,这是基础,但不太方便。

推荐使用commons-cli,能够设定长短参数(-i 或 –interval),还能添加注解。

具体的方法我就不展开讲了,网上能搜到很多。

getopt(s)

shell中最普遍的解决办法就是getopt,配合while case处理输入的参数。

while getopts 'h:j:m:u' OPT;do
    case $OPTin
        j) S_DIR="$OPTARG";;
        m) D_DIR="$OPTARG";;
        u) upload="true";;
        h) func;;
        ?) func;;
    esac
done

如何你想实现tab自动提示的话,可以了解一下_get_comp_words_by_ref。

shell默认的参数处理


$0 : 脚本名
$N : 第N个参数.
$# : 参数的个数,不包括命令本身.
$@ : 参数本身的列表,也不包括命令本身,如上例为 -v -f -out /test.log –prefix=/home
$* : 参数本身的列表,也不包括命令本身,但”$*” 和”\$@”(加引号)并不同,”$*“将所有的参数解释成一个字符串,而”$@”是一个参数数组。

这种处理方法没有getopt简洁,一般还是推荐使用getopt。但是下面这个特殊用法需要注意一下。


"${@:2}"  从第二参数开始往后的所有参数