arrays - 将 for 循环的输出保存在 Bash 的数组中
问题描述
我正在尝试编写一个自定义脚本来监视“n”台服务器的磁盘使用空间。我有两个数组,一个数组包含实际使用情况,另一个数组包含允许的限制。我想遍历使用过的存储阵列;确定百分比,将其四舍五入到最接近的整数并在控制台上输出相同的值,以便稍后保存在数组中。
我有以下代码可以做到这一点:
readarray -t percentage_storage_limit <<< "$(for ((j=0; j < ${#storage_usage_array[@]}; j++));
do $(awk "BEGIN {
ac=100*${storage_usage_array[$j]}/${storage_limit_array[$j]};
i=int(ac);
print (ac-i<0.5)?i:i+1
}");
done)";
storage_usage_array 和 storage_limit_array 的长度相同。storage_usage_array 中的索引对应于服务器上使用的存储, storage_limit_array 上的索引对应于同一服务器上的限制。
尽管上述语句按预期运行,但我看到如下“找不到命令错误”,这导致这些输出未保存在“percentage_storage_limit”数组中。
8: command not found
4: command not found
我在这里错过了什么吗?任何帮助将非常感激。
解决方案
我认为您的语法过于复杂。我只会在 for 循环中累积数组
percentage_storage_limit=()
for ((j=0; j < ${#storage_usage_array[@]}; j++)); do
percentage_storage_limit+=( $(
awk -v u="${storage_usage_array[$j]}" -v l="${storage_limit_array[$j]}" '
BEGIN {
ac = 100 * u / l
i = int(ac)
print (ac-i < 0.5) ? i : i+1
}
'
) )
done
推荐阅读
- react-native - 反应上下文未定义
- dictionary - 将 mapAsync 提取到 AkkaStreams 中的方法
- matlab - WORHP - Matlab 界面,LEQSOL 中的错误:符号步骤
- javascript - 如何在Javascript中动态更新对象?
- amazon-s3 - 允许访问以特定名称结尾的存储桶的 AWS S3 策略
- excel - 将公式中的所有不同日期替换为 Excel 中的昨天日期
- html - 示例页面布局在 Chrome 中被破坏
- javascript - array.contains firebase 参考对象
- ios - 为什么我的代码可以在 Xcode Playground 中运行,但不能在我的项目中运行?
- getstream-io - 在聊天中长时间不活动后的 CORS