一个脚本,告诉我 SD 卡读卡器中的 SD 卡附加到什么设备上

一个脚本,告诉我 SD 卡读卡器中的 SD 卡附加到什么设备上

我有一个 SD 卡读卡器。它是一个简单的 USB 设备,具有三个不同的位置,可以连接各种类型的 SD 卡尺寸。

/dev/sdb当我将 SD 卡放入其中时,我可以通过以下命令发现 SD 卡可用...

df -h

blkid -o list

fdisk -l

是否可以制作一个自动执行以下操作的脚本:

  1. 告诉我 SD 卡可用于哪个设备块(例如:/dev/sda/dev/sdb等..)
  2. 卸载 SD 卡。

我已经udevadm info -a -n /dev/sdb为我的 SD 读卡器制定了独特的:ATTRS{idVendor}、ATTRS{idProduct} 和 ATTRS{serial} 详细信息。

脚本可以获取包含这些详细信息的设备块吗?

答案1

经过几个小时的谷歌搜索后我发现这个有用的答案

使用df -hblkid -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 卡。

欢迎任何反馈!

干杯,

相关内容