以下 bash 正则表达式将根据机器主机名设置内存变量
我们实验室里有很多不同名称的机器,如下小例子
presto01
presto02
hadoop01
hadoop02
mngmnthadoop01
mngmnthadoop01
.
.
.
例如,如果主机名 - 包含
presto
name 或 mngmntpresto
name ,则以下 bash 代码会将变量内存设置为 23G
hostname=$( hostname -s )
[[ $hostname =~ (^|^mngmnt)presto[[:digit:]]+$ ]] && memory=23G
[[ $hostname =~ (^|^mngmnt)hadoop[[:digit:]]+$ ]] && memory=12G
[[ $hostname =~ (^|^mngmnt)kafka[[:digit:]]+$ ]] && memory=10G
.
.
.
但据我所知 bash 中的 case 不支持正则表达式 但是按照我解释的那样执行我的代码并不那么优雅,我想知道我们是否可以做得更好?
使用捕获组提取主机名中
mngmnt
之后的部分,然后在 case
语句中使用它。
$BASH_REMATCH
是一个包含捕获组匹配的数组。
if [[ $hostname =~ ^(mngmnt)?([[:alpha:]]+)[[:digit:]]+$ ]]
then
case "${BASH_REMATCH[2]}" in
presto) memory=23G ;;
hadoop) memory=12G ;;
kafka) memory=10G ;;
esac
fi