找不到bash命令



我正在尝试计算Linux系统上HDD的数量,我已经组合了以下行。

findhdds=$(find /sys/block -name 'sd*' | wc -l)

现在似乎在运行'find/sys/block -name'sd*'|时似乎可以工作。wc -l'但是,当试图将其存储在变量中时,我会在阅读时会收到以下消息:

3: command not found

有人知道我在哪里出了问题?

如果将命令存储到变量中,则直接调用此变量将执行结果。这就是为什么它试图启动命令3的原因,显然不存在。您必须打印变量才能查看结果:Echo $ findhdds

bug

的说明

wc的某些版本/实现制作了格式化的输出,并将空格放在您的值之前,请尝试:

$ wc -l < <(find /sys/block/ -name 'sd*')
  3

请注意,wc的输出包含空间。现在尝试:

$ findhdds= 3
bash: 3: command not found

获得SO的问题中报告的错误。

两个解决方案(以及更多...):

.1计算答案以确保这成为一个数字:

findhdds=$((0+$(find /sys/block/ -name 'sd*' | wc -l)))

或(我喜欢这个):

findhdds=$[$(find /sys/block/ -name 'sd*' | wc -l)]

他们两个都只能存储数字:

echo $findhdds 
3

.2存储设备名称在数组中一个计数成员:

您可以使用bash做wc做的事情:

$ findhdds=($(find /sys/block/ -name 'sd*'))
$ echo $findhdds
/sys/block/sda
$ echo ${#findhdds[@]}
3
$ echo ${findhdds[2]}
/sys/block/sdc

纯bash

完全,在特定情况下,您可以将bash用于整个工作:

简单:

findhdds=(/sys/block/sd*)

count

echo ${#findhdds[@]}
3

索引

echo ${!findhdds[@]}
0 1 2

所有磁盘(带有完整路径)

echo ${findhdds[@]}
/sys/block/sda /sys/block/sdb /sys/block/sdc

其中之一

echo ${findhdds[0]}
/sys/block/sda

仅设备名称

echo ${findhdds[0]##*/}
sda
echo ${findhdds[@]##*/}
sda sdb sdc

...可以在循环中处理:

for devnam in ${findhdds[@]##*/} ; do
    printf "Doing something with device: %s...n" $devnam
  done
Doing something with device: sda...
Doing something with device: sdb...
Doing something with device: sdc...

尝试这个:

findhdds=`find /sys/block/ -name 'sd*' | wc -l`

希望这会有所帮助!

相关内容

  • 没有找到相关文章

最新更新