如何处理多个选项的多个参数的bash

时间:2017-08-17 20:37:35

标签: linux bash macos poloniex

我需要使用仅使用bash的多个选项从poloniex rest客户端下载图表数据。 我尝试过getopts,但无法真正找到一种方法来使用多个参数的mutliple选项。

这是我想要实现的目标

./getdata.sh -c currency1 currency2 ... -p period1 period2 ...

拥有我需要为c x p次调用wget的参数

for currency in c
    for period in p
        wget https://poloniex.com/public?command=returnChartData&currencyPair=BTC_{$currency}&start=1405699200&end=9999999999&period={$period}

我正在明确地写出我的最终目标,因为现在很多其他人都在寻找它。

2 个答案:

答案 0 :(得分:2)

这样的事情能为你效劳吗?

#!/bin/bash

while getopts ":a:p:" opt; do
  case $opt in
    a) arg1="$OPTARG"
    ;;
    p) arg2="$OPTARG"
    ;;
    \?) echo "Invalid option -$OPTARG" >&2
    ;;
  esac
done

printf "Argument 1 is %s\n" "$arg1"
printf "Argument 2 is %s\n" "$arg2"

然后你可以这样调用你的脚本:

./script.sh -p 'world' -a 'hello'

上述输出将是:

Argument 1 is hello
Argument 2 is world

更新

您可以多次使用相同的选项。解析参数值时,可以将它们添加到数组中。

#!/bin/bash

while getopts "c:" opt; do
    case $opt in
        c) currs+=("$OPTARG");;
        #...
    esac
done
shift $((OPTIND -1))

for cur in "${currs[@]}"; do
    echo "$cur"
done

然后您可以按如下方式调用脚本:

./script.sh -c USD -c CAD

输出将是:

USD
CAD

参考:BASH: getopts retrieving multiple variables from one flag

答案 1 :(得分:1)

你可以打电话 ./getdata.sh "currency1 currency2" "period1 period2"

getdata.sh内容:

c=$1
p=$2

for currency in $c ; do 
  for period in $p ; do
    wget ...$currency...$period...
  done
 done