将grep结果设置为多变量

时间:2019-02-15 11:19:05

标签: bash macos shell awk command-line

我有一个脚本来检查macOS上的证书身份

CRT=$(security find-identity -v | grep my-cert.test.com)

结果是:

1) 13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658 "my-cert.test.com"
2) 5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5 "my-cert.test.com"
3) JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61L "my-cert.test.com"`

使用awk提取身份信息

CRT=$(security find-identity -v | grep my-cert.test.com | awk '{ print $2}’)

结果是:

13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658 
5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5 
JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61L

这意味着我有3个证书,并且使用awk我已经分离了其余证书,只是在多个结果之间留有空格。现在我想在grep结果上面设置一个变量。如果grep的结果是3行,则如上所述,将其设置为不同的变量。

示例:

ONE=13DB7FSDF188E2C4454KK33E5E0A7B4LK6714658
TWO=5L56971E29DFA20LHD5E2CEA9DF6J7C46C2D0FD5
THREE=JS34KL78LG620CJKMDFBV5K1K56MNCL9M6SD61I4

,然后继续。

因此,我可以在其他脚本中使用这些变量。 grep结果可以是1或3或更大的随机数。

2 个答案:

答案 0 :(得分:4)

请尝试以下操作,可以将awk的结果保存到数组中,以后也可以在程序中进一步使用该数组的值。(从{{ 1}}可以自行处理字符串部分的搜索)

grep

现在,您可以通过以下方式访问(所有阵列的时间)名为awk的阵列。

CRT=($(security find-identity -v | awk '/my-cert.test.com/{ print $2}'))

这就是为什么如果我们需要将相同类型的许多值存储在许多变量中,那么数组就存在的原因,因此尽管使用了N个变量,也要使用数组并使用索引访问它们的值。

答案 1 :(得分:0)

set - $CRT; index=0; while [ "$1" ]; do let index=$index+1; eval var${index}="$1"; shift; done

这将为您拥有的身份创建变量var1,var2等。