我是这个论坛的新手,所以请耐心等待这个简单的问题。
我是脚本新手。我需要创建一个脚本,在运行时检查可选参数。例如:
./g -input filename -output filename -option run|stop|break
在我阅读给出的选项后,我需要将这些参数传递给将运行和处理它的java类。
我读过有关getopt
或getopts
的内容,但我很难理解它。
非常感谢。
答案 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 ']'
如果你照看这些主要命令,我认为你可以为这份工作编写一个非常简单的脚本。祝你好运!