Как знать, каким sdb является USB pendrive?

Я записал сценарий который форматы USB pendrive и медиа места на нем. Это помогает людям в библиотеке, заставляя набор HTML и медиа на нем просматривать исторические данные (официальная версия).

Весь мой сценарий делает задание хорошо (форматирование, монтирование, копирование, размонтирование, попрощайтесь). Но одна точка: как знать, который устройство должно я просматривать.

Одно единственное условие: существует все еще Максимальный 1 включенный pendrive.

Обычно существует 3 человека ко дню, приезжая в разъем их (USB!) всовывают машину (она похожа на машину маркера для кредитной карты).

Мой Вопрос помогите, я не знаю, что сделать для высказывания моего сценария:

Эй, единственное USB-устройство является/dev/sdX1

Или

Эй, никакой USB pendrive в моем вводе-выводе.

Спасибо

2
задан 20 August 2015 в 16:12

2 ответа

Используя find и awk

#!/bin/bash

# your code ...

# The name of your MAXimum 1 drive in /media/$USER
maximum1="MAXimum 1"

if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d |\
    awk '! /'"$maximum1"'/')" ]
then
    echo "Hey, the only USB device is $maximum1"
else
    echo "Hey, no USB pendrive in my I/O."
fi

# your code ...
<час>

Пример

% ls -laog /media/$USER

total 24
drwxr-x---+ 3  4096 Aug 20 15:16 .
drwxr-xr-x  5  4096 Aug 18 08:43 ..
drwxr-xr-x  8 16384 Jan  1  1970 STORE N GO

% maximum1="STORE N GO"; if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d | awk '! /'"$maximum1"'/')" ]; then echo "Hey, the only USB device is $maximum1"; else echo "Hey, no USB pendrive in my I/O."; fi
Hey, the only USB device is STORE N GO

% maximum1="NOT STORE N GO"; if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d | awk '! /'"$maximum1"'/')" ]; then echo "Hey, the only USB device is $maximum1"; else echo "Hey, no USB pendrive in my I/O."; fi
Hey, no USB pendrive in my I/O.
1
ответ дан 2 December 2019 в 03:52

Ubuntu имеет аккуратную команду udisksctl, которая позволяет искать информацию с info опция на блочном устройстве, указанном с эти -b флаг.

Теперь, если мы сканируем вывод udiskctl для каждого блочного устройства от до z и ищем строку 'usb' в нем, мы можем быть уверены, что это - USB-устройство.

Bellow является сценарием, который делает точно что:

#!/bin/bash

FOUND=0
for var in {a..z}; do 

    udisksctl info -b /dev/sd$var 2>/dev/null | grep -q 'usb'; 
    if [ $(echo $?) -eq 0 ]; then 
        echo " FOUND USB DEVICE /dev/sd$var "; 
        FOUND=1
    fi 


done 

if [ $FOUND -eq 0 ]; then
    echo "NO USB DEVICES FOUND"
fi

Там мы имеем FOUND флаг, который просто служит цели не распечатать "USB-УСТРОЙСТВА, НАЙДЕННЫЕ", если... хорошо..., если никакие USB-устройства не найдены! Иначе, если мы находим по крайней мере одно USB-устройство, мы устанавливаем тот флаг на 1 и игнорируем его.

Вот демонстрационный вывод с двумя включенными USBs и затем удаленными:

CURRENT DIR:[/home/xieerqi]
$ ./bin/sh/findusb.sh                                                                                                                         
 FOUND USB DEVICE /dev/sdb 
 FOUND USB DEVICE /dev/sdc 

CURRENT DIR:[/home/xieerqi]
$ ./bin/sh/findusb.sh                                                                                                                         
NO USB DEVICES FOUND

Не стесняются изменять этот сценарий для удовлетворения потребности.

1
ответ дан 2 December 2019 в 03:52

Другие вопросы по тегам:

Похожие вопросы: