bash - 将设备挂载到存储在变量中的挂载点

标签 bash shell mount

我正在执行此脚本,但我无法找到一种方法来将存储在“devs”变量中的设备相应地挂载到“mntpnt”中列出的挂载点。

希望我能清楚地解释我自己,这里是目前的脚本:

#!/bin/bash

count=$(find /dev/sd{b..z}1 2>/dev/null | wc -l)
dirnames=$(printf "win%d " $(seq $count))

for i in $dirnames
do
        sudo mkdir -p /mnt/$i
done

devs=$(find /dev/sd{b..z}1 2>/dev/null)
mntpnt=$(find /mnt/win*)

最佳答案

一种没有find的方法。

#!/usr/bin/env bash

shopt -s nullglob

disks=(/dev/sd[b-z]1)
count=${#disks[*]}

printf '%s\n' "${disks[@]}"

for ((i=0;i<count;i++)); do
  printf 'mkdir -p %s && mount %s %s\n'  "/mnt/win$i" "${disks[$i]}" "/mnt/win$i"
done

使用我的/dev/sd输出

/dev/sdb1
/dev/sdc1
/dev/sdd1
mkdir -p /mnt/win0 && mount /dev/sdb1 /mnt/win0
mkdir -p /mnt/win1 && mount /dev/sdc1 /mnt/win1
mkdir -p /mnt/win2 && mount /dev/sdd1 /mnt/win2

Im doing this script and I cant see to find a way to accordingly mount the devices stored in the "devs" variable into the mount points listed in "mntpnt".


使用数组存储数据。

mapfile -t devs < <(find /dev/sd{b..z}1 2>/dev/null)
mapfile -t mntpnt < <(find /mnt/win*)

for i in "${!devs[@]}"; do
  printf '%s %s\n' "${devs[$i]}" "${mntpnt[$i]}"
done

@innocent Bystander 的评论中所述使用

find /dev -name 'sd[b-z]1'

find /mnt -name 'win*'

虽然我建议使用:

find /mnt -name 'win[0-9]*'

  • 我更喜欢在我的示例代码中使用 glob,而不是 find

关于bash - 将设备挂载到存储在变量中的挂载点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69746459/

相关文章:

linux - 如何使用 awk 或 sed 在 bash 中调整列字段的长度?

linux - 远程 SSH 和命令集以及变量替换

linux - nfs mount shell 脚本中需要一元运算符

linux - 如何在 Bash 子 shell 中执行 shell 脚本?

regex - 如何在 bash 正则表达式替换中引用捕获

linux - 将 shell 中字符串中所有出现的 Ñ 替换为 N

java - Linux - 通过shell脚本运行jar文件时出现IO异常

java - 使用脚本运行 java jar 文件

linux - crontab 执行 shell 脚本 : Mount error(13): Permission denied

java - 如何通过 Java 在 Linux 上可靠地检测磁盘已关闭