我有一个 SD 卡读卡器。它是一个简单的 USB 设备,具有三个不同的位置,可以连接各种类型的 SD 卡尺寸。
/dev/sdb
当我将 SD 卡放入其中时,我可以通过以下命令发现 SD 卡可用...
df -h
blkid -o list
fdisk -l
是否可以制作一个自动执行以下操作的脚本:
- 告诉我 SD 卡可用于哪个设备块(例如:
/dev/sda
或/dev/sdb
等..) - 卸载 SD 卡。
我已经udevadm info -a -n /dev/sdb
为我的 SD 读卡器制定了独特的:ATTRS{idVendor}、ATTRS{idProduct} 和 ATTRS{serial} 详细信息。
脚本可以获取包含这些详细信息的设备块吗?
答案1
经过几个小时的谷歌搜索后我发现这个有用的答案。
使用df -h
后blkid -o list
我发现 SD 卡位于/dev/sdb
.然后我用来udevadm info -a -n /dev/sdb
查找我的 SD 读卡器(USB 设备)的 ProductID、VendorID 和序列号。
现在假设我将 SD 卡读卡器插入另一台计算机。此脚本将循环遍历所有/dev/sdX
设备块并报告 SD 卡读卡器连接到哪个设备块。
#!/bin/bash
# If ALL of these variables have values then you get "Success" below.
# If one or more of the variables do not contain a value (unset) or are null then you get "Failure" below.
# These are unique identifiers of the sd card reader
str_vendor="54jf"
str_product="775y"
str_serial="ID_SERIAL_SHORT=519S83946286"
for BLOCK in $(ls /dev | grep "^sd[a-z]$")
do
echo "Device block " $BLOCK
grep_vendor=$(udevadm info --query=all /dev/$BLOCK | grep $str_vendor)
grep_product=$(udevadm info --query=all /dev/$BLOCK | grep $str_product)
grep_serial=$(udevadm info --query=all /dev/$BLOCK | grep $str_serial)
echo $grep_vendor
echo $grep_product
echo $grep_serial
# From a comment to answer in above link... adding the colon [:] means to test if the variable is null OR unset
# The udevadm commands result in the grep_* variables becoming NULL if the command returns nothing. (not sure?)
# This is why the colon is needed. Note: Some reported that "This doesn't work in scripts where set -u is used"
if [ -z ${grep_vendor:+x} ] || [ -z ${grep_product:+x} ] || [ -z ${grep_serial:+x} ]; then
echo "Failure"
else
echo "Success"
fi
done
如何检查变量的状态来自这个线程。
需要此功能的原因是我只需运行脚本即可快速分区和格式化连接到 SD 卡读卡器的任何 SD 卡。
欢迎任何反馈!
干杯,