如何用Shell脚本循环执行accuse命令统计30个账户的分区预算消耗?
批量检查账户预算消耗的Shell脚本实现
你需要批量遍历30个按accountName00XX命名的账户(从0040到0069),执行accuse -u "账户名"命令并提取结果,下面是修正后的实现方案:
原脚本的问题
你的初步思路存在几个Shell语法错误,导致无法正常运行:
- while循环缺少终止条件,会无限执行
- 计数器
COUNTER的初始化放在循环体内,每次循环都会重置为40,永远不会递增 - 变量赋值时不能有空格(
COUNTER = 40是错误写法,应该是COUNTER=40) - 账户名的数字部分没有补前导零,会生成
accountName40而非要求的accountName0040
推荐实现方案1:用for循环(更直观,适合固定次数的循环)
#!/bin/bash # 遍历40到69的数字(共30个账户) for ((i=40; i<70; i++)); do # 将数字格式化为4位,自动补前导零 account_num=$(printf "%04d" $i) # 拼接完整账户名 account="accountName${account_num}" # 执行命令并保存结果 consume_result=$(accuse -u "${account}") # 输出账户名和对应的预算消耗结果 echo "=== ${account} 预算消耗 ===" echo "${consume_result}" echo "" done
推荐实现方案2:用while循环(符合你最初的思路)
#!/bin/bash # 初始化计数器为起始值40 counter=40 # 循环30次(直到计数器达到70) while [[ $counter -lt 70 ]]; do account_num=$(printf "%04d" $counter) account="accountName${account_num}" consume_result=$(accuse -u "${account}") echo "${account} 消耗结果:" echo "${consume_result}" echo "------------------------" # 计数器自增1 counter=$((counter+1)) done
关键说明
printf "%04d" $i:确保数字格式为4位,自动补前导零,匹配账户命名规则- 把命令结果保存到变量
consume_result中,方便后续提取特定信息(比如用grep/awk过滤关键数值,示例:echo "${consume_result}" | awk '{print $3}',根据实际输出格式调整) - 输出时添加分隔符,方便区分不同账户的结果
内容的提问来源于stack exchange,提问作者Jose Ramon
相关产品推荐
相关产品推荐

