Bash
用於為 dd 選擇磁碟的 bash 腳本(lsblk?)
我正在嘗試製作一個腳本來選擇我應該添加到哪個磁碟。
一個用於選擇選項的簡單 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
列出塊設備 - 無需仔細檢查。