Bash:检查主机名是否为vq*如何使用通配符?

BoD*_*003 18 bash scripting programming-languages

我有下一个代码,如果主机名与v-qai01或任何其他vq*服务器匹配,我需要它回显1:

if [ `hostname -s` -eq `v-q*` ]; then
        echo "1"
fi
Run Code Online (Sandbox Code Playgroud)

我有几个错误:

./run.sh: line 3: v-q*: command not found
./run.sh: line 3: [: v-qai01: unary operator expected
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

如果我有下一个案例怎么办?

hostname=`hostname -s`

portalesWildcard=v-*ws*
qaiservers={'v-qai01' 'v-qai02'}
portales={'t1wsyellar01' }


if [[ ${hostname} = ${qaiservers} ]]; then
    echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

谢谢

Joh*_*ica 38

使用双方括号,=操作员将接受通配符:

#!/bin/bash

if [[ $(hostname -s) = v-q* ]]; then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

=~当您需要更高级的字符串匹配时,它还有一个用于正则表达式匹配的运算符.这将检查主机名是否也以一个或多个数字结尾:

#!/bin/bash

if [[ $(hostname -s) =~ ^v-q.*[0-9]+$ ]]; then
    ...
fi
Run Code Online (Sandbox Code Playgroud)


gle*_*man 6

你可以使用case声明:

case $(hostname -s) in
  v-q*) echo yes ;;
  *) echo no ;;
esac
Run Code Online (Sandbox Code Playgroud)