gpt4 book ai didi

linux - 无法回显 "for loop"内的变量值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:48 25 4
gpt4 key购买 nike

我正在编写一个 bash 脚本来收集每个服务器的硬件信息。但是在脚本的某些部分,我无法打印在单个 echo 命令中多次给出的变量值

#!/bin/bash
NO=$(df -hT | grep ext | wc -l)
for i in $(seq 1 $NO);do export PART$i=$(df -hT | grep ext | head -$i | tail -1 | awk '{print $1}'); done
echo "Total $NO ext partitions found"
for i in $(seq 1 $NO);do echo "Ext Partition$i is ${PART$i} ";done

在我的系统中,我有两个 ext 分区,因此变量 $NO 将存储值 2。

我期望和想要的输出如下:

Total 2 ext partitions found
Ext Partition1 is /dev/sda7
Ext Partition2 is /dev/sda8

但是我无法按预期打印“$PART$i”。现在我在最后一行收到“for loop”错误。

# /root/disk.sh
Total 2 ext partitions found
/root/disk.sh: line 5: Ext Partition$i is ${PART$i} : bad substitution

你能告诉我如何在最后一个for循环中正确调用和回显PART1和PART2的值吗?

最佳答案

我建议改用数组变量:

#!/bin/bash
NO=$(df -hT | grep ext | wc -l)
declare -a PART
for i in $(seq 1 $NO);do PART[$i]=$(df -hT | grep ext | head -$i | tail -1 | awk '{print $1}'); done
echo "Total $NO ext partitions found"
for i in $(seq 1 $NO);do echo "Ext Partion$i is ${PART[$i]} ";done

您可以进一步简化此代码:

PART=( $(df -hT | awk '/ext/ { print $1 }') )
NO=${#PART[@]}
echo "Total $NO ext partitions found"
for i in ${!PART[@]}; do echo "Ext Partion$i is ${PART[$i]} "; done

请注意,简化确实将索引更改为基于 0 的索引。

关于linux - 无法回显 "for loop"内的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35558819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com