【发布时间】:2016-10-07 18:05:38
【问题描述】:
我正在制作一个可以在多台机器上执行相同任务的脚本,如下所示:
#!/bin/bash
if [[ hostname = login.machine1 ]]; then
#do things how they are done on machine1
...
elif [[ hostname = login.machine2 ]]; then
#etc.
fi
问题:有些机器有多个登录节点,如login1.machine2、login2.machine2等。我尝试过shell模式匹配和正则表达式,但它们都不起作用:
if [[ hostname = login?.machine2 ]]
if [[ hostname == login?.machine2 ]]
if [[ hostname =~ login[0-9].machine2 ]]
if [[ hostname =~ login[0-9]\.machine2 ]]
以及至少十几个类似的模式,带或不带引号等。如果 hostname = login1.machine2 OR login2.machine2 等,进行将返回 true 的测试的正确方法是什么?使用 [ 而不是 [[ 的东西的奖励积分。
【问题讨论】:
-
我建议使用变量
$HOSTNAME或命令主机名的输出:$(hostname)。 -
不知道你用的是什么外壳。但在 bash
if [[ $(hostname) = login?.machine2 ]]中,这将检查主机名是否等于字符串“login?.machine2”
标签: regex bash shell pattern-matching