我正在撰寫一個 shell 腳本來安裝 Arch Linux,目前,我有一個非常基本的磁盤選擇,但它沒有提供足夠的資訊,如何添加額外的資訊,如磁盤名稱和大小,但保持$DISK變數相同(即:/dev/nvme0n1)
select_disk () {
count=0
for device in `lsblk -d | tail -n 2 | cut -d" " -f1`; do
count=$((count 1))
dev[$count]=$device
printf '%s: %s\n' "$count" "$device"
done
read -rp "Select disk (numbers 1-$count): " selection
DISK="/dev/${dev[$selection]}"
echo "$DISK" > /tmp/disk
echo "Installing on $DISK."
}
uj5u.com熱心網友回復:
您可以使用該標志使用列格式lsblk提供。此外,您可以通過使用正是這樣做的標志-o來避免tail(我認為是洗掉標題) 。像這樣的東西:lsblk-n
select_disk () {
count=0
# by default the 'for' loop splits by spaces, change that
# to split by breaklines by redefining IFS
IFS=$'\n'
for device_info in `lsblk -d -n -o NAME,TYPE,SIZE`; do
count=$((count 1))
device_name=$(echo $device_info | cut -d" " -f1)
dev[$count]=$device_name
printf '%s: %s\n' "$count" "$device_info"
done
read -rp "Select disk (numbers 1-$count): " selection
DISK="/dev/${dev[$selection]}"
echo "$DISK" > /tmp/disk
echo "Installing on $DISK."
}
這里只顯示了 NAME、TYPE 和 SIZE,但是你可以添加你想要的所有列(用逗號分隔)。有關所有可能的選項,請參閱lsblk -h(幫助)。
uj5u.com熱心網友回復:
我不確定您所說的“磁盤名稱”是什么,但是...
讓我們考慮一下,在您的“for;do..done”回圈中,$device 是您映射的設備名稱(即:sda)。
您可能會得到以下資訊:
1)設備標簽(如果存在):
lsblk "/dev/${device}" -dn -o LABEL
2)設備供應商:
lsblk "/dev/${device}" -dn -o VENDOR
3)設備尺寸(人類可讀格式)
lsblk "/dev/${device}" -dn -o SIZE
以及多個其他資訊,例如:
4)設備型別:
lsblk "/dev/${device}" -dn -o TYPE
5)硬體塊大小
lsblk "/dev/${device}" -dn -o PHY-SEC,LOG-SEC
6)分配給該物件的Linux所有者和組
lsblk "/dev/${device}" -dn -o OWNER,GROUP
或以下串列中的任何內容:
名稱 KNAME MAJ:MIN FSTYPE MOUNTPOINT LABEL UUID PARTTYPE PARTLABEL PARTUUID PARTFLAGS RA RO RM HOTPLUG 型號 SERIAL SIZE 狀態 OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC -MAX DISC-ZERO WSAME WWN RAND PKNAME HCTL TRAN 子系統 REV 供應商磁區
希望能幫助到你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491428.html
上一篇:更改awk找到結果的顯示格式
