希望使用一个 csv 文件,该文件使用标题作为每行都会更改的变量,但我想做一些简单的事情,例如while read -r
在每行运行一个或 For 循环。在循环期间,我希望每个条目都是该特定变量。例如,生成csr文件。
CSV 会是这样的:
server alias cn san environment
server1,srv1,srv1.domain.com,"dns:srv1.coolstuff.org,dns:srv1.morecoolstuff.org:,production
server2,srv2,srv2.domain.com,"dns:srv2.dev.coolstuff.org,dns:srv2.dev.morecoolstuff.org",development
等等...会贯穿
keytool -gen blah blah 使用条目的每一行
有人有主意吗。我知道剥猫皮有 8000 种方法。
答案1
我通常用于csvtool
在 bash 脚本中处理 CSV 文件。
像这样的事情应该做:
csvtool namedcol server,alias,cn,san,environment input.csv \
| csvtool -u TAB drop 1 - \
| while IFS=$'\t' read -r server alias cn san environment; do
echo "server: ${server}"
echo "alias: ${alias}"
echo "cn: ${cn}"
echo "san: ${san}"
echo "environment: ${environment}"
# do something with it...
keytool -genkey -alias "${alias}" -keyalg RSA -keysize 2048
done
第一次调用csvtool
根据名称输出 CSV 文件中的列,以防列的顺序不固定。
第二次调用去掉了 CSV 标头并进行了一些分隔符修改(使用“\t”而不是,
,以防万一您的输入数据可能包含逗号,但不包含制表符。
然后,我们在read
使用IFS
envvar 的调用中使用相同的分隔符;并用于read
为变量名称赋值。