我们在机器主机名上测试了以下脚本 -
script.sh
- presto-data1-01
,但似乎正则表达式presto-data+([[:digit:]])
不够好
机器主机为例:
presto-data1-01
presto-data1-02
presto-data1-03
或
presto-data2-01
presto-data2-02
presto-data2-03
等等
我的脚本和示例
more /tmp/script.sh
#!/usr/bin/env bash
hostname=$(hostname -s)
shopt -s extglob
case $hostname in
presto+([[:digit:]]))
bash /home/presto.sh;;
presto-data+([[:digit:]]))
bash /home/presto-data.sh;;
*) echo "Unrecognized hostname $hostname" ;;
esac
bash /tmp/script.sh
Unrecognized hostname presto-data1-01
我的机器名称:
[root@presto-data1-01 # hostname -s
presto-data1-01
我们需要在正则表达式中修复 -
presto-data+([[:digit:]])
,以便匹配 presto-data1
并忽略 presto-data1
之后的字符“-01
”
您是否需要强制执行某种模式,或者简化和重新排序您的全局就足够了?
case $hostname in
presto-data*)
bash /home/presto-data.sh;;
presto*)
bash /home/presto-data.sh;;
*)
printf 'Unrecognized hostname %s\n' "$hostname" 1>&2;;
esac
使用
*
忽略最后一个字符
#!/usr/bin/env bash
hostname=$(hostname -s)
shopt -s extglob
case $hostname in
presto+([[:digit:]])*)
bash /home/presto.sh;;
presto-data+([[:digit:]])*)
bash /home/presto-data.sh;;
*) echo "Unrecognized hostname $hostname" ;;
esac
使用
read
和 参数扩展
hostname='presto-data1-01'
IFS='-' read pr data id <<< "${hostname}"
echo "$pr '${data%%[0-9]}' $id"
if [ "${data%%[0-9]*}" == 'data' ];then
echo "data host"
else
echo "other"
fi
结果
presto 'data' 01
data host