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

如何创建一个包含可选参数的bash脚本,然后将这些可选参数传递给java类,bash,scripting,Bash,Scripting,我是这个论坛的新手,所以请耐心回答这个简单的问题 我不熟悉脚本编写。我需要创建一个脚本,在运行时检查可选参数。例如: ./g -input filename -output filename -option run|stop|break 在阅读了给出的选项之后,我需要将这些参数传递给一个java类,在那里它将被运行和处理 我读过关于getopt或getopts的书,但我很难理解它 非常感谢。您尝试使用bash处理参数有什么原因吗?只需将整个混乱传递给java main,那么java程序就可以在

我是这个论坛的新手,所以请耐心回答这个简单的问题

我不熟悉脚本编写。我需要创建一个脚本,在运行时检查可选参数。例如:

./g -input filename -output filename -option run|stop|break
在阅读了给出的选项之后,我需要将这些参数传递给一个java类,在那里它将被运行和处理

我读过关于
getopt
getopts
的书,但我很难理解它


非常感谢。

您尝试使用bash处理参数有什么原因吗?只需将整个混乱传递给java main,那么java程序就可以在有或没有bash脚本的情况下运行,并且将来将更易于移植到其他平台


看看apachecli()的Java命令行参数处理。

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

如您所见,此解决方案的核心是参数编号的
$#
bash变量和用于同时清除一个参数的
shift
bash命令。如果您再次
echo$1
使用
shift
end
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 ']'

如果你注意这些主要命令,我想你可以为这项工作编写一个相当简单的脚本。祝你好运

要求是我需要一种在Ubuntu控制台中运行进程的方法,该控制台接受参数,然后用java代码处理这些参数。我所能想到的就是使用一个脚本来完成它,就像我以前尝试使用一个脚本来运行java代码一样,但不使用参数。另外,我认为我可以先检查脚本中的参数,然后再将其传递给java程序。