我已经有了一个工作的解决方案,一段时间读取IFS处理csv文件,但我想在单个bash脚本中拥有这一切因为输入的数据永远不会改变。
数据是ip地址和名称的列表;
10.0.0.1,server1
10.0.0.2,server2
172.16.0.1,server3
192.168.0.1,server4
进程本身将根据需要运行ping/curl/wget,同时返回它正在执行的服务器和测试。
我可以在同一个文件中使用list函数运行IP列表并读取项目,但是这样我就不会得到服务器友好的名称。我的问题是,我该如何处理这个问题?我正在考虑创建数据数组,然后以某种方式解析为读取并分割令牌,但不确定如何。考虑将数据写入临时文件,然后再次读入,然后删除tmp文件,但这似乎很混乱。欢迎指教。
就工作解决方案而言(如果有人想提供而不仅仅是建议),上述数据的输出可以像这样回显;
Testing: $server, IP address: $ip, test 1.
那么我就按要求将测试子列。
感谢如果您想将数据直接包含在脚本中,而不是从单独的文件中读取数据,并且您已经使用循环读取现有数据,那么最简单的方法可能只是将数据文件的内容复制并粘贴到循环读取的heredoc中:
#!/usr/bin/env bash
declare -i testno=1 # Make testno an integer variable that uses arithmetic expansion
while IFS=, read -r ip server; do
echo "Testing: $server, IP address: $ip, test $testno"
testno+=1
done <<EOF
10.0.0.1,server1
10.0.0.2,server2
172.16.0.1,server3
192.168.0.1,server4
EOF
显示
Testing: server1, IP address: 10.0.0.1, test 1
Testing: server2, IP address: 10.0.0.2, test 2
Testing: server3, IP address: 172.16.0.1, test 3
Testing: server4, IP address: 192.168.0.1, test 4