Bash

用於為 dd 選擇磁碟的 bash 腳本(lsblk?)

  • March 12, 2021

我正在嘗試製作一個腳本來選擇我應該添加到哪個磁碟。

一個用於選擇選項的簡單 bash 腳本的工作方式如下:

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
   case $opt in
       "Option 1")
           echo "you chose choice 1"
           ;;
       "Option 2")
           echo "you chose choice 2"
           ;;
       "Option 3")
           echo "you chose choice $REPLY which is $opt"
           ;;
       "Quit")
           break
           ;;
       *) echo "invalid option $REPLY";;
   esac
done

lsblk是我知道讀取磁碟的最佳方式:

lz@vm:~/Downloads$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  55,5M  1 loop /snap/core18/1988
loop1    7:1    0   219M  1 loop /snap/gnome-3-34-1804/66
loop2    7:2    0  64,8M  1 loop /snap/gtk-common-themes/1514
loop3    7:3    0 138,5M  1 loop /snap/inkscape/8049
loop4    7:4    0    51M  1 loop /snap/snap-store/518
loop5    7:5    0 162,9M  1 loop /snap/gnome-3-28-1804/145
loop6    7:6    0  31,1M  1 loop /snap/snapd/11036
loop7    7:7    0  32,3M  1 loop /snap/snapd/11107
sda      8:0    1  14,9G  0 disk 
└─sda1   8:1    1  14,9G  0 part 
sr0     11:0    1  1024M  0 rom  
vda    252:0    0   300G  0 disk 
├─vda1 252:1    0   512M  0 part /boot/efi
├─vda2 252:2    0     1K  0 part 
└─vda5 252:5    0 299,5G  0 part /

你可以看到我的機器df -h上沒有列出:/dev/sda

lz@vm:~/Downloads$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            4,5G     0  4,5G   0% /dev
tmpfs           924M  1,6M  922M   1% /run
/dev/vda5       294G   62G  218G  23% /
tmpfs           4,6G   26M  4,5G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           4,6G     0  4,6G   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/1988
/dev/loop5      163M  163M     0 100% /snap/gnome-3-28-1804/145
/dev/loop2       65M   65M     0 100% /snap/gtk-common-themes/1514
/dev/loop4       52M   52M     0 100% /snap/snap-store/518
/dev/loop1      219M  219M     0 100% /snap/gnome-3-34-1804/66
/dev/loop7       33M   33M     0 100% /snap/snapd/11107
/dev/loop3      139M  139M     0 100% /snap/inkscape/8049
/dev/loop6       32M   32M     0 100% /snap/snapd/11036
/dev/vda1       511M  4,0K  511M   1% /boot/efi
tmpfs           924M   60K  924M   1% /run/user/1000
/dev/fuse       250G     0  250G   0% /run/user/1000/keybase/kbfs

我不知道為什麼。

無論如何,列出這些磁碟(不是分區/dev/sda1,只是磁碟)的最佳方法是什麼,以便我可以創建一個選項列表來選擇一個並dd添加到它?有沒有辦法用 lsbk 格式化這些,以便我可以插入到我的 bash 腳本中?

此外,最好忽略腳本所在的磁碟,因此我可以嘗試阻止寫入包含系統的磁碟。

嘗試lsblk -d

-d, --nodeps不要列印設備持有者或奴隸。(…)

如何解析此命令生成的表?

lsblk -d | tail -n+2 | cut -d" " -f1

如果我有辦法收集名稱和尺寸,這樣我就可以輸入選項了

lsblk -d | tail -n+2 | awk '{print $1" "$4}'

我應該假設它只是 /dev/NAME 嗎?

是的,那是設備的位置。您可以使用test -b它來檢查它。

-b FILE 文件存在並且是塊特殊的

if [ -b /dev/vda ]; then
 echo "is a block device"
fi

如果你用它檢查你的設備,ls -l /dev/vda它應該以b

b rw-rw—- 1 root disk (…) /dev/vda 開頭

最後lsblk列出塊設備 - 無需仔細檢查。

引用自:https://unix.stackexchange.com/questions/638853