如何使用if分支检测USB stick是否连接并执行备份及提示操作
检测USB存储设备连接的shell脚本实现
完全可以通过if分支实现U盘连接检测和对应业务逻辑,你提供的原始脚本思路是正确的,只需要修正语法细节、补充鲁棒性处理即可正常运行。
原始脚本存在的问题
- 语法错误:shell 中
[是内置测试命令,和后续参数之间必须保留空格,原写法[-e /sdb1]会触发命令不存在报错,需修正为[ -e /sdb1 ] - 逻辑风险:
/sdb1是U盘的块设备路径,直接往设备路径写入文件会破坏分区表,正常需要先将U盘挂载到指定目录,再往挂载目录写入数据,避免数据损坏。
修正后的可运行脚本
#!/bin/bash # 定义U盘挂载目录 USB_MOUNT_PATH="/mnt/usb" # 自动创建挂载目录(不存在时生效) mkdir -p ${USB_MOUNT_PATH} # 检测sdb1块设备是否存在(即U盘是否连接) if [ -e /dev/sdb1 ] then # 挂载U盘到指定目录 mount /dev/sdb1 ${USB_MOUNT_PATH} # 校验挂载结果 if [ $? -eq 0 ] then cp /home/backup/* ${USB_MOUNT_PATH}/ rm -r /home/backup/* echo "文件已成功传输至U盘" # 可选操作:文件传输完成后自动卸载U盘 # umount ${USB_MOUNT_PATH} else echo "U盘挂载失败,请检查设备分区是否正常" fi else echo "请确认您的U盘已正确连接到设备" fi
注意事项
- 如果你的系统中U盘的设备名不是
sdb1,可以插入U盘后执行lsblk命令查看对应设备名,替换脚本中的/dev/sdb1即可正常使用 - 该脚本涉及设备挂载、卸载操作,需要使用root权限运行
- 如果你的系统开启了U盘自动挂载,也可以直接检测挂载目录是否存在,比如写
if [ -d /media/当前用户名/U盘盘符 ]来判断是否连接,不需要额外手动挂载
内容的提问来源于stack exchange,提问作者Bm_bm
相关产品推荐
相关产品推荐

