Я записал сценарий который форматы USB pendrive и медиа места на нем. Это помогает людям в библиотеке, заставляя набор HTML и медиа на нем просматривать исторические данные (официальная версия).
Весь мой сценарий делает задание хорошо (форматирование, монтирование, копирование, размонтирование, попрощайтесь). Но одна точка: как знать, который устройство должно я просматривать.
Одно единственное условие: существует все еще Максимальный 1 включенный pendrive.
Обычно существует 3 человека ко дню, приезжая в разъем их (USB!) всовывают машину (она похожа на машину маркера для кредитной карты).
Мой Вопрос помогите, я не знаю, что сделать для высказывания моего сценария:
Эй, единственное USB-устройство является/dev/sdX1
Или
Эй, никакой USB pendrive в моем вводе-выводе.
Спасибо
Используя 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.
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
Не стесняются изменять этот сценарий для удовлетворения потребности.