未找到BASH命令

时间:2012-10-25 08:35:46

标签: linux bash shell

我正在尝试计算我的linux系统上的硬盘数量,我把以下几行放在一起。

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

现在它似乎只运行'find / sys / block -name'sdd''| wc -l'但是当我试图将它存储在变量中时,我在阅读它时会得到以下消息:

3: command not found

任何人都明白我哪里出错了?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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来完成整个工作:

简单地:

findhdds=(/sys/block/sd*)

计数

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...

答案 2 :(得分:-1)

试试这个:

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

希望这有帮助!