如何创建一个bash脚本,它将获取可选参数,然后将这些可选参数传递给java类

时间:2014-03-06 15:31:23

标签: bash scripting

我是这个论坛的新手,所以请耐心等待这个简单的问题。

我是脚本新手。我需要创建一个脚本,在运行时检查可选参数。例如:

./g -input filename -output filename -option run|stop|break

在我阅读给出的选项后,我需要将这些参数传递给将运行和处理它的java类。

我读过有关getoptgetopts的内容,但我很难理解它。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您是否有理由尝试使用bash来处理参数?只需将整个混乱传递给java main,然后可以使用或不使用bash脚本运行java程序,并且将来可以更加轻松地移植到其他平台。

查看Apache CLI(http://commons.apache.org/cli)以获取Java命令行参数处理。

答案 1 :(得分:0)

我为bash arg处理制作了一个示例代码(可能还有其他更好的方法)。

正如您所看到的,此解决方案的核心是参数编号的$# bash变量和用于清除当前参数的shift bash命令。如果您echo $1再次使用shift结束echo $1,您将获得下一个参数。

#!/bin/bash

echo "Args: $@ ($#)"

while [ $# -gt 0 ]
do
    echo "All arg count: $#"
    echo "I act arg: " $1
    case $1 in
        -option)
            echo "This is the option: $2"
            shift 2
            ;;
        -verbose)
            echo "I am doing verbose output!"
            set -x
            shift
            ;;
        *)
            echo "Unknown arg: " $1
            shift
            ;;
    esac
done

输出:

$ /tmp/test.sh as asd asdf asdf5 -option foo asd -verbose -asd 755
Args: as asd asdf asdf5 -option foo asd -verbose -asd 755 (10)
All arg count: 10
I act arg:  as
Unknown arg:  as
All arg count: 9
I act arg:  asd
Unknown arg:  asd
All arg count: 8
I act arg:  asdf
Unknown arg:  asdf
All arg count: 7
I act arg:  asdf5
Unknown arg:  asdf5
All arg count: 6
I act arg:  -option
This is the option: foo
All arg count: 4
I act arg:  asd
Unknown arg:  asd
All arg count: 3
I act arg:  -verbose
I am doing verbose output!
+ shift
+ '[' 2 -gt 0 ']'
+ echo 'All arg count: 2'
All arg count: 2
+ echo 'I act arg: ' -asd
I act arg:  -asd
+ case $1 in
+ echo 'Unknown arg: ' -asd
Unknown arg:  -asd
+ shift
+ '[' 1 -gt 0 ']'
+ echo 'All arg count: 1'
All arg count: 1
+ echo 'I act arg: ' 755
I act arg:  755
+ case $1 in
+ echo 'Unknown arg: ' 755
Unknown arg:  755
+ shift
+ '[' 0 -gt 0 ']'

如果你照看这些主要命令,我认为你可以为这份工作编写一个非常简单的脚本。祝你好运!