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 }')
而且 sed
和 awk
部分可以只有一个 awk
fdisk -l | awk '/^[/]/{print }'
我尝试了 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 }')
而且 sed
和 awk
部分可以只有一个 awk
fdisk -l | awk '/^[/]/{print }'