我嘗試了unix.com 中的一些代碼,將其修改為充當設備選擇器。
#!/bin/bash
count=0
for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print $1}'`
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 的身份運行腳本,順便說一句)
在此先感謝您的幫助。
uj5u.com熱心網友回復:
像這樣的東西,
#!/usr/bin/env bash
count=0
for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print $1}'`; 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回圈。
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 $1}')
另外,sed與 awk部分可以只是一個awk
fdisk -l | awk '/^[/]/{print $1}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350253.html
