bash脚本读取用户输入并将其导出为变量

时间:2018-08-18 08:56:50

标签: bash shell openssl csr

我正在尝试制作一个脚本来通过openssl生成csr文件。我想提示用户提供其他alt_names。 openssl.cnf是静态的 而且在里面做不了多少。用户需要1个SAN就可以了 因此我可以通过系统变量将其导出。

[alt_names] 
DNS.1=${ENV::SAN}

如果我需要更多的SAN,则配置下的语法如下:

[alt_names]
DNS.1=test.example.com
DNS.2=www.example.com
IP.1=1.1.1.1
IP.2-1.1.2.2

因此,我找不到任何其他示例,该示例如何自动实现对opensl命令的期望,并将其粘贴到cli中,如下所示:

openssl x509 -req -extfile <(printf "subjectAltName=DNS:www.exmple.com,DNS:test.example.com,IP:1.1.1.1") -days 365 

我当时正在考虑在shell中使用读取功能来提示用户提供他的DNS:xxxxxx或IP:xxxx的完整内容,直到用户按[enter]键为止 我找到了一些示例,但无法弄清楚如何将其导出到openssl命令。

我发现的一个例子是:

    array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
    [[ $line ]] || break  # break if line is empty
    array+=("$line")
done

printf '%s
' "Items read:"
printf '  «%s»
' "${array[@]}"

1 个答案:

答案 0 :(得分:0)

实际上我认为我已经解决了这个问题... 我在上面的示例中使用了读取函数和数组,这正是我想要在此处实现的目标。

"openssl x509 -req -extfile <(printf "subjectAltName=${array[@]}") -days 365 "

如果有人有更好的解决方案,请随时在此处提交。

谢谢

自拍