如何自动化这个过程?

时间:2016-05-25 19:58:37

标签: bash

大家好我正在编写一个脚本来解析bash中的一些参数,我想按如下方式运行我的代码:

bash myScript.sh +value value1 +valuei value2 ... +valuek valuer 

并使用该标志创建变量以存储该参数,如下所示:

variable1=value
variable2=value1
variable3=value
variable4=value2
.
.
.
valriabler= valriablem 

注意,我只想通过删除前面示例中的+符号来保存标志的值,为了实现这一点,我试过了:

#!/bin/bash
variable1=$(echo $1 | cut -d "+" -f 2)
variable2=$2
echo $variable1
echo $variable2

在我跑完之后,我得到了:

bash myScript.sh +hola hi
hola
hi

我可以解析前两个参数,但问题是我想为多个变量做这个:

myScript +value value1 +valuei value2 ... +valuek valuer

我想感谢有关如何自动化的任何帮助?这个任务,我将解析与同一结构成对出现的多个参数,我想将它们的值存储在变量中,我想感谢任何关于如何实现这一点的建议。 注意,我想避免使用getopts,因为我想使用复杂的标志。

3 个答案:

答案 0 :(得分:1)

你应该使用数组,并按照这样做。

#!/bin/bash
while (( $# )); do
   arr+=("${1#+}")
   shift
done

您将下一个变量分配给下一个元素,将其移除,如果有更多则继续。你可以像这样回应它们。

for i in "${arr[@]}"; do
   echo "$i"
done

答案 1 :(得分:1)

您是否知道任何Bourne Shell支持一次性分配,并通过变量赋值为命令添加前缀?

variable1=value variable2=val2 variable3=val3 myscript args ...

答案 2 :(得分:-1)

这是一种实现参数解析的方法,这个脚本生成一个带有变量属性值的csv。

#!/bin/bash
touch archive.csv
while (($# >= 1))
do
        echo "$(echo $1| tr -d "+"),$2" >> archive.csv
        shift 2
done

cat archive.csv

我可以这样运行:

bash parse.sh +value value1 +valuei value2

我得到了:

value,value1
valuei,value2

这样可以解析参数。