我正在尝试制作一个可以同时执行不同数量的程序(prog1、prog2、...prog5 甚至更多)的脚本。
它可以是 prog1 only , or prog1&prog2, or prog1&prog2&prog3, prog1&prog3&prog4&prog6&prog8
每个程序都可以使用不同的选项调用,并且会根据调用选项执行不同的操作。
例如 prog1 可以通过以下不同方式调用:
prog1 -d "-f 10 -g 20"
(-d 是一个选项,“-f 10 -g 20”是该特定选项的参数)prog1 -B
prog1 -R "-l 2 -m 9"
prog1 -S "10 20 30"
它也可以用它的组合来调用,比如:
prog1 -d "-f 10 -g 20" -B -R "-l 2 -m 9"
我决定使用两阶段 getopt(嵌套 getopt)来解决这个问题。
在第一阶段,getopt 将处理用户作为脚本输入提供的不同程序。在第二阶段,getopt 将处理每个程序可以获得的不同选项和参数。
我的脚本如下:
#!/bin/bash
args=`getopt -o :v -l prog1:,prog2,prog3,prog4,prog5 -- "$@"` # Here prog2,prog3..prog5 do not have a colon (:) to save some space but all of them will eventually get since when they are called they should have input arguments
eval set -- "$args"
while true; do
case $1 in
-v ) echo "VERBOSE"; shift;;
--prog1 )
echo "prog1 has been chosen with the following option:$2"
args=`getopt -o :d:BR:S: -- "$@"`
eval set -- "$args"
while true; do
case $1 in
-d ) echo "-d:$2"; shift 2;;
-B ) echo "-B"; shift;;
-R ) echo "-R:$2" ;shift 2 ;;
-S ) echo "-S:$2"; shift 2;;
--) shift; break;;
esac
done
shift 2;;
--prog2 )
echo "similar things as in prog1"; shift
;;
--prog3 )
echo "similar things as in prog1"; shift
;;
--prog4 )
echo "similar things as in prog1"; shift
;;
--prog5 )
echo "similar things as in prog1"; shift
;;
-- )
shift; break;;
esac
done
当我将脚本运行为:my_script --prog1 -d "-f 10 -g 100"
它能够获取 -d 参数但不知何故进入无限循环,同时无法获取另一个参数“-f 10 -g 100”
理想情况下,脚本应该通过以下调用运行:
my_script --prog1 -d "-f 10 -g 100" -R "-l 2 -m 9" --prog3 -M "-r 9 0.5 6" -F "-o 2 -q- 4" --prog5 .... etc
my_script --prog1 -d "-f 10 -g 100"
.my_script --prog1 -d "-f 10 -g 100" -B --prog3 -F "-o 2 -q- 4"
my_script --prog3 -F "-o 2 -q- 4" -M --prog2 -G
ETC
您对如何克服这个问题有任何想法吗?
先感谢您