#!/bin/bash

disks=() while IFS= read -r line; do disk=$(echo '$line' | awk '{print $1}') size=$(echo '$line' | awk '{print $2}') if [ -z "$(lsblk '/dev/$disk' -n -o MOUNTPOINT)" ]; then disks+=('$disk $size') fi done < <(lsblk -d -o NAME,SIZE -n)

脚本解析:

  1. #!/bin/bash: 指定使用 Bash 解释器执行脚本。
  2. disks=(): 初始化一个名为 'disks' 的空数组。
  3. while IFS= read -r line; do: 循环读取命令或文件中的每一行,并将每一行赋值给变量 'line'。
  4. disk=$(echo '$line' | awk '{print $1}'): 使用 'echo' 命令输出 'line' 变量的内容,并将输出传递给 'awk' 命令。'awk' 命令选择输出中的第一列(以空格分隔),并将它赋值给 'disk' 变量。
  5. size=$(echo '$line' | awk '{print $2}'): 使用与上一行相同的 'echo' 和 'awk' 命令选择输出中的第二列,并将它赋值给 'size' 变量。
  6. if [ -z "$(lsblk '/dev/$disk' -n -o MOUNTPOINT)" ]; then: 检查由 'disk' 变量指定的磁盘是否已挂载。'lsblk' 命令用于获取磁盘信息,'-n' 和 '-o' 选项用于指定输出格式。如果磁盘未挂载,则条件为真,并执行以下代码块。
  7. disks+=('$disk $size'): 将 'disk' 和 'size' 变量(以空格分隔)附加到 'disks' 数组中。
  8. done < <(lsblk -d -o NAME,SIZE -n): 结束循环,并将 'lsblk' 命令(列出所有块设备及其大小)的输出重定向到循环作为输入。

脚本用途:

该脚本读取 'lsblk' 命令的输出,选择每个未挂载的块设备的名称和大小,并将它们添加到一个数组中。这对于需要选择可用磁盘以进行操作的自动化任务很有用。

Bash 脚本解析:查找未挂载的磁盘

原文地址: https://www.cveoy.top/t/topic/oFNt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录