如何在Bash脚本中将devs变量存储的设备挂载到mntpnt变量对应挂载点
Bash 设备批量挂载脚本修复方案
原脚本的核心问题是没有将设备、挂载点转为有序的数组结构,无法按索引一一对应挂载,同时普通字符串存储find结果容易出现解析异常。修改后的完整可运行脚本如下:
#!/bin/bash # 收集所有符合要求的设备,转为有序数组,排序保证顺序稳定 readarray -t devs < <(find /dev/sd{b..z}1 2>/dev/null | sort) dev_count=${#devs[@]} # 批量创建对应数量的挂载点 for ((i=1; i<=dev_count; i++)); do sudo mkdir -p /mnt/win${i} done # 收集挂载点列表,转为有序数组,排序规则和设备列表保持一致 readarray -t mntpnt < <(find /mnt/win* -maxdepth 0 -type d 2>/dev/null | sort) # 按索引一一对应执行挂载 for idx in "${!devs[@]}"; do # 挂载NTFS分区可替换为下行:sudo mount -t ntfs-3g "${devs[$idx]}" "${mntpnt[$idx]}" sudo mount "${devs[$idx]}" "${mntpnt[$idx]}" done
注意事项
readarray依赖Bash 4.0及以上版本,绝大多数主流Linux发行版均支持;如果使用老旧版本Bash,可以改用数组赋值写法devs=( $(find /dev/sd{b..z}1 2>/dev/null | sort) ),该写法不支持路径带空格的场景,普通使用足够- 两次find后都添加了
sort命令,保证设备列表和挂载点列表顺序严格匹配,不会出现挂载错位的问题 - 挂载NTFS格式分区需要先安装
ntfs-3g软件包,再替换脚本中对应的mount命令参数即可 - 如果需要开机自动挂载,可以将对应挂载规则写入
/etc/fstab文件,无需每次开机手动执行脚本
内容的提问来源于stack exchange,提问作者FelonVLAN
相关产品推荐
相关产品推荐

