for i in $(cat image-test.txt); do size=$(rbd info images $i | grep "^size" | awk '{print $2}') echo "镜像 $i 的大小为 $size MB" sleep 1sdone执行失败
时间: 2024-02-24 16:56:33 浏览: 110
感谢您的反馈。根据您提供的信息,我发现上述 Shell 脚本存在语法错误,导致执行失败。
您可以尝试按照下面的方式修改 Shell 脚本:
```bash
#!/bin/bash
while read i; do
size=$(rbd info images "$i" | grep "^size" | awk '{print $2}')
echo "镜像 $i 的大小为 $size MB"
sleep 1s
done < image-test.txt
```
在这个版本的脚本中,我们使用 `while` 循环来读取 `image-test.txt` 文件中的每一行内容,并将其赋值给变量 `i`。然后,我们使用 `$()` 语法来执行 `rbd info images` 命令,并将输出传递给 `grep` 和 `awk` 命令进行处理。最后,我们将镜像名称和大小输出到终端,并暂停 1 秒钟。
请注意,为了避免因为镜像名称中包含空格等特殊字符而导致命令执行失败,我们在 `rbd info images` 命令中将 `$i` 用双引号括起来,表示将其作为一个整体传递给命令。
相关问题
for i in cat image-test.txt;do rbd info images $i;sleep 1s;done 获取image-test.txt里面镜像大小
如果您想要在上述的 Shell 脚本中获取 `image-test.txt` 文件中每个镜像的大小,可以使用 `rbd info` 命令的输出来解析镜像大小的信息。
`rbd info` 命令的输出类似于下面这样:
```
rbd image 'image-name':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.1d569c1d3a3a
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Thu Jul 15 10:27:43 2021
pattern_time: 0.000000000
```
可以看到,输出中包含了镜像的大小信息,即 `size` 字段。因此,您可以在 Shell 脚本中使用 `grep` 和 `awk` 命令来查找并提取每个镜像的大小信息。
具体来说,您可以将上述 Shell 脚本修改为:
```bash
for i in $(cat image-test.txt); do
size=$(rbd info images $i | grep "^size" | awk '{print $2}')
echo "镜像 $i 的大小为 $size MB"
sleep 1s
done
```
在这个版本的脚本中,我们使用 `grep` 命令和正则表达式 `^size` 来查找输出中以 `size` 开头的行,然后使用 `awk` 命令来提取第二个字段,也就是镜像的大小。最后,使用 `echo` 命令将镜像名称和大小输出到终端。
阅读全文