我想:
更具体地说:
#! /bin/bash
target_ORG=$(ls /usr/local/etc/ini/system/ORG)
target_DOMAIN=$(ls /usr/local/etc/ini/system/DOMAIN)
target_SITE=$(ls /usr/local/etc/ini/system/SITE)
target_DEVICE=$(ls /usr/local/etc/ini/system/DEVICE)
target_VOLUME=$(ls /usr/local/etc/ini/system/VOLUME)
target_HOST=$(ls /usr/local/etc/ini/system/HOST)
instanceList=$(ls /dev/disk/by-partlabel)
for i in $instanceList
do
instance_ORG=${i:0:3}
instance_DOMAIN=${i:4:3}
instance_SAN=${i:8:1}
instance_SITE=${i:10:1}
instance_DEVICE=${i:12:5}
instance_VOLUME=${i:18:6}
<PSEUDOCODE>
Compare the instance_* strings with the target_* strings
IF they all match
THEN
mount $i /path/to/mountpoint
</PSEUDOCODE>
done
地点:
可用的具体设备随时间变化
partlabel格式为:xxx-xxx-x-x-xxxxx-xxxxxx(如001-001-1-1-00001-000001),表示一个磁盘分区为ORG-DOMAIN-SAN-SITE-DEVICE-VOLUME
/usr/local/etc/ini/system/* 目录每个包含一个以相应子字符串命名的文件 - 允许通过简单地重命名(而不是必须操作文件的内容)来进行更改
/path/to/mountpoint 是匹配的 $instance_SAN 的挂载点 - 即 ...
xxx-xxx-1-x-xxxxx-xxxxxx 安装到 /path/to/1
xxx-xxx-2-x-xxxxx-xxxxxx 挂载到 /path/to/2
xxx-xxx-3-x-xxxxx-xxxxxx 安装到 /path/to/3
for 循环的问题在于,当我希望它保留第一个找到的实例时,它只会将下一个值分配给 $instance_* 变量 - 所以,xxx-xxx-1-1-xxxxx -xxxxxx 将被 xxx-xxx-1-2-xxxxx-xxxxxx 等覆盖。
A case 测试将找到并保留第一个找到的实例,但不会迭代其余的 $instanceList
例如给予
/usr/local/etc/init/system/ORG/001
/usr/local/etc/init/system/DOMAIN/001
/usr/local/etc/init/system/SITE/1
/usr/local/etc/init/system/DEVICE/00001
/usr/local/etc/init/system/VOLUME/000001
/usr/local/etc/init/system/HOST/000001
...和...
$instanceList 的:
001-001-1-1-00001-000001
001-001-1-1-00001-000002
001-001-1-2-00001-000001
001-001-1-2-00001-000002
001-001-2-2-00001-000001
001-001-2-2-00002-000001
001-001-3-5-00001-000002
001-001-1-1-00001-000001 将挂载到 /path/to/1,其他所有内容都将被忽略。
001-001-1-1-00001-000001 应该安装到 /path/to/1
001-001-1-1-00001-000002 应该被忽略
001-001-1-2-00001-000001 应该被忽略
001-001-1-2-00001-000002 应该被忽略
001-001-2-2-00001-000001 应该安装到 /path/to/2
001-001-2-2-00002-000001 应该被忽略
001-001-3-5-00001-000002 应该安装到 /path/to/3
嵌套 if 测试太脆弱。
多个case测试可以工作
<PSEUDOCODE>
Case of $instance_SAN=1: mount device/partion to /path/to/$instance_SAN
Case of $instance_SAN=2: mount device/partion to /path/to/$instance_SAN
Case of $instance_SAN=3: mount device/partion to /path/to/$instance_SAN
</PSEUDOCODE>
但我无法全神贯注地思考如何遍历 $instanceList 而不是在第一场比赛后简单地中断。
我意识到这可能是非常基本的,但恐怕我的 bash 不是很高级。
但是,我想避免使用诸如 autoFS 之类的解决方案,因此该方法只依赖于核心 Linux 安装;即使是像最小的 Arch/Gentoo,甚至 LFS 这样的东西,也应该能够在不需要任何额外实用程序的情况下提供所有东西——而且,这必须在登录前完成,所以,我不认为“第三方”解决方案无论如何都会起作用。