我的Bash-Script应该接受参数和选项。 此外,参数和选项应该传递给另一个脚本。
第二部分我已经解决了:
for argument in "$@"; do
options $argument
done
another_script $ox $arguments
function options {
case "$1" in
-x) selection=1
-y) selection=2
-h|--help) help_message;;
-*) ox="$ox $1";;
*) arguments="$arguments $1";;
esac
}
现在我不知道如何实现一个参数“-t”,用户可以在其中指定一些文本
看起来应该是这样的:
function options {
case "$1" in
-t) user_text=[ENTERED TEXT FOR OPTION T]
-x) selection=1
-y) selection=2
-h|--help) help_message;;
-*) ox="$ox $1";;
*) arguments="$arguments $1";;
esac
}
答案 0 :(得分:3)
您可以将getopts
用于此
while getopts :t:xyh opt; do
case "$opt" in
t) user_text=$OPTARG ;;
x) selection=1 ;;
y) selection=2 ;;
h) help_message ;;
\?) commands="$commands $OPTARG" ;;
esac
done
shift $((OPTIND - 1))
其余参数位于"$@"
答案 1 :(得分:2)
你的问题是,当选项可以接受参数时,仅逐字处理参数是不够的;您需要比提供options
功能更多的上下文。将循环置于options
内,如下所示:
function options {
while (( $# > 0 )); do
case "$1" in
-t) user_text=$2; shift; ;;
-x) selection=1 ;;
# ...
esac
shift
done
}
然后在整个参数列表中调用options
:
options "$@"
您可能还想查看getopts
内置命令或getopt
程序。
答案 2 :(得分:0)
我会在for循环中执行case语句,这样我就可以强制转换到第二个下一个参数。类似的东西:
while true
do
case "$1" in
-t) shift; user_text="$1";;
-x) selection=1;;
...
esac
shift
done