该脚本用于列出系统中所有未挂载的物理磁盘,并允许用户选择其中一个,最终输出所选磁盘的信息。

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) 

echo '可选择的物理磁盘和大小:' 
for ((i=0; i<${#disks[@]}; i++)); do 
  echo "$(($i+1))) ${disks[$i]}" 
done 

read -p '请输入需要选择的物理磁盘索引: ' disk_index 

if [ "$disk_index" -ge 1 ] && [ "$disk_index" -le "${#disks[@]}" ]; then 
  selected_disk="${disks[$((disk_index-1))]}" 
  disk_name=$(echo '$selected_disk' | awk '{print $1}') 
  disk_size=$(echo '$selected_disk' | awk '{print $2}') 

  echo '已选择的物理磁盘: $disk_name' 
  echo '磁盘大小: $disk_size' 
fi

脚本解释:

  1. 初始化 disks 数组:

    • disks=(): 定义一个名为 disks 的空数组,用于存储未挂载的物理磁盘信息。
  2. 遍历 lsblk 输出:

    • while IFS= read -r line; do ... done: 使用 while 循环逐行读取 lsblk -d -o NAME,SIZE -n 命令的输出。
    • disk=$(echo '$line' | awk '{print $1}'): 使用 awk 命令从当前行提取磁盘名称并赋值给 disk 变量。
    • size=$(echo '$line' | awk '{print $2}'): 使用 awk 命令从当前行提取磁盘大小并赋值给 size 变量。
    • if [ -z "$(lsblk "/dev/$disk" -n -o MOUNTPOINT)" ]; then ... fi: 使用 lsblk 命令检查当前磁盘是否已挂载。如果 MOUNTPOINT 为空,说明磁盘未挂载,则将磁盘信息追加到 disks 数组中。
  3. 显示可选择磁盘:

    • echo '可选择的物理磁盘和大小:': 打印提示信息。
    • for ((i=0; i<${#disks[@]}; i++)); do ... done: 使用 for 循环遍历 disks 数组,并输出每个磁盘的信息。
  4. 获取用户选择:

    • read -p '请输入需要选择的物理磁盘索引: ' disk_index: 提示用户输入需要选择的磁盘索引,并将输入保存到 disk_index 变量中。
  5. 验证用户输入:

    • if [ "$disk_index" -ge 1 ] && [ "$disk_index" -le "${#disks[@]}" ]; then ... fi: 检查用户输入的索引是否在有效范围内。
  6. 获取所选磁盘信息:

    • selected_disk="${disks[$((disk_index-1))]}": 从 disks 数组中获取用户选择的磁盘信息。
    • disk_name=$(echo '$selected_disk' | awk '{print $1}'): 从 selected_disk 中提取磁盘名称。
    • disk_size=$(echo '$selected_disk' | awk '{print $2}'): 从 selected_disk 中提取磁盘大小。
  7. 输出选择结果:

    • echo '已选择的物理磁盘: $disk_name': 输出选择的磁盘名称。
    • echo '磁盘大小: $disk_size': 输出选择的磁盘大小。

总结:

该脚本通过调用 lsblk 命令获取系统中所有磁盘信息,并使用 awk 命令提取需要的信息,最后根据用户选择输出相应的磁盘信息。

注意:

  • 该脚本需要在 Linux 系统环境下执行。
  • 使用 lsblk 命令获取磁盘信息时,需要确保用户具有足够的权限。
  • 脚本中使用 echo 命令输出信息,可以使用其他方法进行输出。
  • 该脚本只是一个示例,可以根据实际情况进行修改和扩展。
Linux 脚本:选择未挂载的物理磁盘

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

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