在/usr/hdp
文件夹下,我们只能有一个子文件夹
2.6.5.0-292
2.6.4.0-91
2.6.0.3-8
示例
ls /usr/hdp/
2.6.5.0-292 current stack file.txt
我想使用下面的cli,$VERSION
可能是上面的版本之一
/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh
然后我在我的bash脚本中做了以下操作
[[ -d /usr/hdp/2.6.5.0-292 ]] && VERSION=2.6.5.0-292
[[ -d /usr/hdp/2.6.4.0-91 ]] && VERSION=2.6.4.0-91
[[ -d /usr/hdp/2.6.0.3-8 ]] && VERSION=2.6.0.3-8
/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh
在没有[[ -d ...... ]]
测试的情况下,我们可以更有效地进行上述设置吗?
我认为没有任何方法可以提高效率,如果你的要求是目录应该存在,那么就没有办法避免检查。但你至少可以通过使用循环来避免重复你自己。
for ver in 2.6.5.0-292 2.6.4.0-91 2.6.0.3-8; do
if [[ -d "/usr/hdp/$ver" ]]; then
VERSION=$ver
break
fi
done
break
使得脚本一旦在列表中找到最新版本就跳过旧版本;你原来的代码会奇怪地反其道而行之。如果您确实想要最旧的可用版本,请将参数的顺序反转为for
。
一旦找到匹配项,就不检查任何其他项,这是一种实际的优化,尽管这是一个非常小的优化。
如果只能拥有文件夹2.6.5.0-292
、2.6.4.0-91
或2.6.0.3-8
中的一个,则分配VERSION=2.6.*
将扩展到唯一且正确的文件夹。
所以你的脚本可能看起来像:
VERSION=2.6.*
/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh