bash - 如何创建一个 disk/partition 菜单?

bash - How to create a disk/partition menu?

我尝试了 unix.com 中的一些代码,将其修改为充当设备选择器。

#!/bin/bash
count=0
for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print }'`
do
  count=$((count+1))
  dev[$count]=$device
  echo "$count: $device"
done
echo "Select volume (numbers 1-$count):"
read selected_number
selected_device=$dev[$selected_number] 
echo "The device you selected is: $selected_device"

由于某种原因,行 selected_device=$dev[$selected_number] 未按预期工作。 我想我犯了一些初学者的语法错误。

它给出的输出是

1: /dev/nvme0n1p1
2: /dev/nvme0n1p2
3: /dev/nvme0n1p3
4: /dev/nvme0n1p4
5: /dev/nvme0n1p5
6: /dev/nvme0n1p6
7: /dev/nvme0n1p7
8: /dev/mmcblk0p1
Select volume (numbers 1-8):
5
The device you selected is: [5]

虽然我会期待 The device you selected is: /dev/nvme0n1p5

(我是 运行 作为 sudo 的脚本,顺便说一句)

在此先感谢您的帮助。

像这样,

#!/usr/bin/env bash

count=0

for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print }'`; do
  count=$((count+1))
  dev[$count]=$device
  printf '%s: %s\n' "$count" "$device"
done

read -rp "Select volume (numbers 1-$count): " selected_number

printf 'The device you selected is: %s\n' "${dev[$selected_number]}"

尽管我建议使用 while + read 循环和 Process Substitution.

while IFS= read -r device; do
  count=$((count+1))
  dev[$count]=$device
  printf '%s: %s\n' "$count" "$device"
done < <(fdisk -l | sed -n '/^[/]/p' | awk '{print }')

而且 sedawk 部分可以只有一个 awk

fdisk -l | awk '/^[/]/{print }'