将多个参数传递给 Bash 脚本

Koh*_*ese 1 bash getopts

我有一个 bash 脚本,我想这样调用它:

bash curl.sh http://www.google.co.uk/ -d Directory -a "Moz 123" -r http://localhost/
Run Code Online (Sandbox Code Playgroud)

我可以收集第一个参数(http://www.google.co.uk/),内容如下:

url=$1
while getopts p:d:a:r: opt; do
case $opt in
    p) proxy=$OPTARG ;;
    d) dir=$OPTARG ;;
    a) ua=$OPTARG ;;
    r) ref=$OPTARG ;;
esac
done
Run Code Online (Sandbox Code Playgroud)

但是,它没有接受其他参数。如果我删除“ http://www.google.co.uk/ ”作为第一个参数,它会选择 -arguments。

由于后勤原因,我无法设置第一个参数,例如“ http://www.google.co.uk/ ”和 -u 等。

你如何让它发挥作用?

小智 5

为什么不传递参数并用引号引起来?

例如

script.shl "http://www.google.com" "/var/www/test" "option 3"
Run Code Online (Sandbox Code Playgroud)

...然后您可以使用 $1 $2 $3 直接在脚本中访问它们。您仍然可以仅使用 if...else 来更改脚本的进程?

除非我误读了你的问题......

  • 对于可能有许多可选参数的程序来说,这不能很好地扩展。您不想调用像 `script.shl "" "foo" "" "" "bar" "" "" "" "3" "" "4"` 这样的程序。 (2认同)