如何创建一个包含可选参数的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
endecho$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程序。