带有2个变量循环的Bash脚本

时间:2018-04-21 14:54:51

标签: bash loops gitlab

我很难完成这个工作。我需要向GITLAP API提供基于我拥有的文件创建的问题。通常,文件的输出如下:

Microsoft xxx xxxxx - 远程执行代码xxxxxx- 2018年4月xxxxx更新 红帽企业xxxx - java-1.8.0-xxxxx多个xxxxxxx- RHSA-xxxxxx

到目前为止,我已经按照以下方式解决了这个问题:

while read in; do 
    curl --request POST --header "PRIVATE-TOKEN: xxxxxxxxxxxxx" https://gitlab.com/api/v3/projects/xxxxxx/issues?title="$in"; 
done < ~/input_file

现在的问题是我需要添加第二个变量,因为我需要在每个问题上引入一个描述,现在我的输入文件会改变以下内容:

Microsoft恶意软件防护 - 远程执行代码漏洞 - 2018年4月安全更新 40697
红帽企业Linux 6 - java-1.8.0-openjdk多个漏洞 - RHSA-2018:1188 40861

我想构建这样的东西:

while read in; 
    curl --request POST --header "PRIVATE-TOKEN: xxxxxxxxxxx" "https://gitlab.com/api/v4/projects/xxxxx/issues?title=$in&description=https://myspecialink.com/portal/notifications/show/$id"; 
done < ~/input_file

例如:

  • $in:除了我在上面发出的粗体数字之外,一定是其他所有内容。
  • $id:必须只是上面粗体的数字。

有人可以帮助我指出实现这一目标的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

使用bash parameter expansion运算符来分割输入。

while read in; do
    id=${in##* }  # Remove everything up to last space
    in=${in% *}   # Remove everything from last space
    curl --request POST --header "PRIVATE-TOKEN: xxxxxxxxxxx" "https://gitlab.com/api/v4/projects/xxxxx/issues?title=$in&description=https://myspecialink.com/portal/notifications/show/$id"; 
done