我有一个包含很多OPTIONAL参数的脚本.一些有相关的价值观.
如:
.script --first 2012-12-25 --last 2012-12-26 --copy --remove
.script --first 2012-12-25
Run Code Online (Sandbox Code Playgroud)
因此以下案例陈述:
for arg in "$@"
do
case $arg in
"--first" )
START_DATE=$arg;;
"--last" )
END_DATE=$arg;;
"--copy" )
COPY=true;;
"--remove" )
REMOVE=true;;
# ... and so on
esac
done
Run Code Online (Sandbox Code Playgroud)
需要增量$arg+1类型语句来获取以下arg(在某些情况下).
怎么可能?
我也很乐意做一个子串 .script --first2012-12-25 --last2012-12-26
而不知道如何继续前进.
Gil*_*ert 20
您可以同时允许--a = arg或-a arg选项:
START_DATE="$(date '+%Y-%m-%d')";
LAST_DATE="$(date '+%Y-%m-%d')";
while [[ $# -gt 0 ]] && [[ "$1" == "--"* ]] ;
do
opt="$1";
shift; #expose next argument
case "$opt" in
"--" ) break 2;;
"--first" )
START_DATE="$1"; shift;;
"--first="* ) # alternate format: --first=date
START_DATE="${opt#*=}";;
"--last" )
LAST_DATE="$1"; shift;;
"--last="* )
LAST_DATE="${opt#*=}";;
"--copy" )
COPY=true;;
"--remove" )
REMOVE=true;;
"--optional" )
OPTIONAL="$optional_default";; #set to some default value
"--optional=*" )
OPTIONAL="${opt#*=}";; #take argument
*) echo >&2 "Invalid option: $@"; exit 1;;
esac
done
请注意,如果未使用"=",则--optional参数使用默认值,否则以正常方式设置值.
getopts 似乎不能有可选参数。否则很棒。
我的解决方案
循环$@并设置一个变量等于x=$arg
对该变量进行大小写切换(而不是arg)
对于该类型的参数效果很好--startdate 2012-12-25 --enddate 2012-12-29
但没有起作用,--remove没有以下论据。
因此,将一些东西(不太可能的参数)附加到 arg 字符串上。
留下以下内容
argc="$@ jabberwhocky"
echo $argc
x=0
# x=0 for unset variable
for arg in $argc
do
case $x in
"--start" )
STARTDATE=$arg ;;
"--end" )
ENDDATE=$arg ;;
"--copy" )
COPY=true;;
"--remove" )
REMOVE=true;;
Run Code Online (Sandbox Code Playgroud)
... 等等....
esac
x=$arg
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34357 次 |
| 最近记录: |