【问题标题】:Saving the output of a for loop in an array in Bash将 for 循环的输出保存在 Bash 的数组中
【发布时间】:2018-11-13 15:52:15
【问题描述】:

我正在尝试编写一个自定义脚本来监控“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

我在这里遗漏了什么吗?任何帮助将不胜感激。

【问题讨论】:

    标签: arrays bash percentage


    【解决方案1】:

    我认为您的语法过于复杂。我只会在 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
    

    【讨论】:

    • 非常感谢您的回答。它有很大帮助,但是在第 7 行,你为什么要将 val 自己分开?
    【解决方案2】:

    它不起作用的原因是,当你将 awk 包含在 $(...) 中时,你告诉 bash 执行它的输出,因此你想要执行 84 并且 bash 错误告诉你它没有'找不到这样的命令。只是不要将 awk 包含在 $(...) 中,您想捕获它的输出,而不是执行它的输出。最好使用&lt; &lt;(...) 然后&lt;&lt;&lt;"$(...)"

    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
    )
    

    无论如何,格伦的回答显示了这样做的“好”方法,无需readarray 电话。

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 2019-10-24
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 2010-12-13
      • 2021-07-11
      • 2019-02-02
      • 2018-05-24
      相关资源
      最近更新 更多