我编写了一个脚本,用于格式化 USB 闪存盘并将媒体放置在其中。 它可以帮助图书馆中的人们获取大量 HTML 和媒体来浏览历史数据(官方版本)。
我的所有脚本都能很好地完成工作(格式化、安装、复制、卸载、说“再见”)。但有一点:如何知道我应该浏览哪个设备。
只有一个条件:仍插入最多 1 个 U 盘。
通常每天会有 3 个人来将他们的(USB!)棒插入这台机器(它看起来像一台信用卡付款机)。
我的问题 请帮忙,我不知道该怎么做才能说出我的脚本:
嘿,唯一的 USB 设备是 /dev/sdX1
或者
嘿,我的 I/O 中没有 USB 闪存盘。
谢谢
答案1
使用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.
答案2
Ubuntu 有一个简洁的命令,允许使用标志指定的块设备上的选项udisksctl
查找信息。info
-b
现在,如果我们从 a 到 z 扫描每个块设备的输出udiskctl
,并在其中搜索“usb”字符串,我们就可以确定它是一个 USB 设备。
下面是一个可以完成这一任务的脚本:
#!/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 并忽略它。
以下是插入并移除两个 USB 后的示例输出:
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
请随意修改此脚本以满足您的需要。