如何使用多个选项的多个参数处理 bash
how to handle bash with multiple arguments for multiple options
我需要使用 bash 从 poloniex rest 客户端下载具有多个选项的图表数据。
我尝试了 getopts 但无法真正找到一种方法来使用具有多个参数的多个选项。
这是我想要实现的目标
./getdata.sh -c currency1 currency2 ... -p period1 period2 ...
有了参数我需要调用 wget c x p
次
for currency in c
for period in p
wget https://poloniex.com/public?command=returnChartData¤cyPair=BTC_{$currency}&start=1405699200&end=9999999999&period={$period}
好吧,我明确地写下了我的最终目标,现在可能很多其他人也在寻找它。
这样的事情对你有用吗?
#!/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
你可以打电话
./getdata.sh "currency1 currency2" "period1 period2"
getdata.sh
内容:
c=
p=
for currency in $c ; do
for period in $p ; do
wget ...$currency...$period...
done
done
我需要使用 bash 从 poloniex rest 客户端下载具有多个选项的图表数据。 我尝试了 getopts 但无法真正找到一种方法来使用具有多个参数的多个选项。
这是我想要实现的目标
./getdata.sh -c currency1 currency2 ... -p period1 period2 ...
有了参数我需要调用 wget c x p
次
for currency in c
for period in p
wget https://poloniex.com/public?command=returnChartData¤cyPair=BTC_{$currency}&start=1405699200&end=9999999999&period={$period}
好吧,我明确地写下了我的最终目标,现在可能很多其他人也在寻找它。
这样的事情对你有用吗?
#!/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
你可以打电话
./getdata.sh "currency1 currency2" "period1 period2"
getdata.sh
内容:
c=
p=
for currency in $c ; do
for period in $p ; do
wget ...$currency...$period...
done
done