SD 카드 리더기가 있습니다. 다양한 크기의 SD 카드를 연결할 수 있는 세 가지 위치의 간단한 USB 장치입니다.
/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 카드를 빠르게 분할하고 포맷할 수 있기 때문입니다.
어떤 피드백이라도 환영합니다!
건배,